From a0fb2a7d3ce0cc1d122d0a94ab5c795cc5e4f8c8 Mon Sep 17 00:00:00 2001 From: Andrew Sparkes Date: Fri, 13 Feb 2026 15:41:38 +0000 Subject: [PATCH 1/3] modify js to check for bed scan first --- .../entrypoints/pages/bed_verification.js | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/app/frontend/entrypoints/pages/bed_verification.js b/app/frontend/entrypoints/pages/bed_verification.js index d2d97d82f3..76497ff902 100644 --- a/app/frontend/entrypoints/pages/bed_verification.js +++ b/app/frontend/entrypoints/pages/bed_verification.js @@ -129,10 +129,17 @@ const fail = function () { } $('#plate_scan').on('change', function () { - let plate_barcode, bed_barcode, robot_barcode - plate_barcode = this.value - bed_barcode = $('#bed_scan').val() - robot_barcode = $('#robot_scan').val() + let bed_barcode = $('#bed_scan').val() + if (!bed_barcode) { + SCAPE.message('Scan the bed before the plate please!', 'warning') + $('#bed_scan').focus() + this.value = '' + return + } + // clear the message field if we have a bed barcode + SCAPE.message('', '') + let plate_barcode = this.value + let robot_barcode = $('#robot_scan').val() SCAPE.robot_scan = robot_barcode this.value = '' $('#bed_scan').val('') From 897ad0ac44f8dca82fdda9dd372e7c2e99f10dc4 Mon Sep 17 00:00:00 2001 From: Andrew Sparkes Date: Tue, 17 Feb 2026 11:37:08 +0000 Subject: [PATCH 2/3] WIP - adding bed verification tests --- .../pages/bed_verification.spec.js | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 app/frontend/entrypoints/pages/bed_verification.spec.js diff --git a/app/frontend/entrypoints/pages/bed_verification.spec.js b/app/frontend/entrypoints/pages/bed_verification.spec.js new file mode 100644 index 0000000000..e0ee4c1046 --- /dev/null +++ b/app/frontend/entrypoints/pages/bed_verification.spec.js @@ -0,0 +1,42 @@ +import $ from 'jquery' +import SCAPE from '@/javascript/lib/global_message_system.js' + +describe('bed_verification plate scan handler', () => { + let plateScan, bedScan, robotScan + + beforeEach(async () => { + // Set up DOM elements + document.body.innerHTML = ` + + + + ` + plateScan = $('#plate_scan') + bedScan = $('#bed_scan') + robotScan = $('#robot_scan') + // Mock SCAPE.message + SCAPE.message = vi.fn() + // Import and attach the handler + await import('./bed_verification.js') + }) + + it('shows warning and does not scan plate if bed_scan is empty', () => { + console.log('DEBUG: starting bed scan empty test') + bedScan.val('') + plateScan.val('PLATE123') + console.log('DEBUG: triggering plate scan change') + plateScan.trigger('change') + expect(SCAPE.message).toHaveBeenCalledWith('Scan the bed before the plate please!', 'warning') + }) + + it('clears warning and scans plate if bed_scan has value', () => { + console.log('DEBUG: starting bed scan has value test') + robotScan.val('ROBOT123') + bedScan.val('BED123') + plateScan.val('PLATE123') + console.log('DEBUG: triggering plate scan change') + plateScan.trigger('change') + // We clear the message field if we have a bed barcode, so we expect an empty message to be sent + expect(SCAPE.message).toHaveBeenCalledWith('', '') + }) +}) From 54fc0858501c2cc1bf3dd153f39c093f656bc14f Mon Sep 17 00:00:00 2001 From: Andrew Sparkes Date: Tue, 17 Feb 2026 13:59:16 +0000 Subject: [PATCH 3/3] removed unneeded console logs --- .../entrypoints/pages/bed_verification.spec.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/app/frontend/entrypoints/pages/bed_verification.spec.js b/app/frontend/entrypoints/pages/bed_verification.spec.js index e0ee4c1046..b818111cdf 100644 --- a/app/frontend/entrypoints/pages/bed_verification.spec.js +++ b/app/frontend/entrypoints/pages/bed_verification.spec.js @@ -4,7 +4,10 @@ import SCAPE from '@/javascript/lib/global_message_system.js' describe('bed_verification plate scan handler', () => { let plateScan, bedScan, robotScan - beforeEach(async () => { + // NB. use of beforeAll is not ideal but could not get beforeEach to work. + // Deemed acceptable in this case as the two tests could mimic a sequence that could happen in + // real life. + beforeAll(async () => { // Set up DOM elements document.body.innerHTML = ` @@ -14,28 +17,29 @@ describe('bed_verification plate scan handler', () => { plateScan = $('#plate_scan') bedScan = $('#bed_scan') robotScan = $('#robot_scan') + // Mock SCAPE.message SCAPE.message = vi.fn() + // Import and attach the handler await import('./bed_verification.js') }) it('shows warning and does not scan plate if bed_scan is empty', () => { - console.log('DEBUG: starting bed scan empty test') bedScan.val('') plateScan.val('PLATE123') - console.log('DEBUG: triggering plate scan change') plateScan.trigger('change') + + // We expect a message on screen requesting user scan the bed first expect(SCAPE.message).toHaveBeenCalledWith('Scan the bed before the plate please!', 'warning') }) it('clears warning and scans plate if bed_scan has value', () => { - console.log('DEBUG: starting bed scan has value test') robotScan.val('ROBOT123') bedScan.val('BED123') plateScan.val('PLATE123') - console.log('DEBUG: triggering plate scan change') plateScan.trigger('change') + // We clear the message field if we have a bed barcode, so we expect an empty message to be sent expect(SCAPE.message).toHaveBeenCalledWith('', '') })