Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
4075433
chore(codegen): regenerate sdk.ts after cherry-picking stan-core x150…
yoldas May 7, 2026
e710d36
feat(graphql): add treatment type fragments, mutations and update que…
yoldas May 7, 2026
b10b7c0
chore(codegen): regenerate sdk.ts for treatment type operations (x1439)
yoldas May 7, 2026
a28f5be
feat: add treatment types to work row as pills
yoldas May 11, 2026
5828d16
feat: add treatment types table header
yoldas May 11, 2026
1d879a6
feat: add treatment type and other fields to work factory
yoldas May 11, 2026
7bc6e88
feat: add treatment types to work factory for mocks
yoldas May 11, 2026
1679569
feat: add treatment type repository for mocks
yoldas May 11, 2026
179547a
feat: add treatment type to config handlers for mocks
yoldas May 11, 2026
8cd2c0e
feat: add treatment types to work handlers for mocks
yoldas May 11, 2026
e92a886
fix: add slash to proxy address to fix request forwarding
yoldas May 12, 2026
d1fe9ba
feat: add treatment types section to config page
yoldas May 12, 2026
9791588
feat: add multi-select treatment types to SGP management page
yoldas May 12, 2026
09df5b5
feat: display treatment types as pills and match the cell location to…
yoldas May 12, 2026
7a522ce
feat: add treatment types support to state machine and work creation
yoldas May 12, 2026
06c9049
test: wait for the selection action before asserting the URL update, …
yoldas May 12, 2026
cda7220
test: fix tests to use real group names and labels to match the mock …
yoldas May 12, 2026
2ad595d
fix: for treatment type multi select the value prop for CustomReactSe…
yoldas May 12, 2026
232ffaa
fix: join treatment types for the Records for SGP management download
yoldas May 13, 2026
9cc5676
test: clear existing characters in cycles before entering new value i…
yoldas May 13, 2026
e17d423
Merge branch 'devel' into x1439-treatment-type-on-the-sgp-management-…
yoldas May 13, 2026
38210de
test: add tests for treatment type selection, chip display, and succe…
yoldas May 13, 2026
171f502
test: add reusable mockCreateObjectURL utility for URL.createObjectUR…
yoldas May 13, 2026
77f177b
test: use mockCreateObjectURL helper for work allocation tests
yoldas May 13, 2026
93a0a6a
feat: move Treatment Types to next to Work Type in Allocate a new SGP…
yoldas May 13, 2026
aa4f1ac
feat: move Treatment Types column to next to Work Type in work alloca…
yoldas May 13, 2026
eaec0a5
feat: move Treatment Types cell to next to Work Type in work allocati…
yoldas May 13, 2026
2998ea0
feat: list treatment types after work type in create work success mes…
yoldas May 13, 2026
57e9226
test: add tests for state machine generated success message in SGP ma…
yoldas May 14, 2026
ee842eb
test: add tests for treatment types in Allocate a new SGP number sect…
yoldas May 14, 2026
1d30fe4
test: rename work allocation spec
yoldas May 14, 2026
b3ccfdd
test: add treatement type factory
yoldas May 14, 2026
26b1849
test: add tests for work-allocation-table treatment type header, cell…
yoldas May 14, 2026
ca58233
test: add tests for Records for SGP management spreadshet download da…
yoldas May 14, 2026
7196c89
test: add brief summary to the beginning of the tests as comments
yoldas May 14, 2026
9022fa9
test: rename work allocation table test file
yoldas May 14, 2026
f08940a
test: add tests for treatment types in configuration page
yoldas May 14, 2026
053d7cb
fix: revalidate the router loader to use server side values for treat…
yoldas May 14, 2026
20012f2
fix: clear labwareScanInput before each typing in cypress/e2e/pages/x…
yoldas May 14, 2026
9cf9bf7
fix: prevent looped clicks without waits by checking button visibilit…
yoldas May 14, 2026
ef8fc84
fix(ci): React Hook React.useMemo has a missing dependency: revalidator
yoldas May 14, 2026
c399062
fix(ci): clear labwareScanInput before typing and wait for RecordVisi…
yoldas May 14, 2026
898ddf0
fix(ci): replace array-like iterations with scoped cypress queries us…
yoldas May 14, 2026
46d82c2
fix(ci): remove unused import getAllSelect from visiumQC spec
yoldas May 14, 2026
123cfca
fix(ci): allow ES2015 library APIs (Array.from, Object.values, includ…
yoldas May 14, 2026
9ec1b47
Merge branch 'devel' into x1439-treatment-type-on-the-sgp-management-…
yoldas May 14, 2026
9d9080c
fix(ci): match the labware barcode in Amplification test with devel b…
yoldas May 14, 2026
d8fcfb5
fix(ci): match cypress docker image to nvmrc
yoldas May 14, 2026
ebca6b4
fix(ci): change cypress image version to current exact match with .nvmrc
yoldas May 14, 2026
49d677f
fix(ci): slightly higher version of the cypress image
yoldas May 14, 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
5 changes: 2 additions & 3 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,8 @@ jobs:
name: Run cypress tests
runs-on: ubuntu-latest
container:
image: cypress/browsers:node18.12.0-chrome106-ff106

options: --user 1001
image: cypress/browsers:node-22.14.0-chrome-134.0.6998.165-1-ff-136.0.3-edge-134.0.3124.85-1
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would leave this for a separate PR and handle the Node upgrade there, including upgrading the build Node version as well as the github actions versions

At the moment, the tests are running with a different Node version from the one used to build the image

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Test use the version from .nvmrc which is 22.14.0 and that matches this image version.
I will still extract the change to another PR as you asked.

options: --ipc=host
steps:
- uses: actions/checkout@v4
name: Checkout
Expand Down
51 changes: 27 additions & 24 deletions cypress/e2e/pages/visiumQC.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import {
} from '../../../src/types/sdk';
import { shouldDisplyProjectAndUserNameForWorkNumber } from '../shared/workNumberExtraInfo.cy';
import {
getAllSelect,
selectOption,
selectOptionForMultiple,
selectSGPNumber,
Expand Down Expand Up @@ -45,7 +44,7 @@ describe('Visium QC Page', () => {
describe('On Visium QCType as Slide Processing', () => {
context('When user scans in a slide ', () => {
before(() => {
cy.get('#labwareScanInput').type('STAN-811EA{enter}');
cy.get('#labwareScanInput').clear().type('STAN-811EA{enter}');
});
it('shows it on the page', () => {
cy.findByText('STAN-811EA').should('be.visible');
Expand All @@ -71,7 +70,7 @@ describe('Visium QC Page', () => {
context('costing field check', () => {
context('when user enters a labware which has already assigned a costing', () => {
before(() => {
cy.get('#labwareScanInput').type('STAN-2101{enter}');
cy.get('#labwareScanInput').clear().type('STAN-2101{enter}');
});
it('disables Slide costing drop down', () => {
shouldBeDisabled('slide-costing');
Expand All @@ -85,7 +84,7 @@ describe('Visium QC Page', () => {
});
context('when user enters a labware with invalid barcode', () => {
before(() => {
cy.get('#labwareScanInput').type('aaa{enter}');
cy.get('#labwareScanInput').clear().type('aaa{enter}');
});
it('shows barcode not found message', () => {
cy.findByText('Invalid barcode: aaa').should('be.visible');
Expand Down Expand Up @@ -117,8 +116,10 @@ describe('Visium QC Page', () => {
});
});
it('has all comment dropdowns enabled', () => {
getAllSelect('comment').forEach((elem: any) => {
cy.wrap(elem).should('be.enabled');
cy.findAllByTestId('comment').each(($elem) => {
cy.wrap($elem).within(() => {
cy.findByRole('combobox').should('be.enabled');
});
});
});
});
Expand All @@ -135,8 +136,10 @@ describe('Visium QC Page', () => {
});
});
it('enables all the comment dropdowns', () => {
getAllSelect('comment').forEach((elem: any) => {
cy.wrap(elem).should('be.enabled');
cy.findAllByTestId('comment').each(($elem) => {
cy.wrap($elem).within(() => {
cy.findByRole('combobox').should('be.enabled');
});
});
});
});
Expand All @@ -153,7 +156,7 @@ describe('Visium QC Page', () => {
context('When slide costing field is empty, all other fields are valid', () => {
before(() => {
cy.reload();
cy.get('#labwareScanInput').type('STAN-811EA{enter}');
cy.get('#labwareScanInput').clear().type('STAN-811EA{enter}');
selectOption('slide-costing', '');
selectSGPNumber('SGP1008');
cy.findByTestId('formInput').type('123456');
Expand Down Expand Up @@ -235,7 +238,7 @@ describe('Visium QC Page', () => {
});

it('shows an error', () => {
cy.get('#labwareScanInput').type('STAN-2100{enter}');
cy.get('#labwareScanInput').clear().type('STAN-2100{enter}');
selectOption('slide-costing', 'SGP');
selectSGPNumber('SGP1008');
selectOption('slide-costing', 'Faculty');
Expand All @@ -249,7 +252,7 @@ describe('Visium QC Page', () => {
before(() => {
cy.reload();
cy.get('#labwareScanInput').clear().type('STAN-811EA{enter}');
cy.get('#labwareScanInput').type('STAN-811FA{enter}');
cy.get('#labwareScanInput').clear().type('STAN-811FA{enter}');
});
it('should display both labwares', () => {
cy.findAllByTestId('passFailComments').should('have.length', 2);
Expand All @@ -267,7 +270,7 @@ describe('Visium QC Page', () => {

context('When user scans in a 96 well plate ', () => {
before(() => {
cy.get('#labwareScanInput').type('STAN-811EA{enter}');
cy.get('#labwareScanInput').clear().type('STAN-811EA{enter}');
});
it('displays the labware layout on the page', () => {
cy.findByText('STAN-811EA').should('be.visible');
Expand Down Expand Up @@ -314,7 +317,7 @@ describe('Visium QC Page', () => {
});
cy.reload();
selectOption('qcType', 'Amplification');
cy.get('#labwareScanInput').type('STAN-811EA{enter}');
cy.get('#labwareScanInput').clear().type('STAN-811EA{enter}');
});
it('displays error message', () => {
cy.findByText('No Cq values associated with the labware slots').should('be.visible');
Expand All @@ -332,18 +335,18 @@ describe('Visium QC Page', () => {
before(() => {
cy.reload();
selectOption('qcType', 'Amplification');
cy.get('#labwareScanInput').type('STAN-811EA{enter}');
cy.findByTestId('all-Cycles').type('3');
cy.get('#labwareScanInput').clear().type('STAN-811EA{enter}');
cy.findByTestId('all-Cycles').clear().type('3');
});
it('Save button should be disabled when there is no SGP number', () => {
selectSGPNumber('');
cy.findByRole('button', { name: /Save/i }).should('be.disabled');
});
it('shows a success message', () => {
selectSGPNumber('SGP1008');
cy.findByTestId('all-Cycles').type('4');
cy.findByTestId('all-Cycles').clear().type('4');
cy.findByRole('button', { name: /Save/i }).should('not.be.disabled').click();
cy.findByText('Amplification complete').should('be.visible');
cy.findByText(/Amplification\s*complete/i, { timeout: 30000 }).should('be.visible');
});
});
});
Expand All @@ -356,7 +359,7 @@ describe('Visium QC Page', () => {
});
context('On load', () => {
before(() => {
cy.get('#labwareScanInput').type('STAN-811EA{enter}');
cy.get('#labwareScanInput').clear().type('STAN-811EA{enter}');
});
it('shows measurementType dropdown with no option selected', () => {
shouldDisplaySelectedValue('measurementType', '');
Expand Down Expand Up @@ -396,7 +399,7 @@ describe('Visium QC Page', () => {
});
context('When user scans in a slide ', () => {
before(() => {
cy.get('#labwareScanInput').type('STAN-2100{enter}');
cy.get('#labwareScanInput').clear().type('STAN-2100{enter}');
});
it('shows it on the page', () => {
cy.findByText('STAN-2100').should('be.visible');
Expand Down Expand Up @@ -480,7 +483,7 @@ describe('Visium QC Page', () => {
});
selectSGPNumber('SGP1008');
selectOption('qcType', 'SPRI clean up');
cy.get('#labwareScanInput').type('STAN-811EA{enter}');
cy.get('#labwareScanInput').clear().type('STAN-811EA{enter}');
selectOptionForMultiple('comment', 'Beads cracked during drying step', 0);
saveButton().click();
});
Expand All @@ -492,7 +495,7 @@ describe('Visium QC Page', () => {
context('When user scans in a 96 well plate ', () => {
before(() => {
cy.findByTestId('removeButton').click();
cy.get('#labwareScanInput').type('STAN-410{enter}');
cy.get('#labwareScanInput').clear().type('STAN-410{enter}');
});
it('shows it on the page', () => {
cy.findByText('STAN-410').should('be.visible');
Expand Down Expand Up @@ -572,7 +575,7 @@ describe('Visium QC Page', () => {
});
selectSGPNumber('SGP1008');
selectOption('qcType', 'SPRI clean up');
cy.get('#labwareScanInput').type('STAN-811EA{enter}');
cy.get('#labwareScanInput').clear().type('STAN-811EA{enter}');
selectOptionForMultiple('comment', 'Beads cracked during drying step', 0);
saveButton().click();
});
Expand All @@ -587,7 +590,7 @@ describe('Visium QC Page', () => {
before(() => {
cy.visit('/lab/visium_qc');
selectOption('qcType', 'qPCR results');
cy.get('#labwareScanInput').type('STAN-811EA{enter}');
cy.get('#labwareScanInput').clear().type('STAN-811EA{enter}');
});

context('When a user enters a global CQ value', () => {
Expand Down Expand Up @@ -642,7 +645,7 @@ describe('Visium QC Page', () => {
cy.reload();
selectSGPNumber('SGP1008');
selectOption('qcType', 'qPCR results');
cy.get('#labwareScanInput').type('STAN-811EA{enter}');
cy.get('#labwareScanInput').clear().type('STAN-811EA{enter}');
cy.findByTestId('all-Cq value').type('5');
cy.findByRole('button', { name: /Save/i }).click();
});
Expand Down
10 changes: 5 additions & 5 deletions cypress/e2e/pages/xeniumAnalyser.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ describe('Xenium Analyser', () => {
});
});
it('should display a warning message', () => {
cy.get('#labwareScanInput').type('STAN-3111{enter}');
cy.get('#labwareScanInput').clear().type('STAN-3111{enter}');
cy.findByText('No probe hybridisation recorded for STAN-3111').should('be.visible');
cy.findByText('Analyser Details').should('not.exist');
});
Expand All @@ -39,7 +39,7 @@ describe('Xenium Analyser', () => {
});
describe('When a labware is scanned', () => {
before(() => {
cy.get('#labwareScanInput').type('STAN-3111{enter}');
cy.get('#labwareScanInput').clear().type('STAN-3111{enter}');
});
it('shows labware table', () => {
cy.findAllByRole('table').eq(0).should('have.length.above', 0);
Expand Down Expand Up @@ -140,7 +140,7 @@ describe('Xenium Analyser', () => {
});
describe('When two labware are scanned ', () => {
before(() => {
cy.get('#labwareScanInput').type('STAN-3112{enter}'); //scan second labware
cy.get('#labwareScanInput').clear().type('STAN-3112{enter}'); //scan second labware
});
it('should display Analyser Details for STAN-3112', () => {
cy.findAllByRole('table').eq(1).contains('STAN-3112');
Expand Down Expand Up @@ -169,7 +169,7 @@ describe('Xenium Analyser', () => {

describe('On save', () => {
before(() => {
cy.get('#labwareScanInput').type('STAN-3111{enter}');
cy.get('#labwareScanInput').clear().type('STAN-3111{enter}');
fillInForm();
});
context('When there is a server error', () => {
Expand Down Expand Up @@ -219,7 +219,7 @@ describe('Xenium Analyser', () => {
selectOption('STAN-3111-position', 'Left');
for (let indx = 0; indx < 4; indx++) {
cy.findByTestId(`STAN-3111-${indx}-roi`).clear().type('123456789').blur();
cy.findByTestId('closeBarcodeDisplayer').click();
cy.findByTestId('closeBarcodeDisplayer').should('be.visible').click();
}
}
});
4 changes: 2 additions & 2 deletions cypress/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
"extends": "../tsconfig.json",
"compilerOptions": {
"allowJs": true,
"target": "es5",
"lib": ["es5", "dom", "es2015.promise"],
"target": "es2015",
"lib": ["es2015", "dom", "es2015.promise"],
"types": ["cypress", "@testing-library/cypress"],
"isolatedModules": false
},
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "client",
"version": "4.1.4",
"private": true,
"proxy": "http://localhost:8080",
"proxy": "http://localhost:8080/",
"dependencies": {
"@react-aria/tabs": "^3.9.7",
"@sanger/ui-styling": "^4.3.0",
Expand Down
Loading
Loading