From fa9ac6fcbbf9690bcc6b76f429aad4908052682f Mon Sep 17 00:00:00 2001 From: IvanJGG Date: Thu, 9 Jan 2025 13:48:46 -0600 Subject: [PATCH 1/3] CAF-42 git Correct Package route and test --- tests/cypress/e2e/dashboard.cy.js | 4 ++-- tests/cypress/e2e/packages.cy.js | 4 ++-- views/dashboard/blocks/parcelControlbutton.html | 2 +- views/{packages => packages-tracking}/assets/index.js | 2 +- views/{packages => packages-tracking}/index.html | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) rename views/{packages => packages-tracking}/assets/index.js (97%) rename views/{packages => packages-tracking}/index.html (92%) diff --git a/tests/cypress/e2e/dashboard.cy.js b/tests/cypress/e2e/dashboard.cy.js index 91c5955..9e85a7b 100644 --- a/tests/cypress/e2e/dashboard.cy.js +++ b/tests/cypress/e2e/dashboard.cy.js @@ -28,7 +28,7 @@ describe("Role-based button functionality", () => { cy.visitWithToken("/dashboard"); cy.get("#btnParcelControl").contains("Control de paquetería").click(); - cy.url().should("include", "/packages"); + cy.url().should("include", "/packages-tracking"); cy.visitWithToken("/dashboard"); }); }); @@ -56,7 +56,7 @@ describe("Role-based button functionality", () => { cy.visitWithToken("/dashboard"); cy.get("#btnParcelControl").contains("Control de paquetería").click(); - cy.url().should("include", "/packages"); + cy.url().should("include", "/packages-tracking"); }); }); diff --git a/tests/cypress/e2e/packages.cy.js b/tests/cypress/e2e/packages.cy.js index f52c5f9..34965b1 100644 --- a/tests/cypress/e2e/packages.cy.js +++ b/tests/cypress/e2e/packages.cy.js @@ -17,7 +17,7 @@ describe("Packages Table", () => { }, }).as("getPackages"); - cy.visitWithToken("/packages"); + cy.visitWithToken("/packages-tracking"); }); it("should display the packages table with confirmation buttons", () => { @@ -36,7 +36,7 @@ describe("Packages Table", () => { body: { message: "Internal Server Error" }, }).as("getPackagesError"); - cy.visitWithToken("/packages"); + cy.visitWithToken("/packages-tracking"); cy.wait("@getPackagesError"); cy.get("#packageTable").should("exist"); diff --git a/views/dashboard/blocks/parcelControlbutton.html b/views/dashboard/blocks/parcelControlbutton.html index 5ee724f..3006b52 100644 --- a/views/dashboard/blocks/parcelControlbutton.html +++ b/views/dashboard/blocks/parcelControlbutton.html @@ -4,7 +4,7 @@ id="btnParcelControl" class="btn btn-primary btn-lg me-3" style="width: 150px; height: 150px" - onclick="navigateTo('/packages')" + onclick="navigateTo('/packages-tracking')" > local_shipping
Control de paquetería diff --git a/views/packages/assets/index.js b/views/packages-tracking/assets/index.js similarity index 97% rename from views/packages/assets/index.js rename to views/packages-tracking/assets/index.js index 8cc0ed4..9eb7534 100644 --- a/views/packages/assets/index.js +++ b/views/packages-tracking/assets/index.js @@ -93,7 +93,7 @@ async function loadPackagesTable() { } document.getElementById("registerPackage").addEventListener("click", () => { - window.location.href = "/packages/register.html"; + window.location.href = "/packages-tracking/register.html"; }); window.addEventListener("load", async () => { diff --git a/views/packages/index.html b/views/packages-tracking/index.html similarity index 92% rename from views/packages/index.html rename to views/packages-tracking/index.html index 69d908c..52358c6 100644 --- a/views/packages/index.html +++ b/views/packages-tracking/index.html @@ -23,4 +23,4 @@

Lista de Entregas

- + From 34d66e8b52108aaa53f68be634905a1baac7f913 Mon Sep 17 00:00:00 2001 From: IvanJGG Date: Thu, 9 Jan 2025 20:08:39 -0600 Subject: [PATCH 2/3] CAF-42 git Correcting route --- tests/cypress/e2e/dashboard.cy.js | 4 ++-- tests/cypress/e2e/packages.cy.js | 4 ++-- views/dashboard/blocks/parcelControlbutton.html | 2 +- views/{packages-tracking => package-tracking}/assets/index.js | 2 +- views/{packages-tracking => package-tracking}/index.html | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) rename views/{packages-tracking => package-tracking}/assets/index.js (97%) rename views/{packages-tracking => package-tracking}/index.html (92%) diff --git a/tests/cypress/e2e/dashboard.cy.js b/tests/cypress/e2e/dashboard.cy.js index 9e85a7b..7be1098 100644 --- a/tests/cypress/e2e/dashboard.cy.js +++ b/tests/cypress/e2e/dashboard.cy.js @@ -28,7 +28,7 @@ describe("Role-based button functionality", () => { cy.visitWithToken("/dashboard"); cy.get("#btnParcelControl").contains("Control de paquetería").click(); - cy.url().should("include", "/packages-tracking"); + cy.url().should("include", "/package-tracking"); cy.visitWithToken("/dashboard"); }); }); @@ -56,7 +56,7 @@ describe("Role-based button functionality", () => { cy.visitWithToken("/dashboard"); cy.get("#btnParcelControl").contains("Control de paquetería").click(); - cy.url().should("include", "/packages-tracking"); + cy.url().should("include", "/package-tracking"); }); }); diff --git a/tests/cypress/e2e/packages.cy.js b/tests/cypress/e2e/packages.cy.js index 34965b1..eb4c128 100644 --- a/tests/cypress/e2e/packages.cy.js +++ b/tests/cypress/e2e/packages.cy.js @@ -17,7 +17,7 @@ describe("Packages Table", () => { }, }).as("getPackages"); - cy.visitWithToken("/packages-tracking"); + cy.visitWithToken("/package-tracking"); }); it("should display the packages table with confirmation buttons", () => { @@ -36,7 +36,7 @@ describe("Packages Table", () => { body: { message: "Internal Server Error" }, }).as("getPackagesError"); - cy.visitWithToken("/packages-tracking"); + cy.visitWithToken("/package-tracking"); cy.wait("@getPackagesError"); cy.get("#packageTable").should("exist"); diff --git a/views/dashboard/blocks/parcelControlbutton.html b/views/dashboard/blocks/parcelControlbutton.html index 3006b52..5798ece 100644 --- a/views/dashboard/blocks/parcelControlbutton.html +++ b/views/dashboard/blocks/parcelControlbutton.html @@ -4,7 +4,7 @@ id="btnParcelControl" class="btn btn-primary btn-lg me-3" style="width: 150px; height: 150px" - onclick="navigateTo('/packages-tracking')" + onclick="navigateTo('/package-tracking')" > local_shipping
Control de paquetería diff --git a/views/packages-tracking/assets/index.js b/views/package-tracking/assets/index.js similarity index 97% rename from views/packages-tracking/assets/index.js rename to views/package-tracking/assets/index.js index 9eb7534..64bf095 100644 --- a/views/packages-tracking/assets/index.js +++ b/views/package-tracking/assets/index.js @@ -93,7 +93,7 @@ async function loadPackagesTable() { } document.getElementById("registerPackage").addEventListener("click", () => { - window.location.href = "/packages-tracking/register.html"; + window.location.href = "/package-tracking/register.html"; }); window.addEventListener("load", async () => { diff --git a/views/packages-tracking/index.html b/views/package-tracking/index.html similarity index 92% rename from views/packages-tracking/index.html rename to views/package-tracking/index.html index 52358c6..f4fc2c2 100644 --- a/views/packages-tracking/index.html +++ b/views/package-tracking/index.html @@ -23,4 +23,4 @@

Lista de Entregas

- + From e718480a2008b28e7d3ff83108ab6ce0f91fc652 Mon Sep 17 00:00:00 2001 From: IvanJGG Date: Fri, 31 Jan 2025 20:37:07 -0600 Subject: [PATCH 3/3] CAF-42 Create Interface to view and edit role permissions and test --- tests/cypress/e2e/roles.permissions.cy.js | 45 ++++++++++++++ views/roles/assets/index.js | 4 +- views/roles/assets/permissions.js | 76 +++++++++++++++++++++++ views/roles/permissions.html | 18 ++++++ 4 files changed, 141 insertions(+), 2 deletions(-) create mode 100644 tests/cypress/e2e/roles.permissions.cy.js create mode 100644 views/roles/assets/permissions.js create mode 100644 views/roles/permissions.html diff --git a/tests/cypress/e2e/roles.permissions.cy.js b/tests/cypress/e2e/roles.permissions.cy.js new file mode 100644 index 0000000..757f272 --- /dev/null +++ b/tests/cypress/e2e/roles.permissions.cy.js @@ -0,0 +1,45 @@ +describe("Permissions Page", () => { + beforeEach(() => { + var id = 123; + + cy.intercept("GET", "/roles/123/nodes", { + body: { + message: "OK", + permissions: { + "Usuarios": ["Crear", "Editar", "Eliminar"], + "Roles": ["Asignar", "Modificar"] + } + } + }).as("getPermissions"); + + cy.intercept("POST", "/roles/123/nodes").as("savePermissions"); + + cy.visitWithToken(`/roles/permissions/?id=${id}`); + }); + + it("should load and display permissions", () => { + cy.wait("@getPermissions"); + + cy.get("#permissionsTable").should("be.visible"); + cy.contains("Usuarios").should("exist"); + cy.contains("Crear").should("exist"); + cy.contains("Editar").should("exist"); + cy.contains("Eliminar").should("exist"); + cy.contains("Roles").should("exist"); + cy.contains("Asignar").should("exist"); + cy.contains("Modificar").should("exist"); + }); + + it("should have checkboxes for permissions", () => { + cy.get("input[type='checkbox']").should("have.length", 5); + }); + + it("should allow selecting permissions", () => { + cy.get("input[type='checkbox']").first().check().should("be.checked"); + cy.get("input[type='checkbox']").eq(1).uncheck().should("not.be.checked"); + }); + + it("should have save button disabled initially", () => { + cy.get("#savePermissions").should("be.disabled"); + }); +}); diff --git a/views/roles/assets/index.js b/views/roles/assets/index.js index 784e14f..28fcf66 100644 --- a/views/roles/assets/index.js +++ b/views/roles/assets/index.js @@ -37,7 +37,7 @@ function createActionsCell(role) { return actionsCell; } -function createAssignButton() { +function createAssignButton(role) { const assignButton = document.createElement("button"); assignButton.className = "btn outline-secondary btn-sm me-2"; assignButton.title = "Asignar Permisos"; @@ -50,7 +50,7 @@ function createAssignButton() { assignButton.appendChild(assignIcon); assignButton.onclick = () => { - // Logica para Asignar Permisos + window.location.href = `/roles/permissions/?id=${role.id}`; }; return assignButton; diff --git a/views/roles/assets/permissions.js b/views/roles/assets/permissions.js new file mode 100644 index 0000000..fa30b01 --- /dev/null +++ b/views/roles/assets/permissions.js @@ -0,0 +1,76 @@ + +async function fetchPermissions(roleId) { + try { + const response = await apiRequest("GET", `roles/${roleId}/nodes`); + + return response.data; + } catch (error) { + console.error("Error al cargar permisos:", error); + return null; + } +} + +function createPermissionsTable(permissions) { + const permissionsTable = document.getElementById("permissionsTable"); + + Object.entries(permissions).forEach(([category, permissionList]) => { + const categoryRow = document.createElement("tr"); + const categoryCell = document.createElement("td"); + categoryCell.colSpan = 2; + categoryCell.textContent = category; + categoryCell.style.fontWeight = "bold"; + categoryRow.appendChild(categoryCell); + permissionsTable.appendChild(categoryRow); + + permissionList.forEach((permission) => { + const permissionRow = document.createElement("tr"); + + const permissionCell = document.createElement("td"); + permissionCell.textContent = permission; + + const checkboxCell = document.createElement("td"); + const checkbox = document.createElement("input"); + checkbox.type = "checkbox"; + checkbox.dataset.permissionName = permission; + checkboxCell.appendChild(checkbox); + + permissionRow.appendChild(permissionCell); + permissionRow.appendChild(checkboxCell); + permissionsTable.appendChild(permissionRow); + }); + }); +} + +async function savePermissions(roleId) { + const checkboxes = document.querySelectorAll("input[type='checkbox']"); + const updatedPermissions = Array.from(checkboxes).map((checkbox) => ({ + permission: checkbox.dataset.permissionName, + enabled: checkbox.checked, + })); + + try { + await apiRequest("POST", `roles/${roleId}/nodes`, updatedPermissions); + + alert("Permisos guardados con éxito."); + } catch (error) { + console.error("Error al guardar permisos:", error); + alert("Hubo un error al guardar los permisos."); + } +} + +window.addEventListener("load", async () => { + const urlParams = new URLSearchParams(window.location.search); + const roleId = urlParams.get("id"); + + const permissionsData = await fetchPermissions(roleId); + + if (permissionsData && permissionsData.message === "OK") { + createPermissionsTable(permissionsData.permissions); + } else { + alert(permissionsData?.message || "Error al cargar los permisos."); + } +}); + +document.getElementById("savePermissions").addEventListener("click", async () => { + await savePermissions(roleId); +}); diff --git a/views/roles/permissions.html b/views/roles/permissions.html new file mode 100644 index 0000000..a3e3cdc --- /dev/null +++ b/views/roles/permissions.html @@ -0,0 +1,18 @@ +
+
+
+ + + + + + + +
Permisos
+ + +
+
+
+ +