265 lines
7.8 KiB
JavaScript
265 lines
7.8 KiB
JavaScript
context("FileUploader", () => {
|
|
before(() => {
|
|
cy.login("Administrator", Cypress.env("adminPassword") || "admin");
|
|
});
|
|
|
|
beforeEach(() => {
|
|
cy.visit("/desk");
|
|
cy.wait(2000); // workspace can load async and clear active dialog
|
|
});
|
|
|
|
function open_upload_dialog() {
|
|
cy.window()
|
|
.its("frappe")
|
|
.then((frappe) => {
|
|
new frappe.ui.FileUploader();
|
|
});
|
|
cy.wait(500);
|
|
}
|
|
|
|
it("upload dialog api works", () => {
|
|
open_upload_dialog();
|
|
cy.get_open_dialog().should("contain", "Drag and drop files");
|
|
cy.hide_dialog();
|
|
});
|
|
|
|
it("should accept dropped files", () => {
|
|
open_upload_dialog();
|
|
|
|
cy.get_open_dialog()
|
|
.find(".file-upload-area")
|
|
.selectFile("cypress/fixtures/example.json", {
|
|
action: "drag-drop",
|
|
});
|
|
|
|
cy.get_open_dialog().find(".file-name").should("contain", "example.json");
|
|
cy.intercept("POST", "/api/method/upload_file").as("upload_file");
|
|
cy.get_open_dialog().findByRole("button", { name: "Upload" }).click();
|
|
cy.wait("@upload_file").its("response.statusCode").should("eq", 200);
|
|
cy.get(".modal:visible").should("not.exist");
|
|
});
|
|
|
|
it("should accept uploaded files", () => {
|
|
open_upload_dialog();
|
|
|
|
cy.get_open_dialog().findByRole("button", { name: "Library" }).click();
|
|
cy.findByPlaceholderText("Search by filename or extension").type("example.json");
|
|
cy.get_open_dialog().findAllByText("example.json").first().click();
|
|
cy.intercept("POST", "/api/method/upload_file").as("upload_file");
|
|
cy.get_open_dialog().findByRole("button", { name: "Upload" }).click();
|
|
cy.wait("@upload_file")
|
|
.its("response.body.message")
|
|
.should("have.property", "file_name", "example.json");
|
|
cy.get(".modal:visible").should("not.exist");
|
|
});
|
|
|
|
describe("Public file upload restriction", () => {
|
|
const test_user = "test_file_uploader@example.com";
|
|
const test_password = "test_password";
|
|
|
|
before(() => {
|
|
// Create test user without System Manager role
|
|
cy.call("frappe.tests.ui_test_helpers.create_test_user", {
|
|
username: test_user,
|
|
});
|
|
cy.remove_role(test_user, "System Manager");
|
|
// Set password for test user
|
|
cy.set_value("User", test_user, {
|
|
new_password: test_password,
|
|
});
|
|
});
|
|
|
|
after(() => {
|
|
// Clean up test user
|
|
cy.login("Administrator", Cypress.env("adminPassword") || "admin");
|
|
cy.visit("/desk");
|
|
cy.wait(1000);
|
|
cy.remove_doc("User", test_user, true); // true = ignore_missing
|
|
});
|
|
|
|
it("should show checkbox and toggle when setting is disabled for System Manager", () => {
|
|
cy.login("Administrator", Cypress.env("adminPassword") || "admin");
|
|
cy.visit("/desk");
|
|
cy.wait(1000);
|
|
|
|
// Disable the setting
|
|
cy.set_value("System Settings", "System Settings", {
|
|
only_allow_system_managers_to_upload_public_files: 0,
|
|
});
|
|
// Update sysdefaults in window to avoid reload
|
|
cy.window()
|
|
.its("frappe")
|
|
.then((frappe) => {
|
|
frappe.boot.sysdefaults.only_allow_system_managers_to_upload_public_files = 0;
|
|
});
|
|
cy.visit("/desk");
|
|
cy.wait(2000);
|
|
|
|
open_upload_dialog();
|
|
|
|
// Add a file to the dialog
|
|
cy.get_open_dialog()
|
|
.find(".file-upload-area")
|
|
.selectFile("cypress/fixtures/example.json", {
|
|
action: "drag-drop",
|
|
});
|
|
|
|
// Wait for file preview to render
|
|
cy.get_open_dialog().find(".file-preview").should("exist");
|
|
|
|
// Checkbox should be visible and enabled
|
|
cy.get_open_dialog().find("#uploader-private-checkbox").should("be.visible");
|
|
cy.get_open_dialog()
|
|
.find("#uploader-private-checkbox input")
|
|
.should("not.be.disabled");
|
|
|
|
// Toggle button should be visible (secondary action button)
|
|
cy.get_open_dialog()
|
|
.find(".modal-footer .btn-secondary")
|
|
.should("be.visible")
|
|
.and("contain", "Set all");
|
|
|
|
cy.hide_dialog();
|
|
});
|
|
|
|
it("should show checkbox and toggle when setting is disabled for non-System Manager", () => {
|
|
cy.login("Administrator", Cypress.env("adminPassword") || "admin");
|
|
cy.visit("/desk");
|
|
cy.wait(1000);
|
|
|
|
// Disable the setting
|
|
cy.set_value("System Settings", "System Settings", {
|
|
only_allow_system_managers_to_upload_public_files: 0,
|
|
});
|
|
cy.visit("/desk");
|
|
cy.wait(1000);
|
|
|
|
// Login as non-System Manager
|
|
cy.login(test_user, test_password);
|
|
cy.visit("/desk");
|
|
cy.wait(2000);
|
|
// Update sysdefaults in window
|
|
cy.window()
|
|
.its("frappe")
|
|
.then((frappe) => {
|
|
frappe.boot.sysdefaults.only_allow_system_managers_to_upload_public_files = 0;
|
|
});
|
|
|
|
open_upload_dialog();
|
|
|
|
// Add a file to the dialog
|
|
cy.get_open_dialog()
|
|
.find(".file-upload-area")
|
|
.selectFile("cypress/fixtures/example.json", {
|
|
action: "drag-drop",
|
|
});
|
|
|
|
// Wait for file preview to render
|
|
cy.get_open_dialog().find(".file-preview").should("exist");
|
|
|
|
// Checkbox should be visible and enabled
|
|
cy.get_open_dialog().find("#uploader-private-checkbox").should("be.visible");
|
|
cy.get_open_dialog()
|
|
.find("#uploader-private-checkbox input")
|
|
.should("not.be.disabled");
|
|
|
|
// Toggle button should be visible (secondary action button)
|
|
cy.get_open_dialog()
|
|
.find(".modal-footer .btn-secondary")
|
|
.should("be.visible")
|
|
.and("contain", "Set all");
|
|
|
|
cy.hide_dialog();
|
|
});
|
|
|
|
it("should show checkbox and toggle when setting is enabled for System Manager", () => {
|
|
cy.login("Administrator", Cypress.env("adminPassword") || "admin");
|
|
cy.visit("/desk");
|
|
cy.wait(1000);
|
|
|
|
// Enable the setting
|
|
cy.set_value("System Settings", "System Settings", {
|
|
only_allow_system_managers_to_upload_public_files: 1,
|
|
});
|
|
// Update sysdefaults in window to avoid reload
|
|
cy.window()
|
|
.its("frappe")
|
|
.then((frappe) => {
|
|
frappe.boot.sysdefaults.only_allow_system_managers_to_upload_public_files = 1;
|
|
});
|
|
cy.visit("/desk");
|
|
cy.wait(2000);
|
|
|
|
open_upload_dialog();
|
|
|
|
// Add a file to the dialog
|
|
cy.get_open_dialog()
|
|
.find(".file-upload-area")
|
|
.selectFile("cypress/fixtures/example.json", {
|
|
action: "drag-drop",
|
|
});
|
|
|
|
// Wait for file preview to render
|
|
cy.get_open_dialog().find(".file-preview").should("exist");
|
|
|
|
// Checkbox should be visible and enabled
|
|
cy.get_open_dialog().find("#uploader-private-checkbox").should("be.visible");
|
|
cy.get_open_dialog()
|
|
.find("#uploader-private-checkbox input")
|
|
.should("not.be.disabled");
|
|
|
|
// Toggle button should be visible (secondary action button)
|
|
cy.get_open_dialog()
|
|
.find(".modal-footer .btn-secondary")
|
|
.should("be.visible")
|
|
.and("contain", "Set all");
|
|
|
|
cy.hide_dialog();
|
|
});
|
|
|
|
it("should show disabled checkbox and hide toggle when setting is enabled for non-System Manager", () => {
|
|
cy.login("Administrator", Cypress.env("adminPassword") || "admin");
|
|
cy.visit("/desk");
|
|
cy.wait(1000);
|
|
|
|
// Enable the setting
|
|
cy.set_value("System Settings", "System Settings", {
|
|
only_allow_system_managers_to_upload_public_files: 1,
|
|
});
|
|
cy.visit("/desk");
|
|
cy.wait(1000);
|
|
|
|
// Login as non-System Manager
|
|
cy.login(test_user, test_password);
|
|
cy.visit("/desk");
|
|
cy.wait(2000);
|
|
// Update sysdefaults in window
|
|
cy.window()
|
|
.its("frappe")
|
|
.then((frappe) => {
|
|
frappe.boot.sysdefaults.only_allow_system_managers_to_upload_public_files = 1;
|
|
});
|
|
|
|
open_upload_dialog();
|
|
|
|
// Add a file to the dialog
|
|
cy.get_open_dialog()
|
|
.find(".file-upload-area")
|
|
.selectFile("cypress/fixtures/example.json", {
|
|
action: "drag-drop",
|
|
});
|
|
|
|
// Wait for file preview to render
|
|
cy.get_open_dialog().find(".file-preview").should("exist");
|
|
|
|
// Checkbox should be visible but disabled
|
|
cy.get_open_dialog().find("#uploader-private-checkbox").should("be.visible");
|
|
cy.get_open_dialog().find("#uploader-private-checkbox input").should("be.disabled");
|
|
|
|
// Toggle button should not be visible (secondary action button should be hidden)
|
|
cy.get_open_dialog().find(".modal-footer .btn-secondary").should("not.be.visible");
|
|
|
|
cy.hide_dialog();
|
|
});
|
|
});
|
|
});
|