Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
36ba7a3
Formatted test and config code and updated test files
droberts-ctrlo Jul 16, 2025
b7d86de
Updated error handler
droberts-ctrlo Dec 2, 2025
4ac65b3
Updated ts-ignore where this was causing issues with linting and chec…
droberts-ctrlo Dec 2, 2025
82f6db2
Added editorconfig and upgraded ESLint to current version
droberts-ctrlo Jul 17, 2025
b174927
Formatted and changed code with ESLint fixes - functionality has not …
droberts-ctrlo Jul 17, 2025
cebc7f6
Fixed formatting and code where this was broken on merge with current…
droberts-ctrlo Aug 4, 2025
4f7e9c4
Created and updated JSDoc and TS typings where necessary
droberts-ctrlo Jul 25, 2025
70f1d48
Updated linting rules, and added comments where required
droberts-ctrlo Jul 29, 2025
3246f24
Updated and removed extra dependencies and exports where not required
droberts-ctrlo Aug 5, 2025
3a78f2a
Updated with changes within current dev
droberts-ctrlo Aug 19, 2025
5ca6735
Upgraded packages and set up new webpack config
droberts-ctrlo Jul 31, 2025
f08db19
Removed extra unused dependencies
droberts-ctrlo Aug 5, 2025
4e739df
Updated to new DataTables.net API
droberts-ctrlo Jul 31, 2025
dfc5ff5
Updated dashboard and react components
droberts-ctrlo Aug 5, 2025
d69da8b
Removed extra packages
droberts-ctrlo Aug 5, 2025
4a51b32
Updated dashboard and react components
droberts-ctrlo Aug 5, 2025
4d4d3cb
Updated code to align with BS5
droberts-ctrlo Sep 19, 2025
4a925c4
Added searchable select component
droberts-ctrlo Sep 25, 2025
2f1b38d
Fixed error in more-less
droberts-ctrlo Oct 31, 2025
ff19d71
Update code and tsconfig to omit errors
droberts-ctrlo Dec 12, 2025
77dfcd8
Fix error in layouts view
droberts-ctrlo Dec 15, 2025
b1f93db
fix for dev merge
droberts-ctrlo Jun 18, 2026
b721e04
Fix erroneous changes
droberts-ctrlo Jun 18, 2026
eb4c733
Update cypress to fix failing tests
droberts-ctrlo Jun 18, 2026
5bd586d
Update tests.yml
droberts-ctrlo Jun 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .github/workflows/install.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
#!/bin/bash

set -e

apt-get update
apt-get install -y curl gpg
curl -o- https://debian.ctrlo.com/repos/apt/debian/whatever.gpg.key | gpg --dearmor -o /usr/share/keyrings/ctrlo-keyring.gpg
Expand All @@ -18,4 +20,4 @@ apt-get install -y libmoox-types-mooselike-datetime-perl libdatetime-format-date
apt-get install -y libfile-slurp-perl libfile-mimeinfo-perl liblist-compare-perl libnet-oauth2-authorizationserver-perl libfontconfig1
apt-get install -y libctrlo-pdf-perl libpdf-builder-perl fonts-liberation libdate-holidays-gb-perl libcgi-deurl-xs-perl libfile-bom-perl
apt-get install -y libdatetime-format-iso8601-perl liblog-log4perl-perl libwww-mechanize-chrome-perl chromium libfile-libmagic-perl libnet-saml2-perl
apt-get install -y liburl-encode-perl libtext-markdown-perl libtest-tempdir-tiny-perl libtest-mocktime-perl
apt-get install -y liburl-encode-perl libtext-markdown-perl libtest-tempdir-tiny-perl libtest-mocktime-perl libdancer2-plugin-logreport-perl
3 changes: 2 additions & 1 deletion .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ jobs:
browser:
- name: 'chrome'
os: 'ubuntu-22.04'
node_version: 24.x

services:
postgres:
Expand Down Expand Up @@ -187,7 +188,7 @@ jobs:

strategy:
matrix:
node-version: [20.x, 22.x]
node-version: [22.x, 24.x]
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/

steps:
Expand Down
1 change: 1 addition & 0 deletions cypress.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,6 @@ export default defineConfig({
setupNodeEvents(on, config) {
// implement node event listeners here
},
allowCypressEnv: false
},
});
76 changes: 44 additions & 32 deletions cypress/e2e/functionality/02-homepage.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,7 @@ import { goodPassword, goodUser } from "../../support/constants";
describe('Dashboard Tests', () => {
const bigLipsum = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque accumsan, sem et vulputate imperdiet, enim ipsum rhoncus massa, sit amet pellentesque lacus urna sit amet enim. In tristique mollis tincidunt. Sed eget ligula metus. Integer sodales placerat erat. Aliquam erat volutpat. Curabitur varius lacinia diam fringilla efficitur. Sed euismod purus vel turpis molestie, ac fringilla nisi vestibulum. Maecenas ullamcorper ornare dui sodales gravida. Donec maximus egestas eleifend. Etiam in ultrices ante. Duis quis volutpat turpis. Nulla dignissim ornare aliquet.
Fusce interdum gravida est, sit amet vehicula nisi suscipit at. Pellentesque nec fermentum leo, in vehicula nulla. Nam dapibus ultricies tortor in maximus. Donec enim velit, molestie nec feugiat sed, posuere non ex. Nulla pellentesque gravida feugiat. Sed ornare purus vel libero semper aliquet. Nulla rutrum nunc sed vulputate gravida. Cras lobortis, lacus non tincidunt suscipit, leo quam vehicula libero, in vehicula diam justo ac est.
Mauris tempus, mi nec sodales semper, metus neque blandit sem, non scelerisque nunc libero eu augue. Cras ornare ut lectus in mattis. Quisque magna elit, efficitur nec dolor sed, semper dictum nunc. Cras ultricies, augue eget interdum aliquam, quam ex blandit sem, nec sollicitudin ex elit non mauris. Fusce dui justo, feugiat id lacus sit amet, pulvinar tristique felis. Etiam rhoncus ex ut congue aliquet. Sed at felis eget neque rhoncus malesuada. Aliquam commodo condimentum massa, sed volutpat nibh congue et. Maecenas blandit massa sed nisl pulvinar, vitae consectetur tortor placerat. Nulla laoreet diam ipsum, sit amet consectetur sem condimentum quis. Nullam et justo sem. Sed et sapien tempus, scelerisque nisl ac, pretium arcu.
Donec quis finibus ante. Nulla et dui posuere, semper elit quis, maximus ipsum. Aliquam ante nulla, pellentesque sed neque sit amet, finibus cursus est. Aliquam sed sollicitudin orci. Nulla malesuada augue lectus, ac tincidunt orci fermentum ac. Nullam pulvinar diam felis, sed condimentum arcu ornare sit amet. Praesent eget lobortis purus. In hac habitasse platea dictumst. Ut lorem nisl, fringilla vitae quam lobortis, vehicula egestas magna. Sed convallis placerat ante quis convallis. Vivamus pharetra quam diam, ut ultricies neque mollis vitae. Morbi augue tellus, feugiat a interdum a, tincidunt vel ante.
Ut diam tortor, hendrerit eget ipsum non, suscipit mattis elit. Pellentesque ut porttitor risus, at pulvinar tortor. Integer eleifend volutpat efficitur. Maecenas massa odio, pharetra eu eleifend eu, volutpat sed dui. Donec efficitur sed risus sit amet imperdiet. Pellentesque nec arcu non nibh congue cursus et a sapien. Phasellus ullamcorper magna nec varius facilisis. Curabitur et tempus est. Nulla tincidunt porttitor mollis. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean vitae pretium felis. Aliquam vehicula et nisl sit amet pharetra. Nulla ac sollicitudin velit. Cras egestas ac sem vitae sollicitudin. Nullam convallis risus id massa vestibulum imperdiet. Cras in enim sit amet ligula placerat eleifend.`
Mauris tempus, mi nec sodales semper, metus neque blandit sem, non scelerisque nunc libero eu augue. Cras ornare ut lectus in mattis. Quisque magna elit, efficitur nec dolor sed, semper dictum nunc. Cras ultricies, augue eget interdum aliquam, quam ex blandit sem, nec sollicitudin ex elit non mauris. Fusce dui justo, feugiat id lacus sit amet, pulvinar tristique felis. Etiam rhoncus ex ut congue aliquet. Sed at felis eget neque rhoncus malesuada. Aliquam commodo condimentum massa, sed volutpat nibh congue et. Maecenas blandit massa sed nisl pulvinar, vitae consectetur tortor placerat. Nulla laoreet diam ipsum, sit amet consectetur sem condimentum quis. Nullam et justo sem. Sed et sapien tempus, scelerisque nisl ac, pretium arcu.`

beforeEach(() => {
cy.loginAndGoTo(goodUser, goodPassword, 'http://localhost:3000/?did=1');
Expand All @@ -21,61 +19,73 @@ Ut diam tortor, hendrerit eget ipsum non, suscipit mattis elit. Pellentesque ut
})

it('Displays the home page correctly', () => {
cy.get("li.list__item").eq(0)
cy.get("a.nav-link").eq(0)
.should("exist")
.contains("Home dashboard (shared)")
.should("have.class", "link--active");
cy.get("li.list__item").eq(1)
.should("have.class", "active")
.contains("Home dashboard (shared)");
cy.get("a.nav-link").eq(1)
.should("exist")
.contains("Home dashboard (personal)")
.should("not.have.class", "link--active");
.should("not.have.class", "active")
.contains("Home dashboard (personal)");
});

it('Should navigate to the personal dashboard', () => {
cy.get("li.list__item").eq(1)
cy.get("a.nav-link").eq(1)
.should("exist")
.should("not.have.class", "link--active")
.should("not.have.class", "active")
.click();
cy.get("a.nav-link").eq(1)
.should("exist")
.should("have.class", "active")
.contains("Home dashboard (personal)");
});

it('Should navigate to the shared dashboard', () => {
cy.get("li.list__item").eq(0)
cy.get("a.nav-link").eq(1)
.click();
cy.get("a.nav-link").eq(0)
.should("exist")
.should("not.have.class", "link--active")
.should("not.have.class", "active")
.click();
cy.get("a.nav-link").eq(0)
.should("exist")
.should("have.class", "active")
.contains("Home dashboard (shared)");
});

context("Shared Dashboard", () => {
it('Should cancel creation of a shared dashboard widget', () => {
cy.wait(1000);
cy.get(".ld-footer-container")
.find("button")
.eq(1)
.click();
cy.get(".ld-footer-container")
.find(".dropdown__menu")
.find(".dropdown-menu.show")
.find("a")
.eq(1)
.eq(0)
.click();
cy.get("[aria-label='Edit Modal']").find("button.btn-cancel").click();
cy.get(".ld-widget").should("have.length", 0);
});

it("Should create a shared dashboard widget", () => {
cy.wait(1000);
cy.get(".ld-footer-container")
.find("button")
.eq(1)
.click();
cy.get(".ld-footer-container")
.find(".dropdown__menu")
.find(".dropdown-menu.show")
.find("a")
.eq(1)
.eq(0)
.click();
cy.get("[aria-label='Edit Modal']")
.find("input[name='title']", { timeout: 10000 })
.should("be.visible");
cy.get("[aria-label='Edit Modal']")
.find(".modal-footer__right")
.find("button.btn-default").click();
.find("button.btn-primary").click();
cy.get(".ld-widget").should("have.length", 1);
cy.get(".ld-widget").find("div").contains("This is a new notice widget - click edit to update the contents");
});
Expand All @@ -90,7 +100,7 @@ Ut diam tortor, hendrerit eget ipsum non, suscipit mattis elit. Pellentesque ut
.type("With a new title");
cy.get("[aria-label='Edit Modal']")
.find(".modal-footer__right")
.find("button.btn-default").click();
.find("button.btn-primary").click();
cy.get(".ld-widget").find("h4").contains("With a new title");
});

Expand All @@ -105,7 +115,7 @@ Ut diam tortor, hendrerit eget ipsum non, suscipit mattis elit. Pellentesque ut
.type(bigLipsum);
cy.get("[aria-label='Edit Modal']")
.find(".modal-footer__right")
.find("button.btn-default").click();
.find("button.btn-primary").click();
});

it("Should delete a shared dashboard widget", () => {
Expand All @@ -120,43 +130,45 @@ Ut diam tortor, hendrerit eget ipsum non, suscipit mattis elit. Pellentesque ut

context("Personal Dashboard", () => {
it('Should cancel creation of a personal dashboard widget', () => {
cy.get("a.link--primary").click();
cy.get("a.nav-link").eq(1).click();
cy.wait(1000);
cy.get(".ld-footer-container")
.find("button")
.eq(1)
.click();
cy.get(".ld-footer-container")
.find(".dropdown__menu")
.find(".dropdown-menu.show")
.find("a")
.eq(1)
.eq(0)
.click();
cy.get("[aria-label='Edit Modal']").find("button.btn-cancel").click();
cy.get(".ld-widget").should("have.length", 1);
});

it("Should create a personal dashboard widget", () => {
cy.get("a.link--primary").click();
cy.get("a.nav-link").eq(1).click();
cy.wait(1000);
cy.get(".ld-footer-container")
.find("button")
.eq(1)
.click();
cy.get(".ld-footer-container")
.find(".dropdown__menu")
.find(".dropdown-menu.show")
.find("a")
.eq(1)
.eq(0)
.click();
cy.get("[aria-label='Edit Modal']")
.find("input[name='title']", { timeout: 10000 })
.should("be.visible");
cy.get("[aria-label='Edit Modal']")
.find(".modal-footer__right")
.find("button.btn-default").click();
.find("button.btn-primary").click();
cy.get(".ld-widget").should("have.length", 2);
cy.get(".ld-widget").eq(1).find("div").contains("This is a new notice widget - click edit to update the contents");
});

it("Should edit a personal dashboard widget", () => {
cy.get("a.link--primary").click();
cy.get("a.nav-link").eq(1).click();
cy.get(".ld-widget").eq(1).find(".ld-edit-button").click();
cy.get("[aria-label='Edit Modal']")
.find("input[name='title']", { timeout: 10000 })
Expand All @@ -166,12 +178,12 @@ Ut diam tortor, hendrerit eget ipsum non, suscipit mattis elit. Pellentesque ut
.type("With a new title");
cy.get("[aria-label='Edit Modal']")
.find(".modal-footer__right")
.find("button.btn-default").click();
.find("button.btn-primary").click();
cy.get(".ld-widget").eq(1).find("h4").contains("With a new title");
});

it("Should edit a personal dashboard widget with a lot of text", () => {
cy.get("a.link--primary").click();
cy.get("a.nav-link").eq(1).click();
cy.get(".ld-widget").eq(1).find(".ld-edit-button").click();
cy.get("[aria-label='Edit Modal']")
.find("input[name='title']", { timeout: 10000 })
Expand All @@ -182,11 +194,11 @@ Ut diam tortor, hendrerit eget ipsum non, suscipit mattis elit. Pellentesque ut
.type(bigLipsum);
cy.get("[aria-label='Edit Modal']")
.find(".modal-footer__right")
.find("button.btn-default").click();
.find("button.btn-primary").click();
});

it("Should delete a personal dashboard widget", () => {
cy.get("a.link--primary").click();
cy.get("a.nav-link").eq(1).click();
cy.get(".ld-widget").eq(1).find(".ld-edit-button").click();
cy.get("[aria-label='Edit Modal']")
.find("input[name='title']", { timeout: 10000 })
Expand Down
8 changes: 4 additions & 4 deletions cypress/e2e/functionality/03-settings.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ describe("settings tests", () => {
.find("tr")
.contains("No titles available");
cy.mainHeader()
.find(".btn-default")
.find(".btn-primary")
.should("exist")
.click();
cy.location("pathname").should("include", "/title_add");
Expand Down Expand Up @@ -93,7 +93,7 @@ describe("settings tests", () => {
.find("tr")
.contains("No titles available");
cy.mainHeader()
.find(".btn-default")
.find(".btn-primary")
.should("exist")
.click();
cy.location("pathname").should("include", "/title_add");
Expand Down Expand Up @@ -191,7 +191,7 @@ describe("settings tests", () => {
.find("tr")
.contains("No organisations available");
cy.mainHeader()
.find(".btn-default")
.find(".btn-primary")
.should("exist")
.click();
cy.location("pathname").should("include", "/organisation_add");
Expand Down Expand Up @@ -219,7 +219,7 @@ describe("settings tests", () => {
.find("tr")
.contains("No organisations available");
cy.mainHeader()
.find(".btn-default")
.find(".btn-primary")
.should("exist")
.click();
cy.location("pathname").should("include", "/organisation_add");
Expand Down
4 changes: 2 additions & 2 deletions cypress/e2e/functionality/06-tables-and-wizard.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ describe('Another Test Suite', () => {

//attempt save with incorrect (fails)
it.skip('should fail to save new table with invalid shortname ', () => {
cy.get('[data-target="#newTableModal"]').click();
cy.get('[data-bs-target="#newTableModal"]').click();
cy.get('#shortName').type('This value wont $4v£');
cy.get("#name").type("table to fail");
cy.get('.btn-js-next').eq(0).click();
Expand All @@ -19,7 +19,7 @@ describe('Another Test Suite', () => {
});

it('should save a new table successfully', () => {
cy.get('[data-target="#newTableModal"]').click();
cy.get('[data-bs-target="#newTableModal"]').click();
cy.get('#shortName').type('1-test_table');
cy.get("#name").type("1-test-table");
cy.get('.btn-js-next').eq(0).click();
Expand Down
66 changes: 0 additions & 66 deletions cypress/e2e/functionality/08-data-view.cy.ts

This file was deleted.

Loading
Loading