diff --git a/.github/workflows/cypress-participant-tests.yml b/.github/workflows/cypress-participant-tests.yml index 12b85f993..710069e64 100644 --- a/.github/workflows/cypress-participant-tests.yml +++ b/.github/workflows/cypress-participant-tests.yml @@ -20,6 +20,8 @@ jobs: env: NODE_OPTIONS: '--max_old_space_size=8192' NODE_ENV: 'test' + CLEVER_USERNAME: ${{ secrets.CLEVER_USERNAME }} + CLEVER_PASSWORD: ${{ secrets.CLEVER_PASSWORD }} CYPRESS_BASE_URL: 'http://localhost:5173' CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} COMMIT_INFO_MESSAGE: Tests for PR ${{ github.event.number }} "${{ github.event.pull_request.title }}" from commit "${{ github.event.pull_request.head.sha }}" diff --git a/cypress.config.js b/cypress.config.js index 8ac0452e0..d27f4be15 100644 --- a/cypress.config.js +++ b/cypress.config.js @@ -33,6 +33,10 @@ module.exports = defineConfig({ participantPassword: process.env.PARTICIPANT_PASSWORD, participantEmail: process.env.PARTICIPANT_EMAIL, participantEmailPassword: process.env.PARTICIPANT_EMAIL_PASSWORD, + cleverOAuthLink: 'https://clever.com/oauth/authorize', + cleverSchoolName: '61e8aee84cf0e71b14295d45', + cleverUsername: process.env.CLEVER_USERNAME, + cleverPassword: process.env.CLEVER_PASSWORD, testAdministrationName: 'Cypress Test Administration', testAdministrationId: 'kKUSypkMc36mPEzleDE6', testAdministratorFirstName: 'Cypress Test Administrator First Name', @@ -80,7 +84,7 @@ module.exports = defineConfig({ testRoarAppsAdministration: 'Cypress Test Roar Apps Administration', testRoarAppsAdministrationId: 'K8UaI8p79Dntj5Z2CJk8', testOptionalRoarAppsAdministration: 'Cypress Test Optional Roar Apps Administration', - testOptionalRoarAppsAdministrationId: '', + testOptionalRoarAppsAdministrationId: 'Fuy4nQaMu6YmfNg1eBYH', testSpanishRoarAppsAdministration: 'Cypress Test Spanish Roar Apps Administration', testSpanishRoarAppsAdministrationId: '', // Generate a list of test users CypressTestStudent0, CypressTestStudent1, ..., CypressTestStudent50 diff --git a/cypress/e2e/participant/default-tests/checkLegalDoc.cy.js b/cypress/e2e/participant/default-tests/checkLegalDoc.cy.js index df396ad85..59eb9521a 100644 --- a/cypress/e2e/participant/default-tests/checkLegalDoc.cy.js +++ b/cypress/e2e/participant/default-tests/checkLegalDoc.cy.js @@ -1,3 +1,5 @@ +export const timeout = Cypress.env('timeout'); + describe('Test to maintain that assent form shows in when signing in with an un-assented user', () => { it('passes', () => { // this is a user that has an assignment of roarVocab -- how can we create a user that can @@ -8,7 +10,7 @@ describe('Test to maintain that assent form shows in when signing in with an un- cy.login(test_login, test_pw); cy.visit('/'); cy.wait(1000); - cy.get('.p-dialog-title').contains('CONSENT FORM').should('be.visible'); + cy.get('.p-dialog-title', { timeout: timeout }).contains('CONSENT FORM').should('be.visible'); cy.get('.p-confirm-dialog-accept').contains('Continue').should('be.visible'); }); }); diff --git a/cypress/e2e/participant/default-tests/cleverSignIn.cy.js b/cypress/e2e/participant/default-tests/cleverSignIn.cy.js new file mode 100644 index 000000000..9d53834fe --- /dev/null +++ b/cypress/e2e/participant/default-tests/cleverSignIn.cy.js @@ -0,0 +1,12 @@ +import { signInWithClever } from '../../../support/helper-functions/participant/participant-helpers'; + +export const timeout = Cypress.env('timeout'); + +describe('Cypress test to login in Clever', () => { + it('passes', () => { + cy.visit('/'); + signInWithClever(); + + cy.contains('tasks completed!', { timeout: 2 * timeout }).should('be.visible'); + }); +}); diff --git a/cypress/e2e/participant/default-tests/playCVA.cy.js b/cypress/e2e/participant/default-tests/playCVA.cy.js index 628caf4d4..cf7f055f6 100644 --- a/cypress/e2e/participant/default-tests/playCVA.cy.js +++ b/cypress/e2e/participant/default-tests/playCVA.cy.js @@ -4,13 +4,23 @@ import { isCurrentVersion } from '../../../support/utils'; const app = '@bdelab/roar-multichoice'; describe('ROAR - Written Vocabulary Playthrough', () => { - it('Plays CVA', () => { + it('Plays CVA with username/password combo', () => { cy.wrap(isCurrentVersion(app)).then((isCurrentVersion) => { if (isCurrentVersion) { cy.log(`Did not detect a new version of ${app}, skipping test.`); } else { cy.log(`Detected a new version of ${app}, running test.`); - playWrittenVocabulary(); + playWrittenVocabulary({ auth: 'username' }); + } + }); + }); + it('Plays CVA with Clever auth', () => { + cy.wrap(isCurrentVersion(app)).then((isCurrentVersion) => { + if (isCurrentVersion) { + cy.log(`Did not detect a new version of ${app}, skipping test.`); + } else { + cy.log(`Detected a new version of ${app}, running test.`); + playWrittenVocabulary({ auth: 'clever' }); } }); }); diff --git a/cypress/e2e/participant/default-tests/playFluency-ARF.cy.js b/cypress/e2e/participant/default-tests/playFluency-ARF.cy.js index b6c27afc4..783c4b436 100644 --- a/cypress/e2e/participant/default-tests/playFluency-ARF.cy.js +++ b/cypress/e2e/participant/default-tests/playFluency-ARF.cy.js @@ -4,13 +4,23 @@ import { isCurrentVersion } from '../../../support/utils'; const app = '@bdelab/roam-fluency'; describe('Test playthrough of Fluency as a participant', () => { - it('Fluency Playthrough Test', () => { + it('Fluency Playthrough Test with username/password authentication', () => { cy.wrap(isCurrentVersion(app)).then((isCurrentVersion) => { if (isCurrentVersion) { cy.log(`Did not detect a new version of ${app}, skipping test.`); } else { cy.log(`Detected a new version of ${app}, running test.`); - playFluencyARF(); + playFluencyARF({ auth: 'username' }); + } + }); + }); + it('Fluency Playthrough Test with Clever authentication', () => { + cy.wrap(isCurrentVersion(app)).then((isCurrentVersion) => { + if (isCurrentVersion) { + cy.log(`Did not detect a new version of ${app}, skipping test.`); + } else { + cy.log(`Detected a new version of ${app}, running test.`); + playFluencyARF({ auth: 'clever' }); } }); }); diff --git a/cypress/e2e/participant/default-tests/playFluency-CALF.cy.js b/cypress/e2e/participant/default-tests/playFluency-CALF.cy.js index 85656b488..079b9ff58 100644 --- a/cypress/e2e/participant/default-tests/playFluency-CALF.cy.js +++ b/cypress/e2e/participant/default-tests/playFluency-CALF.cy.js @@ -3,14 +3,24 @@ import { isCurrentVersion } from '../../../support/utils'; const app = '@bdelab/roam-fluency'; -describe('Test playthrough of Fluency as a participant', () => { +describe('Test playthrough of Fluency as a participant using username authentication', () => { it('Fluency Playthrough Test', () => { cy.wrap(isCurrentVersion(app)).then((isCurrentVersion) => { if (isCurrentVersion) { cy.log(`Did not detect a new version of ${app}, skipping test.`); } else { cy.log(`Detected a new version of ${app}, running test.`); - playFluencyCALF(); + playFluencyCALF({ auth: 'username' }); + } + }); + }); + it('Fluency Playthrough Test using Clever authentication', () => { + cy.wrap(isCurrentVersion(app)).then((isCurrentVersion) => { + if (isCurrentVersion) { + cy.log(`Did not detect a new version of ${app}, skipping test.`); + } else { + cy.log(`Detected a new version of ${app}, running test.`); + playFluencyCALF({ auth: 'clever' }); } }); }); diff --git a/cypress/e2e/participant/default-tests/playLetter.cy.js b/cypress/e2e/participant/default-tests/playLetter.cy.js index 3394853b7..c942a2539 100644 --- a/cypress/e2e/participant/default-tests/playLetter.cy.js +++ b/cypress/e2e/participant/default-tests/playLetter.cy.js @@ -3,14 +3,24 @@ import { isCurrentVersion } from '../../../support/utils'; const app = '@bdelab/roar-letter'; -describe('ROAR - Letra Play Through', () => { - it('Plays Letra', () => { +describe('ROAR - Letter Play Through using username authentication', () => { + it('Plays Letter with username authentication', () => { cy.wrap(isCurrentVersion(app)).then((isCurrentVersion) => { if (isCurrentVersion) { cy.log(`Did not detect a new version of ${app}, skipping test.`); } else { cy.log(`Detected a new version of ${app}, running test.`); - playLetter(); + playLetter({ auth: 'username' }); + } + }); + }); + it('Plays Letter with Clever authentication', () => { + cy.wrap(isCurrentVersion(app)).then((isCurrentVersion) => { + if (isCurrentVersion) { + cy.log(`Did not detect a new version of ${app}, skipping test.`); + } else { + cy.log(`Detected a new version of ${app}, running test.`); + playLetter({ auth: 'clever' }); } }); }); diff --git a/cypress/e2e/participant/default-tests/playMorphology.cy.js b/cypress/e2e/participant/default-tests/playMorphology.cy.js index 279ee5a45..e4ff7d39f 100644 --- a/cypress/e2e/participant/default-tests/playMorphology.cy.js +++ b/cypress/e2e/participant/default-tests/playMorphology.cy.js @@ -4,13 +4,23 @@ import { isCurrentVersion } from '../../../support/utils'; const app = '@bdelab/roar-multichoice'; describe('ROAR - Written Vocabulary Play Through', () => { - it('Plays Written Vocabulary', () => { + it('Plays Written Vocabulary with username/password auth', () => { cy.wrap(isCurrentVersion(app)).then((isCurrentVersion) => { if (isCurrentVersion) { cy.log(`Did not detect a new version of ${app}, skipping test.`); } else { cy.log(`Detected a new version of ${app}, running test.`); - playMorphology(); + playMorphology({ auth: 'username' }); + } + }); + }); + it('Plays Written Vocabulary with Clever auth', () => { + cy.wrap(isCurrentVersion(app)).then((isCurrentVersion) => { + if (isCurrentVersion) { + cy.log(`Did not detect a new version of ${app}, skipping test.`); + } else { + cy.log(`Detected a new version of ${app}, running test.`); + playMorphology({ auth: 'clever' }); } }); }); diff --git a/cypress/e2e/participant/default-tests/playPA.cy.js b/cypress/e2e/participant/default-tests/playPA.cy.js index 09c1a7d64..ee4b2ebc3 100644 --- a/cypress/e2e/participant/default-tests/playPA.cy.js +++ b/cypress/e2e/participant/default-tests/playPA.cy.js @@ -4,13 +4,23 @@ import { isCurrentVersion } from '../../../support/utils'; const app = '@bdelab/roar-pa'; describe('Testing playthrough of ROAR-Phoneme as a participant', () => { - it(`ROAR-Phoneme Playthrough Test`, () => { + it(`ROAR-Phoneme Playthrough Test with username auth`, () => { cy.wrap(isCurrentVersion(app)).then((isCurrentVersion) => { if (isCurrentVersion) { cy.log(`Did not detect a new version of ${app}, skipping test.`); } else { cy.log(`Detected a new version of ${app}, running test.`); - playPA(); + playPA({ auth: 'username' }); + } + }); + }); + it(`ROAR-Phoneme Playthrough Test with Clever auth`, () => { + cy.wrap(isCurrentVersion(app)).then((isCurrentVersion) => { + if (isCurrentVersion) { + cy.log(`Did not detect a new version of ${app}, skipping test.`); + } else { + cy.log(`Detected a new version of ${app}, running test.`); + playPA({ auth: 'clever' }); } }); }); diff --git a/cypress/e2e/participant/default-tests/playSRE.cy.js b/cypress/e2e/participant/default-tests/playSRE.cy.js index 5cce3aace..2efbdcc39 100644 --- a/cypress/e2e/participant/default-tests/playSRE.cy.js +++ b/cypress/e2e/participant/default-tests/playSRE.cy.js @@ -4,13 +4,23 @@ import { isCurrentVersion } from '../../../support/utils'; const app = '@bdelab/roar-sre'; describe('ROAR - Sentence Play Through', () => { - it('Plays SRE', () => { + it('Plays SRE with username auth', () => { cy.wrap(isCurrentVersion(app)).then((isCurrentVersion) => { if (isCurrentVersion) { cy.log(`Did not detect a new version of ${app}, skipping test.`); } else { cy.log(`Detected a new version of ${app}, running test.`); - playSRE(); + playSRE({ auth: 'username' }); + } + }); + }); + it('Plays SRE with Clever auth', () => { + cy.wrap(isCurrentVersion(app)).then((isCurrentVersion) => { + if (isCurrentVersion) { + cy.log(`Did not detect a new version of ${app}, skipping test.`); + } else { + cy.log(`Detected a new version of ${app}, running test.`); + playSRE({ auth: 'clever' }); } }); }); diff --git a/cypress/e2e/participant/default-tests/playSWR.cy.js b/cypress/e2e/participant/default-tests/playSWR.cy.js index 4c4dcf040..f3de5e3c8 100644 --- a/cypress/e2e/participant/default-tests/playSWR.cy.js +++ b/cypress/e2e/participant/default-tests/playSWR.cy.js @@ -4,13 +4,23 @@ import { isCurrentVersion } from '../../../support/utils'; const app = '@bdelab/roar-swr'; describe('ROAR - Word Play Through', () => { - it('Plays Word', () => { + it('Plays Word with username auth', () => { cy.wrap(isCurrentVersion(app)).then((isCurrentVersion) => { if (isCurrentVersion) { cy.log(`Did not detect a new version of ${app}, skipping test.`); } else { cy.log(`Detected a new version of ${app}, running test.`); - playSWR(); + playSWR({ auth: 'username' }); + } + }); + }); + it('Plays Word with Clever auth', () => { + cy.wrap(isCurrentVersion(app)).then((isCurrentVersion) => { + if (isCurrentVersion) { + cy.log(`Did not detect a new version of ${app}, skipping test.`); + } else { + cy.log(`Detected a new version of ${app}, running test.`); + playSWR({ auth: 'clever' }); } }); }); diff --git a/cypress/e2e/participant/default-tests/playSyntax.cy.js b/cypress/e2e/participant/default-tests/playSyntax.cy.js index a6d2b850f..345366a46 100644 --- a/cypress/e2e/participant/default-tests/playSyntax.cy.js +++ b/cypress/e2e/participant/default-tests/playSyntax.cy.js @@ -5,13 +5,13 @@ const app = 'core-tasks'; const administration = 'Cypress Test Roar Syntax'; describe('ROAR - Syntax Play Through', () => { - it('Plays the Roar Syntax/Core Tasks Game', () => { + it('Plays the Roar Syntax/Core Tasks Game with username auth', () => { cy.wrap(isCurrentVersion(app)).then((isCurrentVersion) => { if (isCurrentVersion) { cy.log(`Did not detect a new version of ${app}, skipping test.`); } else { cy.log(`Detected a new version of ${app}, running test.`); - playSyntax({ administration: administration }); + playSyntax({ administration: administration, auth: 'username' }); } }); }); diff --git a/cypress/e2e/participant/default-tests/playVocab.cy.js b/cypress/e2e/participant/default-tests/playVocab.cy.js index f5a428294..657e3f579 100644 --- a/cypress/e2e/participant/default-tests/playVocab.cy.js +++ b/cypress/e2e/participant/default-tests/playVocab.cy.js @@ -3,13 +3,23 @@ import { isCurrentVersion } from '../../../support/utils'; const app = '@bdelab/roar-vocab'; describe('ROAR - Vocabulary Play Through', () => { - it('Plays Vocabulary', () => { + it('Plays Vocabulary with username auth', () => { cy.wrap(isCurrentVersion(app)).then((isCurrentVersion) => { if (isCurrentVersion) { cy.log(`Did not detect a new version of ${app}, skipping test.`); } else { cy.log(`Detected a new version of ${app}, running test.`); - playVocabulary(); + playVocabulary({ auth: 'username' }); + } + }); + }); + it('Plays Vocabulary with Clever auth', () => { + cy.wrap(isCurrentVersion(app)).then((isCurrentVersion) => { + if (isCurrentVersion) { + cy.log(`Did not detect a new version of ${app}, skipping test.`); + } else { + cy.log(`Detected a new version of ${app}, running test.`); + playVocabulary({ auth: 'clever' }); } }); }); diff --git a/cypress/e2e/participant/network-tests/roam-fluency/playFluency-CALF-3G.cy.js b/cypress/e2e/participant/network-tests/roam-fluency/playFluency-CALF-3G.cy.js new file mode 100644 index 000000000..66a5378cf --- /dev/null +++ b/cypress/e2e/participant/network-tests/roam-fluency/playFluency-CALF-3G.cy.js @@ -0,0 +1,17 @@ +import { playFluencyCALF } from '../../../../support/helper-functions/roam-fluency/fluencyHelpers'; +import { isCurrentVersion } from '../../../../support/utils'; + +const app = '@bdelab/roam-fluency'; + +describe('Test playthrough of Fluency-CALF as a participant in a simulate 3G connection', () => { + it('Fluency Playthrough Test', () => { + cy.wrap(isCurrentVersion(app)).then((isCurrentVersion) => { + if (isCurrentVersion) { + cy.log(`Did not detect a new version of ${app}, skipping test.`); + } else { + cy.log(`Detected a new version of ${app}, running test.`); + playFluencyCALF({ auth: 'username' }); + } + }); + }); +}); diff --git a/cypress/e2e/participant/network-tests/roam-fluency/playFluency-CALF-HighLatency.cy.js b/cypress/e2e/participant/network-tests/roam-fluency/playFluency-CALF-HighLatency.cy.js new file mode 100644 index 000000000..66a5378cf --- /dev/null +++ b/cypress/e2e/participant/network-tests/roam-fluency/playFluency-CALF-HighLatency.cy.js @@ -0,0 +1,17 @@ +import { playFluencyCALF } from '../../../../support/helper-functions/roam-fluency/fluencyHelpers'; +import { isCurrentVersion } from '../../../../support/utils'; + +const app = '@bdelab/roam-fluency'; + +describe('Test playthrough of Fluency-CALF as a participant in a simulate 3G connection', () => { + it('Fluency Playthrough Test', () => { + cy.wrap(isCurrentVersion(app)).then((isCurrentVersion) => { + if (isCurrentVersion) { + cy.log(`Did not detect a new version of ${app}, skipping test.`); + } else { + cy.log(`Detected a new version of ${app}, running test.`); + playFluencyCALF({ auth: 'username' }); + } + }); + }); +}); diff --git a/cypress/e2e/participant/network-tests/roar-letter/playLetter-3G.cy.js b/cypress/e2e/participant/network-tests/roar-letter/playLetter-3G.cy.js new file mode 100644 index 000000000..ed27163d4 --- /dev/null +++ b/cypress/e2e/participant/network-tests/roar-letter/playLetter-3G.cy.js @@ -0,0 +1,17 @@ +import { playLetter } from '../../../../support/helper-functions/roar-letter/letterHelpers'; +import { isCurrentVersion } from '../../../../support/utils'; + +const app = '@bdelab/roar-letter'; + +describe('ROAR - Letter Play Through using username authentication', () => { + it('Plays Letter with username authentication in a simulated 3g connection', () => { + cy.wrap(isCurrentVersion(app)).then((isCurrentVersion) => { + if (isCurrentVersion) { + cy.log(`Did not detect a new version of ${app}, skipping test.`); + } else { + cy.log(`Detected a new version of ${app}, running test.`); + playLetter({ auth: 'username' }); + } + }); + }); +}); diff --git a/cypress/e2e/participant/network-tests/roar-letter/playLetter-HighLatency.cy.js b/cypress/e2e/participant/network-tests/roar-letter/playLetter-HighLatency.cy.js new file mode 100644 index 000000000..86afa686e --- /dev/null +++ b/cypress/e2e/participant/network-tests/roar-letter/playLetter-HighLatency.cy.js @@ -0,0 +1,17 @@ +import { playLetter } from '../../../../support/helper-functions/roar-letter/letterHelpers'; +import { isCurrentVersion } from '../../../../support/utils'; + +const app = '@bdelab/roar-letter'; + +describe('ROAR - Letter Play Through using username authentication', () => { + it('Plays Letter with username authentication in a simulated high latency network', () => { + cy.wrap(isCurrentVersion(app)).then((isCurrentVersion) => { + if (isCurrentVersion) { + cy.log(`Did not detect a new version of ${app}, skipping test.`); + } else { + cy.log(`Detected a new version of ${app}, running test.`); + playLetter({ auth: 'username' }); + } + }); + }); +}); diff --git a/cypress/e2e/participant/network-tests/roar-morphology/playMorphology-3G.cy copy.js b/cypress/e2e/participant/network-tests/roar-morphology/playMorphology-3G.cy copy.js new file mode 100644 index 000000000..3a8f559b5 --- /dev/null +++ b/cypress/e2e/participant/network-tests/roar-morphology/playMorphology-3G.cy copy.js @@ -0,0 +1,17 @@ +import { playMorphology } from '../../../../support/helper-functions/roar-multichoice/multichoiceHelpers'; +import { isCurrentVersion } from '../../../../support/utils'; + +const app = '@bdelab/roar-multichoice'; + +describe('ROAR - Written Vocabulary Play Through', () => { + it('Plays Written Vocabulary with a simulated 3g network', () => { + cy.wrap(isCurrentVersion(app)).then((isCurrentVersion) => { + if (isCurrentVersion) { + cy.log(`Did not detect a new version of ${app}, skipping test.`); + } else { + cy.log(`Detected a new version of ${app}, running test.`); + playMorphology({ auth: 'username' }); + } + }); + }); +}); diff --git a/cypress/e2e/participant/network-tests/roar-morphology/playMorphology-HighLatency.cy.js b/cypress/e2e/participant/network-tests/roar-morphology/playMorphology-HighLatency.cy.js new file mode 100644 index 000000000..035f59be3 --- /dev/null +++ b/cypress/e2e/participant/network-tests/roar-morphology/playMorphology-HighLatency.cy.js @@ -0,0 +1,17 @@ +import { playMorphology } from '../../../../support/helper-functions/roar-multichoice/multichoiceHelpers'; +import { isCurrentVersion } from '../../../../support/utils'; + +const app = '@bdelab/roar-multichoice'; + +describe('ROAR - Written Vocabulary Play Through', () => { + it('Plays Written Vocabulary with a simulated high latency connection', () => { + cy.wrap(isCurrentVersion(app)).then((isCurrentVersion) => { + if (isCurrentVersion) { + cy.log(`Did not detect a new version of ${app}, skipping test.`); + } else { + cy.log(`Detected a new version of ${app}, running test.`); + playMorphology({ auth: 'username' }); + } + }); + }); +}); diff --git a/cypress/e2e/participant/network-tests/roar-pa/playPA-2G.cy.js b/cypress/e2e/participant/network-tests/roar-pa/playPA-2G.cy.js new file mode 100644 index 000000000..c221f499a --- /dev/null +++ b/cypress/e2e/participant/network-tests/roar-pa/playPA-2G.cy.js @@ -0,0 +1,17 @@ +import { playPA } from '../../../../support/helper-functions/roar-pa/paHelpers'; +import { isCurrentVersion } from '../../../../support/utils'; + +const app = '@bdelab/roar-pa'; + +describe('Testing playthrough of ROAR-Phoneme as a participant with a simulated 3g connection', () => { + it(`ROAR-Phoneme Playthrough Test with username auth`, () => { + cy.wrap(isCurrentVersion(app)).then((isCurrentVersion) => { + if (isCurrentVersion) { + cy.log(`Did not detect a new version of ${app}, skipping test.`); + } else { + cy.log(`Detected a new version of ${app}, running test.`); + playPA({ auth: 'username' }); + } + }); + }); +}); diff --git a/cypress/e2e/participant/network-tests/roar-pa/playPA-3G.cy.js b/cypress/e2e/participant/network-tests/roar-pa/playPA-3G.cy.js new file mode 100644 index 000000000..c221f499a --- /dev/null +++ b/cypress/e2e/participant/network-tests/roar-pa/playPA-3G.cy.js @@ -0,0 +1,17 @@ +import { playPA } from '../../../../support/helper-functions/roar-pa/paHelpers'; +import { isCurrentVersion } from '../../../../support/utils'; + +const app = '@bdelab/roar-pa'; + +describe('Testing playthrough of ROAR-Phoneme as a participant with a simulated 3g connection', () => { + it(`ROAR-Phoneme Playthrough Test with username auth`, () => { + cy.wrap(isCurrentVersion(app)).then((isCurrentVersion) => { + if (isCurrentVersion) { + cy.log(`Did not detect a new version of ${app}, skipping test.`); + } else { + cy.log(`Detected a new version of ${app}, running test.`); + playPA({ auth: 'username' }); + } + }); + }); +}); diff --git a/cypress/e2e/participant/network-tests/roar-pa/playPA-HighLatency.cy.js b/cypress/e2e/participant/network-tests/roar-pa/playPA-HighLatency.cy.js new file mode 100644 index 000000000..e12f219ab --- /dev/null +++ b/cypress/e2e/participant/network-tests/roar-pa/playPA-HighLatency.cy.js @@ -0,0 +1,17 @@ +import { playPA } from '../../../../support/helper-functions/roar-pa/paHelpers'; +import { isCurrentVersion } from '../../../../support/utils'; + +const app = '@bdelab/roar-pa'; + +describe('Testing playthrough of ROAR-Phoneme as a participant with a simulated high latency connection', () => { + it(`ROAR-Phoneme Playthrough Test with username auth`, () => { + cy.wrap(isCurrentVersion(app)).then((isCurrentVersion) => { + if (isCurrentVersion) { + cy.log(`Did not detect a new version of ${app}, skipping test.`); + } else { + cy.log(`Detected a new version of ${app}, running test.`); + playPA({ auth: 'username' }); + } + }); + }); +}); diff --git a/cypress/e2e/participant/network-tests/roar-sre/playSRE-2G.cy.js b/cypress/e2e/participant/network-tests/roar-sre/playSRE-2G.cy.js new file mode 100644 index 000000000..1d5afa28d --- /dev/null +++ b/cypress/e2e/participant/network-tests/roar-sre/playSRE-2G.cy.js @@ -0,0 +1,17 @@ +import { playSRE } from '../../../../support/helper-functions/roar-sre/sreHelpers'; +import { isCurrentVersion } from '../../../../support/utils'; + +const app = '@bdelab/roar-sre'; + +describe('ROAR - Sentence Play Through', () => { + it('Plays SRE with a simulated 3g connection', () => { + cy.wrap(isCurrentVersion(app)).then((isCurrentVersion) => { + if (isCurrentVersion) { + cy.log(`Did not detect a new version of ${app}, skipping test.`); + } else { + cy.log(`Detected a new version of ${app}, running test.`); + playSRE({ auth: 'username' }); + } + }); + }); +}); diff --git a/cypress/e2e/participant/network-tests/roar-sre/playSRE-3G.cy.js b/cypress/e2e/participant/network-tests/roar-sre/playSRE-3G.cy.js new file mode 100644 index 000000000..1d5afa28d --- /dev/null +++ b/cypress/e2e/participant/network-tests/roar-sre/playSRE-3G.cy.js @@ -0,0 +1,17 @@ +import { playSRE } from '../../../../support/helper-functions/roar-sre/sreHelpers'; +import { isCurrentVersion } from '../../../../support/utils'; + +const app = '@bdelab/roar-sre'; + +describe('ROAR - Sentence Play Through', () => { + it('Plays SRE with a simulated 3g connection', () => { + cy.wrap(isCurrentVersion(app)).then((isCurrentVersion) => { + if (isCurrentVersion) { + cy.log(`Did not detect a new version of ${app}, skipping test.`); + } else { + cy.log(`Detected a new version of ${app}, running test.`); + playSRE({ auth: 'username' }); + } + }); + }); +}); diff --git a/cypress/e2e/participant/network-tests/roar-sre/playSRE-HighLatency.cy.js b/cypress/e2e/participant/network-tests/roar-sre/playSRE-HighLatency.cy.js new file mode 100644 index 000000000..1d328ba25 --- /dev/null +++ b/cypress/e2e/participant/network-tests/roar-sre/playSRE-HighLatency.cy.js @@ -0,0 +1,17 @@ +import { playSRE } from '../../../../support/helper-functions/roar-sre/sreHelpers'; +import { isCurrentVersion } from '../../../../support/utils'; + +const app = '@bdelab/roar-sre'; + +describe('ROAR - Sentence Play Through', () => { + it('Plays SRE with a simulated high latency connection', () => { + cy.wrap(isCurrentVersion(app)).then((isCurrentVersion) => { + if (isCurrentVersion) { + cy.log(`Did not detect a new version of ${app}, skipping test.`); + } else { + cy.log(`Detected a new version of ${app}, running test.`); + playSRE({ auth: 'username' }); + } + }); + }); +}); diff --git a/cypress/e2e/participant/network-tests/roar-syntax/playSyntax-3G.cy.js b/cypress/e2e/participant/network-tests/roar-syntax/playSyntax-3G.cy.js new file mode 100644 index 000000000..f9f8915c4 --- /dev/null +++ b/cypress/e2e/participant/network-tests/roar-syntax/playSyntax-3G.cy.js @@ -0,0 +1,18 @@ +import { playSyntax } from '../../../../support/helper-functions/roar-syntax/syntaxHelpers'; +import { isCurrentVersion } from '../../../../support/utils'; + +const app = 'core-tasks'; +const administration = 'Cypress Test Roar Syntax'; + +describe('ROAR - Syntax Play Through', () => { + it('Plays the Roar Syntax/Core Tasks Game with a simulated 3g connection', () => { + cy.wrap(isCurrentVersion(app)).then((isCurrentVersion) => { + if (isCurrentVersion) { + cy.log(`Did not detect a new version of ${app}, skipping test.`); + } else { + cy.log(`Detected a new version of ${app}, running test.`); + playSyntax({ administration: administration, auth: 'username' }); + } + }); + }); +}); diff --git a/cypress/e2e/participant/network-tests/roar-syntax/playSyntax-HighLatency.cy.js b/cypress/e2e/participant/network-tests/roar-syntax/playSyntax-HighLatency.cy.js new file mode 100644 index 000000000..9572113db --- /dev/null +++ b/cypress/e2e/participant/network-tests/roar-syntax/playSyntax-HighLatency.cy.js @@ -0,0 +1,18 @@ +import { playSyntax } from '../../../../support/helper-functions/roar-syntax/syntaxHelpers'; +import { isCurrentVersion } from '../../../../support/utils'; + +const app = 'core-tasks'; +const administration = 'Cypress Test Roar Syntax'; + +describe('ROAR - Syntax Play Through', () => { + it('Plays the Roar Syntax/Core Tasks Game in a simulated high latency network', () => { + cy.wrap(isCurrentVersion(app)).then((isCurrentVersion) => { + if (isCurrentVersion) { + cy.log(`Did not detect a new version of ${app}, skipping test.`); + } else { + cy.log(`Detected a new version of ${app}, running test.`); + playSyntax({ administration: administration, auth: 'username' }); + } + }); + }); +}); diff --git a/cypress/e2e/participant/network-tests/roar-vocab/playVocab-3G.cy.js b/cypress/e2e/participant/network-tests/roar-vocab/playVocab-3G.cy.js new file mode 100644 index 000000000..46905ae89 --- /dev/null +++ b/cypress/e2e/participant/network-tests/roar-vocab/playVocab-3G.cy.js @@ -0,0 +1,16 @@ +import { playVocabulary } from '../../../../support/helper-functions/roar-vocab/vocabHelpers'; +import { isCurrentVersion } from '../../../../support/utils'; + +const app = '@bdelab/roar-vocab'; +describe('ROAR - Vocabulary Play Through', () => { + it('Plays Vocabulary with a simulated 3g connection', () => { + cy.wrap(isCurrentVersion(app)).then((isCurrentVersion) => { + if (isCurrentVersion) { + cy.log(`Did not detect a new version of ${app}, skipping test.`); + } else { + cy.log(`Detected a new version of ${app}, running test.`); + playVocabulary({ auth: 'username' }); + } + }); + }); +}); diff --git a/cypress/e2e/participant/network-tests/roar-vocab/playVocab-HighLatency.cy.js b/cypress/e2e/participant/network-tests/roar-vocab/playVocab-HighLatency.cy.js new file mode 100644 index 000000000..954f812cb --- /dev/null +++ b/cypress/e2e/participant/network-tests/roar-vocab/playVocab-HighLatency.cy.js @@ -0,0 +1,16 @@ +import { playVocabulary } from '../../../../support/helper-functions/roar-vocab/vocabHelpers'; +import { isCurrentVersion } from '../../../../support/utils'; + +const app = '@bdelab/roar-vocab'; +describe('ROAR - Vocabulary Play Through', () => { + it('Plays Vocabulary with a simulated high latency connection', () => { + cy.wrap(isCurrentVersion(app)).then((isCurrentVersion) => { + if (isCurrentVersion) { + cy.log(`Did not detect a new version of ${app}, skipping test.`); + } else { + cy.log(`Detected a new version of ${app}, running test.`); + playVocabulary({ auth: 'username' }); + } + }); + }); +}); diff --git a/cypress/e2e/partner-admin/default-tests/testProgressReportFiltering.spec.cy.js b/cypress/e2e/partner-admin/default-tests/testProgressReportFiltering.spec.cy.js index 3e98d574e..2d56f22fc 100644 --- a/cypress/e2e/partner-admin/default-tests/testProgressReportFiltering.spec.cy.js +++ b/cypress/e2e/partner-admin/default-tests/testProgressReportFiltering.spec.cy.js @@ -34,6 +34,7 @@ function setFilterBySchool(school) { function setFilterByGrade(grade) { cy.get('[data-cy="filter-by-grade"]', { timeout: timeout }).click(); cy.get('ul > li', { timeout: timeout }).contains(grade).click(); + cy.get('body').type('{esc}'); cy.wait(0.05 * timeout); } @@ -41,6 +42,7 @@ function setFilterByProgressCategory(header, category) { cy.contains('div.p-column-header-content', header).find('button').click(); cy.get('[data-cy="progress-filter-dropdown"]', { timeout: timeout }).click(); cy.get('ul>li').find('.p-tag-value', { timeout: timeout }).contains(category).click(); + // Click off the dropdown to prevent it from hiding other elements cy.get('button').contains('Apply').click(); cy.wait(0.05 * timeout); } diff --git a/cypress/e2e/super-admin/default-tests/create-administrations/editAdministration.cy.js b/cypress/e2e/super-admin/default-tests/create-administrations/editAdministration.cy.js new file mode 100644 index 000000000..4c9236cdc --- /dev/null +++ b/cypress/e2e/super-admin/default-tests/create-administrations/editAdministration.cy.js @@ -0,0 +1,70 @@ +const timeout = Cypress.env('timeout'); +const administrationId = Cypress.env('testOptionalRoarAppsAdministrationId'); +const newAssignedCondition = ['studentData.grade', 'LESS_THAN', '2']; +const newOptionalCondition = ['studentData.grade', 'GREATER_THAN', '4']; + +function clickEditButton() { + cy.get('[data-cy="button-edit-variant"]', { timeout: timeout }).first().click(); +} + +function clickMakeOptionalForAllSwitch() { + cy.get('[data-cy="switch-optional-for-everyone"]', { timeout: timeout }).click(); +} + +function editAssignedConditions() { + cy.get('[data-cy="button-assigned-condition"]', { timeout: timeout }).click(); + cy.get('[data-cy="dropdown-assigned-field"]', { timeout: timeout }).find('.p-dropdown-trigger').click(); + cy.get('ul > li').contains('studentData.grade').click(); + cy.get('[data-cy="dropdown-assigned-operator"]', { timeout: timeout }).click(); + cy.get('ul > li').contains('Less Than').click(); + cy.get('[data-cy="assigned-value-content"]', { timeout: timeout }).type('2'); + cy.get('.p-row-editor-save', { timeout: Cypress.env('timeout') }).click(); +} + +function editOptionalConditions() { + cy.get('[data-cy="button-optional-condition"]', { timeout: timeout }).click(); + cy.get('[data-cy="dropdown-optional-field"]', { timeout: timeout }).find('.p-dropdown-trigger').click(); + cy.get('ul > li').contains('studentData.grade').click(); + cy.get('[data-cy="dropdown-optional-operator"]', { timeout: timeout }).click(); + cy.get('ul > li').contains('Greater Than').click(); + cy.get('[data-cy="optional-value-content"]', { timeout: timeout }).type('4'); + cy.get('.p-row-editor-save', { timeout: Cypress.env('timeout') }).click(); +} + +function saveConditions() { + cy.get('[data-cy="button-save-conditions"]', { timeout: timeout }).click(); +} + +function checkNewConditions() { + clickEditButton(); + for (const condition of newAssignedCondition) { + cy.log(`Checking for assigned condition: ${condition}.`); + cy.get('.p-editable-column', { timeout: timeout }).contains(condition).should('exist'); + cy.log(`Assigned condition: ${condition} found.`); + } + for (const condition of newOptionalCondition) { + cy.log(`Checking for optional condition: ${condition}.`); + cy.get('.p-editable-column', { timeout: timeout }).contains(condition).should('exist'); + cy.log(`Optional condition: ${condition} found.`); + } + cy.log('Found all new conditions.'); +} + +describe('The admin user can edit the conditions of an administration.', () => { + it( + 'Logs into the dashboard, navigates to the Create Administrations component,' + + 'edits an existing administration, and checks the fields for the appropriate changes..', + () => { + cy.login(Cypress.env('superAdminUsername'), Cypress.env('superAdminPassword')); + cy.navigateTo('/'); + cy.wait(0.3 * timeout); + cy.navigateTo(`/edit-administration/${administrationId}/`); + clickEditButton(); + clickMakeOptionalForAllSwitch(); + editAssignedConditions(); + editOptionalConditions(); + saveConditions(); + checkNewConditions(); + }, + ); +}); diff --git a/cypress/support/commands.js b/cypress/support/commands.js index dea69a031..aa3658ab5 100644 --- a/cypress/support/commands.js +++ b/cypress/support/commands.js @@ -93,18 +93,12 @@ Cypress.Commands.add( }, ); -Cypress.Commands.add('activateAdminSidebar', () => { - cy.get('[data-cy="button-admin-sidebar"]').click(); - cy.wait(1000); -}); - Cypress.Commands.add('selectAdministration', function selectAdministration(testAdministration, retries = 0) { cy.log(`'Selecting administration: ${testAdministration}, attempt: ${retries + 1}`); if (retries > 3) { cy.log('Retries exceeded, administration not found, exiting test...'); return; } - cy.get('[data-cy="dropdown-select-administration"]', { timeout: 2 * Cypress.env('timeout') }).click(); cy.get('body', { timeout: 2 * Cypress.env('timeout') }) .invoke('text') diff --git a/cypress/support/e2e.js b/cypress/support/e2e.js index b732af71b..471f77047 100644 --- a/cypress/support/e2e.js +++ b/cypress/support/e2e.js @@ -75,7 +75,7 @@ beforeEach(() => { }, (req) => { req.on('response', (res) => { - res.setDelay(2000); // 2 seconds delay + res.setDelay(800); // 800ms delay }); }, ).as('High Latency Network'); diff --git a/cypress/support/helper-functions/participant/participant-helpers.js b/cypress/support/helper-functions/participant/participant-helpers.js new file mode 100644 index 000000000..6bbe7fc25 --- /dev/null +++ b/cypress/support/helper-functions/participant/participant-helpers.js @@ -0,0 +1,20 @@ +export const timeout = Cypress.env('timeout'); + +export function signInWithClever() { + cy.wait(0.2 * timeout); + cy.get('button', { timeout: timeout }).contains('Clever').click(); + + cy.origin(Cypress.env('cleverOAuthLink'), () => { + cy.get('input[title="School name"]', { timeout: 60000 }).type(Cypress.env('cleverSchoolName')); + cy.get('ul > li').contains(Cypress.env('cleverSchoolName')).click(); + + // Find the username input field and input the username + cy.get('input#username').type(Cypress.env('cleverUsername')); + + // Input password + cy.get('input#password').type(Cypress.env('cleverPassword')); + + // Click the login button + cy.get('button#UsernamePasswordForm--loginButton').click(); + }); +} diff --git a/cypress/support/helper-functions/roam-fluency/fluencyHelpers.js b/cypress/support/helper-functions/roam-fluency/fluencyHelpers.js index 0a4670e48..feea891f5 100644 --- a/cypress/support/helper-functions/roam-fluency/fluencyHelpers.js +++ b/cypress/support/helper-functions/roam-fluency/fluencyHelpers.js @@ -1,4 +1,5 @@ import { languageOptions } from './languageOptions'; +import { signInWithClever } from '../participant/participant-helpers'; const timeout = Cypress.env('timeout'); const participantId = '123456789'; @@ -158,13 +159,19 @@ export function playFluencyARF({ optional = false, endText = 'You are all done.', continueText = null, + auth = 'username', } = {}) { Cypress.on('uncaught:exception', () => { return false; }); - cy.login(Cypress.env('participantUsername'), Cypress.env('participantPassword')); cy.visit('/'); + if (auth === 'clever') { + signInWithClever(); + } else if (auth === 'username') { + cy.login(Cypress.env('participantUsername'), Cypress.env('participantPassword')); + cy.visit('/'); + } cy.selectAdministration(administration); @@ -193,13 +200,19 @@ export function playFluencyCALF({ optional = false, endText = 'You are all done.', continueText = null, + auth = 'username', } = {}) { Cypress.on('uncaught:exception', () => { return false; }); - cy.login(Cypress.env('participantUsername'), Cypress.env('participantPassword')); cy.visit('/'); + if (auth === 'clever') { + signInWithClever(); + } else if (auth === 'username') { + cy.login(Cypress.env('participantUsername'), Cypress.env('participantPassword')); + cy.visit('/'); + } cy.selectAdministration(administration); diff --git a/cypress/support/helper-functions/roar-letter/letterHelpers.js b/cypress/support/helper-functions/roar-letter/letterHelpers.js index 6f9fe67ce..9ed6ce3dc 100644 --- a/cypress/support/helper-functions/roar-letter/letterHelpers.js +++ b/cypress/support/helper-functions/roar-letter/letterHelpers.js @@ -1,4 +1,5 @@ import { languageOptions } from './languageOptions'; +import { signInWithClever } from '../participant/participant-helpers'; const timeout = Cypress.env('timeout'); @@ -35,11 +36,17 @@ function makeChoiceOrContinue(gameCompleteText) { }); } -export function startGame(administration, language, optional) { +export function startGame(administration, language, optional, auth) { Cypress.on('uncaught:exception', () => false); - cy.login(Cypress.env('participantUsername'), Cypress.env('participantPassword')); - cy.visit('/', { timeout: 2 * timeout }); + if (auth === 'username') { + cy.login(Cypress.env('participantUsername'), Cypress.env('participantPassword')); + cy.visit('/', { timeout: 2 * timeout }); + } + if (auth === 'clever') { + signInWithClever(); + } + cy.selectAdministration(administration); if (optional) { @@ -66,8 +73,9 @@ export function playLetter({ language = 'en', gameCompleteText = 'Congratulations', optional = false, + auth = 'username', } = {}) { - startGame(administration, language, optional); + startGame(administration, language, optional, auth); makeChoiceOrContinue(gameCompleteText); cy.log('Game finished successfully.'); diff --git a/cypress/support/helper-functions/roar-multichoice/multichoiceHelpers.js b/cypress/support/helper-functions/roar-multichoice/multichoiceHelpers.js index af022eb2d..9a9327aca 100644 --- a/cypress/support/helper-functions/roar-multichoice/multichoiceHelpers.js +++ b/cypress/support/helper-functions/roar-multichoice/multichoiceHelpers.js @@ -1,4 +1,5 @@ import { languageOptions } from './languageOptions'; +import { signInWithClever } from '../participant/participant-helpers'; const timeout = Cypress.env('timeout'); @@ -35,11 +36,16 @@ function makeChoiceOrContinue(gameCompleteText) { }); } -export function startGame(administration, language, optional, task) { +export function startGame(administration, language, optional, task, auth) { Cypress.on('uncaught:exception', () => false); - cy.login(Cypress.env('participantUsername'), Cypress.env('participantPassword')); - cy.visit('/', { timeout: 2 * timeout }); + if (auth === 'username') { + cy.login(Cypress.env('participantUsername'), Cypress.env('participantPassword')); + cy.visit('/', { timeout: 2 * timeout }); + } else { + signInWithClever(); + } + cy.selectAdministration(administration); if (optional) { @@ -67,8 +73,9 @@ export function playMorphology({ optional = false, task = 'morphology', gameCompleteText = "You're all done", + auth = 'username', } = {}) { - startGame(administration, language, optional, task); + startGame(administration, language, optional, task, auth); makeChoiceOrContinue(gameCompleteText); cy.log('Game finished successfully.'); @@ -91,8 +98,9 @@ export function playWrittenVocabulary({ optional = false, task = 'cva', gameCompleteText = "You're all done", + auth = 'username', } = {}) { - startGame(administration, language, optional, task); + startGame(administration, language, optional, task, auth); makeChoiceOrContinue(gameCompleteText); cy.log('Game finished successfully.'); diff --git a/cypress/support/helper-functions/roar-pa/paHelpers.js b/cypress/support/helper-functions/roar-pa/paHelpers.js index 4dd796244..53e622064 100644 --- a/cypress/support/helper-functions/roar-pa/paHelpers.js +++ b/cypress/support/helper-functions/roar-pa/paHelpers.js @@ -1,3 +1,5 @@ +import { signInWithClever } from '../participant/participant-helpers'; + export const timeout = Cypress.env('timeout'); function handleFullScreenError() { @@ -124,9 +126,16 @@ export function playPA({ endText2: 'I have been swimming so much', endText3: 'You have helped me and all my friends!', }, + auth = 'username', } = {}) { - cy.login(Cypress.env('participantUsername'), Cypress.env('participantPassword')); cy.visit('/'); + if (auth === 'clever') { + signInWithClever(); + } + if (auth === 'username') { + cy.login(Cypress.env('participantUsername'), Cypress.env('participantPassword')); + cy.visit('/'); + } cy.selectAdministration(administration); diff --git a/cypress/support/helper-functions/roar-sre/sreHelpers.js b/cypress/support/helper-functions/roar-sre/sreHelpers.js index 2de27b98a..6a72fb57f 100644 --- a/cypress/support/helper-functions/roar-sre/sreHelpers.js +++ b/cypress/support/helper-functions/roar-sre/sreHelpers.js @@ -1,4 +1,5 @@ import { languageOptions } from './languageOptions'; +import { signInWithClever } from '../participant/participant-helpers'; const timeout = Cypress.env('timeout'); @@ -6,13 +7,19 @@ export const playSRE = ({ administration = Cypress.env('testRoarAppsAdministration'), language = 'en', optional = false, + auth = 'username', } = {}) => { Cypress.on('uncaught:exception', () => { return false; }); - - cy.login(Cypress.env('participantUsername'), Cypress.env('participantPassword')); cy.visit('/', { timeout: 2 * timeout }); + if (auth === 'username') { + cy.login(Cypress.env('participantUsername'), Cypress.env('participantPassword')); + cy.visit('/', { timeout: 2 * timeout }); + } + if (auth === 'clever') { + signInWithClever(); + } cy.selectAdministration(administration); if (optional) { diff --git a/cypress/support/helper-functions/roar-swr/swrHelpers.js b/cypress/support/helper-functions/roar-swr/swrHelpers.js index 534ddeb45..0ace4157a 100644 --- a/cypress/support/helper-functions/roar-swr/swrHelpers.js +++ b/cypress/support/helper-functions/roar-swr/swrHelpers.js @@ -1,4 +1,5 @@ import { languageOptions } from './languageOptions'; +import { signInWithClever } from '../participant/participant-helpers'; const timeout = Cypress.env('timeout'); @@ -6,11 +7,18 @@ export const playSWR = ({ administration = Cypress.env('testRoarAppsAdministration'), language = 'en', optional = false, + auth = 'username', } = {}) => { // Log in once at the beginning of the test case that calls playSWR - cy.login(Cypress.env('participantUsername'), Cypress.env('participantPassword')); + if (auth === 'username') { + cy.login(Cypress.env('participantUsername'), Cypress.env('participantPassword')); + cy.visit('/', { timeout: 2 * timeout }); + } + if (auth === 'clever') { + cy.visit('/', { timeout: 2 * timeout }); + signInWithClever(); + } - cy.visit('/', { timeout: 2 * timeout }); cy.selectAdministration(administration); if (optional) { diff --git a/cypress/support/helper-functions/roar-syntax/syntaxHelpers.js b/cypress/support/helper-functions/roar-syntax/syntaxHelpers.js index 96e1b374d..70ea51d89 100644 --- a/cypress/support/helper-functions/roar-syntax/syntaxHelpers.js +++ b/cypress/support/helper-functions/roar-syntax/syntaxHelpers.js @@ -1,4 +1,5 @@ import { languageOptions } from './languageOptions'; +import { signInWithClever } from '../participant/participant-helpers'; const timeout = Cypress.env('timeout'); @@ -35,11 +36,17 @@ function makeChoiceOrContinue(gameCompleteText) { }); } -function startGame(administration, language, optional, task) { +function startGame(administration, language, optional, task, auth) { Cypress.on('uncaught:exception', () => false); - cy.login(Cypress.env('participantUsername'), Cypress.env('participantPassword')); cy.visit('/', { timeout: 2 * timeout }); + if (auth === 'username') { + cy.login(Cypress.env('participantUsername'), Cypress.env('participantPassword')); + cy.visit('/', { timeout: 2 * timeout }); + } + if (auth === 'clever') { + signInWithClever(); + } cy.selectAdministration(administration); if (optional) { @@ -80,8 +87,9 @@ export function playSyntax({ optional = false, task = 'syntax', gameCompleteText = "You've completed the game", + auth = 'username', } = {}) { - startGame(administration, language, optional, task); + startGame(administration, language, optional, task, auth); playIntro(); diff --git a/cypress/support/helper-functions/roar-vocab/vocabHelpers.js b/cypress/support/helper-functions/roar-vocab/vocabHelpers.js index cb89c4248..5ece82a30 100644 --- a/cypress/support/helper-functions/roar-vocab/vocabHelpers.js +++ b/cypress/support/helper-functions/roar-vocab/vocabHelpers.js @@ -1,4 +1,5 @@ import { languageOptions } from './languageOptions'; +import { signInWithClever } from '../participant/participant-helpers'; const timeout = Cypress.env('timeout'); @@ -36,14 +37,21 @@ function selectAlienAvatar() { .click(); } -function startGame(administration, language, optional) { +function startGame(administration, language, optional, auth) { cy.wait(0.1 * timeout); Cypress.on('uncaught:exception', () => { return false; }); - cy.login(Cypress.env('participantUsername'), Cypress.env('participantPassword')); cy.visit('/', { timeout: 2 * timeout }); + if (auth === 'username') { + cy.login(Cypress.env('participantUsername'), Cypress.env('participantPassword')); + cy.visit('/', { timeout: 2 * timeout }); + } + if (auth === 'clever') { + signInWithClever(); + } + cy.selectAdministration(administration); if (optional) { @@ -65,8 +73,9 @@ export function playVocabulary({ language = 'en', gameCompleteText = 'We’ve all learned so much!', optional = false, + auth = 'username', } = {}) { - startGame(administration, language, optional); + startGame(administration, language, optional, auth); makeChoiceOrContinue(gameCompleteText); diff --git a/firebase/admin/firestore.rules b/firebase/admin/firestore.rules index 512167e2b..284b25c27 100644 --- a/firebase/admin/firestore.rules +++ b/firebase/admin/firestore.rules @@ -59,6 +59,14 @@ service cloud.firestore { allow write: if false; } + // Allow all users to get the activationCodes + // Allow no users to write the activationCodes + match /activationCodes/{code} { + allow get: if true; + allow list: if false; + allow write: if false; + } + // Allow users to read their own data // Also allow admins to read and write data for their users match /users/{uid} { diff --git a/package-lock.json b/package-lock.json index a3d7188f6..8491397c1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "roar-dashboard", - "version": "2.7.14", + "version": "2.8.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "roar-dashboard", - "version": "2.7.14", + "version": "2.8.0", "dependencies": { "@bdelab/roam-fluency": "1.11.24", "@bdelab/roar-firekit": "^7.1.0", diff --git a/package.json b/package.json index 315c7ec33..e44b378cc 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "roar-dashboard", "private": true, - "version": "2.7.14", + "version": "2.8.0", "scripts": { "build": "export VITE_FIREBASE_DATA_SOURCE=live && vite build", "build:sandbox": "export VITE_FIREBASE_DATA_SOURCE=sandbox && vite build", diff --git a/roar-firebase-functions b/roar-firebase-functions index 5e11c458f..d2602d4a9 160000 --- a/roar-firebase-functions +++ b/roar-firebase-functions @@ -1 +1 @@ -Subproject commit 5e11c458f901e95dae21bb636cf41aa3a2f9c3c8 +Subproject commit d2602d4a986f60f5094f871fdefc17bc6ad522b6 diff --git a/src/assets/styles/components/chips.scss b/src/assets/styles/components/chips.scss deleted file mode 100644 index 714ee9c44..000000000 --- a/src/assets/styles/components/chips.scss +++ /dev/null @@ -1,75 +0,0 @@ -.p-chip { - background-color: var(--surface-d); - color: var(--text-color); - border-radius: 16px; - padding: 0 var(--inline-spacing-larger); - - .p-chip-text { - line-height: 1.5; - margin-top: var(--border-radius); - margin-bottom: var(--border-radius); - } - .p-chip-icon { - margin-right: var(--inline-spacing); - } - img { - width: 2.25rem; - height: 2.25rem; - margin-left: -var(--inline-spacing-larger); - margin-right: var(--inline-spacing); - } - .p-chip-remove-icon { - margin-left: var(--inline-spacing); - border-radius: var(--border-radius); - transition: none; - &:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 1px var(--indigo-500); - } - } -} - -.p-chips { - .p-chips-multiple-container { - padding: var(--border-radius) var(--inline-spacing-larger); - } - .p-chips-multiple-container .p-chips-token { - padding: var(--border-radius) var(--inline-spacing-larger); - margin-right: var(--inline-spacing); - background: var(--surface-d); - color: var(--text-color); - border-radius: 16px; - } - .p-chips-multiple-container .p-chips-token.p-focus { - background: var(--surface-300); - color: var(--text-color); - } - .p-chips-multiple-container .p-chips-token .p-chips-token-icon { - margin-left: var(--inline-spacing); - } - .p-chips-multiple-container .p-chips-input-token { - padding: var(--border-radius) 0; - } - .p-chips-multiple-container .p-chips-input-token input { - font-size: 1rem; - color: var(--text-color); - padding: 0; - margin: 0; - } - - &.p-invalid.p-component > .p-inputtext { - border-color: var(--red-100); - } -} - -// Not disabled -.p-chips:not(.p-disabled):hover .p-chips-multiple-container { - border-color: var(--surface-300); -} -.p-chips:not(.p-disabled).p-focus .p-chips-multiple-container { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 1px var(--indigo-500); - border-color: var(--primary-color); -} diff --git a/src/assets/styles/components/colorpicker.scss b/src/assets/styles/components/colorpicker.scss deleted file mode 100644 index 6eadf4b90..000000000 --- a/src/assets/styles/components/colorpicker.scss +++ /dev/null @@ -1,21 +0,0 @@ -.p-colorpicker-preview { - width: 2rem; - height: 2rem; -} - -.p-colorpicker-panel { - background: var(--surface-800); - border: 1px solid var(--surface-900); -} -.p-colorpicker-panel .p-colorpicker-color-handle, -.p-colorpicker-panel .p-colorpicker-hue-handle { - border-color: var(--surface-a); -} - -.p-colorpicker-overlay-panel { - box-shadow: - 0 0 #0000, - 0 0 #0000, - 0 10px 15px -3px rgba(0, 0, 0, 0.1), - 0 4px 6px -2px rgba(0, 0, 0, 0.05); -} diff --git a/src/assets/styles/components/multiselect.scss b/src/assets/styles/components/multiselect.scss index c8a05ff1c..635536b6d 100644 --- a/src/assets/styles/components/multiselect.scss +++ b/src/assets/styles/components/multiselect.scss @@ -20,16 +20,7 @@ .p-multiselect .p-multiselect-label.p-placeholder { color: var(--text-color-secondary); } -.p-multiselect.p-multiselect-chip .p-multiselect-token { - padding: var(--border-radius) var(--inline-spacing-larger); - margin-right: var(--inline-spacing); - background: var(--surface-d); - color: var(--text-color); - border-radius: 16px; -} -.p-multiselect.p-multiselect-chip .p-multiselect-token .p-multiselect-token-icon { - margin-left: var(--inline-spacing); -} + .p-multiselect .p-multiselect-trigger { background: transparent; color: var(--text-color-secondary); @@ -41,10 +32,6 @@ border-color: var(--red-100); } -.p-inputwrapper-filled.p-multiselect.p-multiselect-chip .p-multiselect-label { - padding: var(--border-radius) var(--inline-spacing-larger); -} - .p-multiselect-panel { background: var(--surface-a); color: var(--text-color); diff --git a/src/assets/styles/components/radiobutton.scss b/src/assets/styles/components/radiobutton.scss deleted file mode 100644 index 03329d914..000000000 --- a/src/assets/styles/components/radiobutton.scss +++ /dev/null @@ -1,56 +0,0 @@ -.p-radiobutton { - width: 16px; - height: 16px; -} -.p-radiobutton .p-radiobutton-box { - border: 2px solid var(--surface-300); - background: var(--surface-a); - width: 16px; - height: 16px; - color: var(--text-color); - border-radius: 50%; - transition: none; -} -.p-radiobutton .p-radiobutton-box:not(.p-disabled):not(.p-highlight):hover { - border-color: var(--surface-300); -} -.p-radiobutton .p-radiobutton-box:not(.p-disabled).p-focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 1px var(--indigo-500); - border-color: var(--primary-color); -} -.p-radiobutton .p-radiobutton-box .p-radiobutton-icon { - width: 6px; - height: 6px; - transition-duration: 0.2s; - background-color: var(--surface-a); -} -.p-radiobutton .p-radiobutton-box.p-highlight { - border-color: var(--primary-color); - background: var(--primary-color); -} -.p-radiobutton .p-radiobutton-box.p-highlight:not(.p-disabled):hover { - border-color: var(--primary-color); - background: var(--primary-color); - color: var(--surface-a); -} -.p-radiobutton.p-invalid > .p-radiobutton-box { - border-color: var(--red-100); -} -.p-radiobutton:focus { - outline: 0 none; -} - -.p-input-filled .p-radiobutton .p-radiobutton-box { - background-color: var(--surface-b); -} -.p-input-filled .p-radiobutton .p-radiobutton-box:not(.p-disabled):hover { - background-color: var(--surface-b); -} -.p-input-filled .p-radiobutton .p-radiobutton-box.p-highlight { - background: var(--primary-color); -} -.p-input-filled .p-radiobutton .p-radiobutton-box.p-highlight:not(.p-disabled):hover { - background: var(--primary-color); -} diff --git a/src/assets/styles/components/slider.scss b/src/assets/styles/components/slider.scss deleted file mode 100644 index 713cec8dd..000000000 --- a/src/assets/styles/components/slider.scss +++ /dev/null @@ -1,39 +0,0 @@ -.p-slider { - background: var(--surface-d); - border: 0 none; - border-radius: var(--border-radius); -} -.p-slider.p-slider-horizontal { - height: 0.286rem; -} -.p-slider.p-slider-horizontal .p-slider-handle { - margin-top: -0.5715rem; - margin-left: -0.5715rem; -} -.p-slider.p-slider-vertical { - width: 0.286rem; -} -.p-slider.p-slider-vertical .p-slider-handle { - margin-left: -0.5715rem; - margin-bottom: -0.5715rem; -} -.p-slider .p-slider-handle { - height: 1.143rem; - width: 1.143rem; - background: var(--surface-a); - border: 2px solid var(--primary-color); - border-radius: 50%; - transition: none; -} -.p-slider .p-slider-handle:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 1px var(--indigo-500); -} -.p-slider .p-slider-range { - background: var(--primary-color); -} -.p-slider:not(.p-disabled) .p-slider-handle:hover { - background: var(--primary-color); - border-color: var(--primary-color); -} diff --git a/src/assets/styles/components/treeselect.scss b/src/assets/styles/components/treeselect.scss deleted file mode 100644 index 52882a09d..000000000 --- a/src/assets/styles/components/treeselect.scss +++ /dev/null @@ -1,73 +0,0 @@ -.p-treeselect { - background: var(--surface-a); - border: 1px solid var(--surface-300); - transition: none; - border-radius: var(--border-radius); -} -.p-treeselect:not(.p-disabled):hover { - border-color: var(--surface-300); -} -.p-treeselect:not(.p-disabled).p-focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 1px var(--indigo-500); - border-color: var(--primary-color); -} -.p-treeselect .p-treeselect-label { - padding: var(--inline-spacing-larger) var(--inline-spacing-larger); - transition: none; -} -.p-treeselect .p-treeselect-label.p-placeholder { - color: var(--text-color-secondary); -} -.p-treeselect.p-treeselect-chip .p-treeselect-token { - padding: var(--border-radius) var(--inline-spacing-larger); - margin-right: var(--inline-spacing); - background: var(--surface-d); - color: var(--text-color); - border-radius: 16px; -} -.p-treeselect .p-treeselect-trigger { - background: transparent; - color: var(--text-color-secondary); - width: 3rem; - border-top-right-radius: var(--border-radius); - border-bottom-right-radius: var(--border-radius); -} -.p-treeselect.p-invalid.p-component { - border-color: var(--red-100); -} - -.p-inputwrapper-filled.p-treeselect.p-treeselect-chip .p-treeselect-label { - padding: var(--border-radius) var(--inline-spacing-larger); -} - -.p-treeselect-panel { - background: var(--surface-a); - color: var(--text-color); - border: 0 none; - border-radius: var(--border-radius); - box-shadow: - 0 0 #0000, - 0 0 #0000, - 0 10px 15px -3px rgba(0, 0, 0, 0.1), - 0 4px 6px -2px rgba(0, 0, 0, 0.05); -} -.p-treeselect-panel .p-treeselect-items-wrapper .p-tree { - border: 0 none; -} -.p-treeselect-panel .p-treeselect-items-wrapper .p-treeselect-empty-message { - padding: var(--inline-spacing-larger) 1rem; - color: var(--text-color); - background: transparent; -} - -.p-input-filled .p-treeselect { - background: var(--surface-b); -} -.p-input-filled .p-treeselect:not(.p-disabled):hover { - background-color: var(--surface-b); -} -.p-input-filled .p-treeselect:not(.p-disabled).p-focus { - background-color: var(--surface-a); -} diff --git a/src/assets/styles/theme.css b/src/assets/styles/theme.css index 231584864..ae02cd733 100644 --- a/src/assets/styles/theme.css +++ b/src/assets/styles/theme.css @@ -342,351 +342,6 @@ border-color: #f0a9a7; } -.p-datepicker { - padding: 0.5rem; - background: #ffffff; - color: #3f3f46; - border: 1px solid #d4d4d8; - border-radius: 0.375rem; -} - -.p-datepicker:not(.p-datepicker-inline) { - background: #ffffff; - border: 0 none; - box-shadow: - 0 0 #0000, - 0 0 #0000, - 0 10px 15px -3px rgba(0, 0, 0, 0.1), - 0 4px 6px -2px rgba(0, 0, 0, 0.05); -} - -.p-datepicker:not(.p-datepicker-inline) .p-datepicker-header { - background: #ffffff; -} - -.p-datepicker .p-datepicker-header { - padding: 0.5rem; - color: #3f3f46; - background: #ffffff; - font-weight: 600; - margin: 0; - border-bottom: 1px solid #e5e7eb; - border-top-right-radius: 0.375rem; - border-top-left-radius: 0.375rem; -} - -.p-datepicker .p-datepicker-header .p-datepicker-prev, -.p-datepicker .p-datepicker-header .p-datepicker-next { - width: 2rem; - height: 2rem; - color: #71717a; - border: 0 none; - background: transparent; - border-radius: 50%; - transition: none; -} - -.p-datepicker .p-datepicker-header .p-datepicker-prev:enabled:hover, -.p-datepicker .p-datepicker-header .p-datepicker-next:enabled:hover { - color: #18181b; - border-color: transparent; - background: #f4f4f5; -} - -.p-datepicker .p-datepicker-header .p-datepicker-prev:focus, -.p-datepicker .p-datepicker-header .p-datepicker-next:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 1px #6366f1; -} - -.p-datepicker .p-datepicker-header .p-datepicker-title { - line-height: 2rem; -} - -.p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-year, -.p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-month { - color: #3f3f46; - transition: none; - font-weight: 600; - padding: 0.5rem; -} - -.p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-year:enabled:hover, -.p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-month:enabled:hover { - color: #8c1515; -} - -.p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-month { - margin-right: 0.5rem; -} - -.p-datepicker table { - font-size: 1rem; - margin: 0.5rem 0; -} - -.p-datepicker table th { - padding: 0.5rem; -} - -.p-datepicker table th > span { - width: 2.5rem; - height: 2.5rem; -} - -.p-datepicker table td { - padding: 0.5rem; -} - -.p-datepicker table td > span { - width: 2.5rem; - height: 2.5rem; - border-radius: 50%; - transition: none; - border: 1px solid transparent; -} - -.p-datepicker table td > span.p-highlight { - color: #312e81; - background: #eef2ff; -} - -.p-datepicker table td > span:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 1px #6366f1; -} - -.p-datepicker table td.p-datepicker-today > span { - background: #d4d4d8; - color: #3f3f46; - border-color: transparent; -} - -.p-datepicker table td.p-datepicker-today > span.p-highlight { - color: #312e81; - background: #eef2ff; -} - -.p-datepicker .p-datepicker-buttonbar { - padding: 1rem 0; - border-top: 1px solid #f3f4f6; -} - -.p-datepicker .p-timepicker { - border-top: 1px solid #f3f4f6; - padding: 0.5rem; -} - -.p-datepicker .p-timepicker button { - width: 2rem; - height: 2rem; - color: #71717a; - border: 0 none; - background: transparent; - border-radius: 50%; - transition: none; -} - -.p-datepicker .p-timepicker button:enabled:hover { - color: #18181b; - border-color: transparent; - background: #f4f4f5; -} - -.p-datepicker .p-timepicker button:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 1px #6366f1; -} - -.p-datepicker .p-timepicker button:last-child { - margin-top: 0.2em; -} - -.p-datepicker .p-timepicker span { - font-size: 1.25rem; -} - -.p-datepicker .p-timepicker > div { - padding: 0 0.5rem; -} - -.p-datepicker.p-datepicker-timeonly .p-timepicker { - border-top: 0 none; -} - -.p-datepicker .p-monthpicker { - margin: 0.5rem 0; -} - -.p-datepicker .p-monthpicker .p-monthpicker-month { - padding: 0.5rem; - transition: none; - border-radius: 0.375rem; -} - -.p-datepicker .p-monthpicker .p-monthpicker-month.p-highlight { - color: #312e81; - background: #eef2ff; -} - -.p-datepicker .p-yearpicker { - margin: 0.5rem 0; -} - -.p-datepicker .p-yearpicker .p-yearpicker-year { - padding: 0.5rem; - transition: none; - border-radius: 0.375rem; -} - -.p-datepicker .p-yearpicker .p-yearpicker-year.p-highlight { - color: #312e81; - background: #eef2ff; -} - -.p-datepicker.p-datepicker-multiple-month .p-datepicker-group { - border-left: 1px solid #f3f4f6; - padding-right: 0.5rem; - padding-left: 0.5rem; - padding-top: 0; - padding-bottom: 0; -} - -.p-datepicker.p-datepicker-multiple-month .p-datepicker-group:first-child { - padding-left: 0; - border-left: 0 none; -} - -.p-datepicker.p-datepicker-multiple-month .p-datepicker-group:last-child { - padding-right: 0; -} - -.p-datepicker:not(.p-disabled) table td span:not(.p-highlight):not(.p-disabled):hover { - background: #f4f4f5; -} - -.p-datepicker:not(.p-disabled) table td span:not(.p-highlight):not(.p-disabled):focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 1px #6366f1; -} - -.p-datepicker:not(.p-disabled) .p-monthpicker .p-monthpicker-month:not(.p-disabled):not(.p-highlight):hover { - background: #f4f4f5; -} - -.p-datepicker:not(.p-disabled) .p-monthpicker .p-monthpicker-month:not(.p-disabled):focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 1px #6366f1; -} - -.p-datepicker:not(.p-disabled) .p-yearpicker .p-yearpicker-year:not(.p-disabled):not(.p-highlight):hover { - background: #f4f4f5; -} - -.p-datepicker:not(.p-disabled) .p-yearpicker .p-yearpicker-year:not(.p-disabled):focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 1px #6366f1; -} - -@media screen and (max-width: 769px) { - .p-datepicker table th, - .p-datepicker table td { - padding: 0; - } -} - -.p-chips:not(.p-disabled):hover .p-chips-multiple-container { - border-color: #d4d4d8; -} - -.p-chips:not(.p-disabled).p-focus .p-chips-multiple-container { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 1px #6366f1; - border-color: #8c1515; -} - -.p-chips .p-chips-multiple-container { - padding: 0.375rem 0.75rem; -} - -.p-chips .p-chips-multiple-container .p-chips-token { - padding: 0.375rem 0.75rem; - margin-right: 0.5rem; - background: #e5e7eb; - color: #3f3f46; - border-radius: 16px; -} - -.p-chips .p-chips-multiple-container .p-chips-token.p-focus { - background: #d4d4d8; - color: #3f3f46; -} - -.p-chips .p-chips-multiple-container .p-chips-token .p-chips-token-icon { - margin-left: 0.5rem; -} - -.p-chips .p-chips-multiple-container .p-chips-input-token { - padding: 0.375rem 0; -} - -.p-chips .p-chips-multiple-container .p-chips-input-token input { - font-family: - Inter, - ui-sans-serif, - system-ui, - -apple-system, - BlinkMacSystemFont, - 'Segoe UI', - Roboto, - 'Helvetica Neue', - Arial, - 'Noto Sans', - sans-serif, - 'Apple Color Emoji', - 'Segoe UI Emoji', - 'Segoe UI Symbol', - 'Noto Color Emoji'; - font-size: 1rem; - color: #3f3f46; - padding: 0; - margin: 0; -} - -.p-chips.p-invalid.p-component > .p-inputtext { - border-color: #f0a9a7; -} - -.p-colorpicker-preview { - width: 2rem; - height: 2rem; -} - -.p-colorpicker-panel { - background: #27272a; - border: 1px solid #18181b; -} - -.p-colorpicker-panel .p-colorpicker-color-handle, -.p-colorpicker-panel .p-colorpicker-hue-handle { - border-color: #ffffff; -} - -.p-colorpicker-overlay-panel { - box-shadow: - 0 0 #0000, - 0 0 #0000, - 0 10px 15px -3px rgba(0, 0, 0, 0.1), - 0 4px 6px -2px rgba(0, 0, 0, 0.05); -} - .p-dropdown { background: #ffffff; border: 1px solid #d4d4d8; @@ -1039,48 +694,6 @@ height: 1.75rem; } -.p-inputswitch .p-inputswitch-slider { - background: #d4d4d8; - transition: none; - border-radius: 30px; -} - -.p-inputswitch .p-inputswitch-slider:before { - background: #ffffff; - width: 1.25rem; - height: 1.25rem; - left: 0.25rem; - margin-top: -0.625rem; - border-radius: 50%; - transition-duration: 0.2s; -} - -.p-inputswitch.p-inputswitch-checked .p-inputswitch-slider:before { - transform: translateX(1.25rem); -} - -.p-inputswitch.p-focus .p-inputswitch-slider { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 1px #6366f1; -} - -.p-inputswitch:not(.p-disabled):hover .p-inputswitch-slider { - background: #bebec4; -} - -.p-inputswitch.p-inputswitch-checked .p-inputswitch-slider { - background: #8c1515; -} - -.p-inputswitch.p-inputswitch-checked .p-inputswitch-slider:before { - background: #ffffff; -} - -.p-inputswitch.p-inputswitch-checked:not(.p-disabled):hover .p-inputswitch-slider { - background: #4338ca; -} - .p-inputswitch.p-invalid { border-color: #f0a9a7; } @@ -1319,18 +932,6 @@ color: #71717a; } -.p-multiselect.p-multiselect-chip .p-multiselect-token { - padding: 0.375rem 0.75rem; - margin-right: 0.5rem; - background: #e5e7eb; - color: #3f3f46; - border-radius: 16px; -} - -.p-multiselect.p-multiselect-chip .p-multiselect-token .p-multiselect-token-icon { - margin-left: 0.5rem; -} - .p-multiselect .p-multiselect-trigger { background: transparent; color: #71717a; @@ -1343,10 +944,6 @@ border-color: #f0a9a7; } -.p-inputwrapper-filled.p-multiselect.p-multiselect-chip .p-multiselect-label { - padding: 0.375rem 0.75rem; -} - .p-multiselect-panel { background: #ffffff; color: #3f3f46; @@ -1494,206 +1091,6 @@ background: #22c55e; } -.p-radiobutton { - width: 16px; - height: 16px; -} - -.p-radiobutton .p-radiobutton-box { - border: 2px solid #d4d4d8; - background: #ffffff; - width: 16px; - height: 16px; - color: #3f3f46; - border-radius: 50%; - transition: none; -} - -.p-radiobutton .p-radiobutton-box:not(.p-disabled):not(.p-highlight):hover { - border-color: #d4d4d8; -} - -.p-radiobutton .p-radiobutton-box:not(.p-disabled).p-focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 1px #6366f1; - border-color: #8c1515; -} - -.p-radiobutton .p-radiobutton-box .p-radiobutton-icon { - width: 6px; - height: 6px; - transition-duration: 0.2s; - background-color: #ffffff; -} - -.p-radiobutton .p-radiobutton-box.p-highlight { - border-color: #8c1515; - background: #8c1515; -} - -.p-radiobutton .p-radiobutton-box.p-highlight:not(.p-disabled):hover { - border-color: #8c1515; - background: #8c1515; - color: #ffffff; -} - -.p-radiobutton.p-invalid > .p-radiobutton-box { - border-color: #f0a9a7; -} - -.p-radiobutton:focus { - outline: 0 none; -} - -.p-input-filled .p-radiobutton .p-radiobutton-box { - background-color: #fafafa; -} - -.p-input-filled .p-radiobutton .p-radiobutton-box:not(.p-disabled):hover { - background-color: #fafafa; -} - -.p-input-filled .p-radiobutton .p-radiobutton-box.p-highlight { - background: #8c1515; -} - -.p-input-filled .p-radiobutton .p-radiobutton-box.p-highlight:not(.p-disabled):hover { - background: #8c1515; -} - -.p-slider { - background: #e5e7eb; - border: 0 none; - border-radius: 0.375rem; -} - -.p-slider.p-slider-horizontal { - height: 0.286rem; -} - -.p-slider.p-slider-horizontal .p-slider-handle { - margin-top: -0.5715rem; - margin-left: -0.5715rem; -} - -.p-slider.p-slider-vertical { - width: 0.286rem; -} - -.p-slider.p-slider-vertical .p-slider-handle { - margin-left: -0.5715rem; - margin-bottom: -0.5715rem; -} - -.p-slider .p-slider-handle { - height: 1.143rem; - width: 1.143rem; - background: #ffffff; - border: 2px solid #8c1515; - border-radius: 50%; - transition: none; -} - -.p-slider .p-slider-handle:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 1px #6366f1; -} - -.p-slider .p-slider-range { - background: #8c1515; -} - -.p-slider:not(.p-disabled) .p-slider-handle:hover { - background: #8c1515; - border-color: #8c1515; -} - -.p-treeselect { - background: #ffffff; - border: 1px solid #d4d4d8; - transition: none; - border-radius: 0.375rem; -} - -.p-treeselect:not(.p-disabled):hover { - border-color: #d4d4d8; -} - -.p-treeselect:not(.p-disabled).p-focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 1px #6366f1; - border-color: #8c1515; -} - -.p-treeselect .p-treeselect-label { - padding: 0.75rem 0.75rem; - transition: none; -} - -.p-treeselect .p-treeselect-label.p-placeholder { - color: #71717a; -} - -.p-treeselect.p-treeselect-chip .p-treeselect-token { - padding: 0.375rem 0.75rem; - margin-right: 0.5rem; - background: #e5e7eb; - color: #3f3f46; - border-radius: 16px; -} - -.p-treeselect .p-treeselect-trigger { - background: transparent; - color: #71717a; - width: 3rem; - border-top-right-radius: 0.375rem; - border-bottom-right-radius: 0.375rem; -} - -.p-treeselect.p-invalid.p-component { - border-color: #f0a9a7; -} - -.p-inputwrapper-filled.p-treeselect.p-treeselect-chip .p-treeselect-label { - padding: 0.375rem 0.75rem; -} - -.p-treeselect-panel { - background: #ffffff; - color: #3f3f46; - border: 0 none; - border-radius: 0.375rem; - box-shadow: - 0 0 #0000, - 0 0 #0000, - 0 10px 15px -3px rgba(0, 0, 0, 0.1), - 0 4px 6px -2px rgba(0, 0, 0, 0.05); -} - -.p-treeselect-panel .p-treeselect-items-wrapper .p-tree { - border: 0 none; -} - -.p-treeselect-panel .p-treeselect-items-wrapper .p-treeselect-empty-message { - padding: 0.75rem 1rem; - color: #3f3f46; - background: transparent; -} - -.p-input-filled .p-treeselect { - background: #fafafa; -} - -.p-input-filled .p-treeselect:not(.p-disabled):hover { - background-color: #fafafa; -} - -.p-input-filled .p-treeselect:not(.p-disabled).p-focus { - background-color: #ffffff; -} .p-speeddial-action { width: 3rem; height: 3rem; @@ -5866,42 +5263,6 @@ line-height: 3rem; } -.p-chip { - background-color: #e5e7eb; - color: #3f3f46; - border-radius: 16px; - padding: 0 0.75rem; -} - -.p-chip .p-chip-text { - line-height: 1.5; - margin-top: 0.375rem; - margin-bottom: 0.375rem; -} - -.p-chip .p-chip-icon { - margin-right: 0.5rem; -} - -.p-chip img { - width: 2.25rem; - height: 2.25rem; - margin-left: -0.75rem; - margin-right: 0.5rem; -} - -.p-chip .p-chip-remove-icon { - margin-left: 0.5rem; - border-radius: 0.375rem; - transition: none; -} - -.p-chip .p-chip-remove-icon:focus { - outline: 0 none; - outline-offset: 0; - box-shadow: 0 0 0 1px #6366f1; -} - .p-inplace .p-inplace-display { padding: 0.75rem 0.75rem; border-radius: 0.375rem; @@ -6057,10 +5418,6 @@ font-weight: 600; } -.p-inputswitch.p-focus .p-inputswitch-slider { - box-shadow: 0 0 0 2px #6366f1; -} - .p-paginator .p-paginator-pages .p-paginator-page { margin-left: -1px; } @@ -6074,13 +5431,6 @@ border: 0 none; } -.p-radiobutton:not(.p-radiobutton-disabled) .p-radiobutton-box.p-focus { - box-shadow: - 0 0 0 2px #ffffff, - 0 0 0 4px #6366f1, - 0 1px 2px 0 rgba(0, 0, 0, 0); -} - .p-carousel .p-carousel-indicators .p-carousel-indicator.p-highlight button { background-color: #8c1515; } diff --git a/src/assets/styles/theme.scss b/src/assets/styles/theme.scss index 97d9449f7..404594ca9 100644 --- a/src/assets/styles/theme.scss +++ b/src/assets/styles/theme.scss @@ -8,8 +8,6 @@ @import 'components/defaults'; // Components -@import 'components/chips'; -@import 'components/colorpicker'; @import 'components/dataview'; @import 'components/datatable'; @@ -28,15 +26,11 @@ @import 'components/passwordpanel'; -@import 'components/radiobutton'; - @import 'components/selectbutton'; -@import 'components/slider'; @import 'components/splitbutton'; @import 'components/speeddial'; @import 'components/tabview'; -@import 'components/treeselect'; @import 'components/togglebutton'; // Custom components diff --git a/src/components/CardAdministration.vue b/src/components/CardAdministration.vue index d0a08b924..e43505a4b 100644 --- a/src/components/CardAdministration.vue +++ b/src/components/CardAdministration.vue @@ -19,6 +19,7 @@ button-class="p-button-outlined p-button-sm w-3rem h-3rem border-primary border-1 border-circle bg-transparent hover:surface-300" :tooltip-options="{ position: 'top' }" :pt="{ button: { size: 'small' } }" + data-cy="button-speed-dial" /> diff --git a/src/components/ConsentPicker.vue b/src/components/ConsentPicker.vue index 44d6504fd..415f73125 100644 --- a/src/components/ConsentPicker.vue +++ b/src/components/ConsentPicker.vue @@ -3,11 +3,27 @@
- +
- +
@@ -15,7 +31,7 @@
This administration does not require consent or assent forms
@@ -153,6 +169,7 @@ :options="listOfDocs.consent" option-label="fileName" style="width: 70%" + :placeholder="props.legal?.consent[0]?.fileName || 'Select a Consent Form'" @change="updateConsent" />

Select an Assent Form

@@ -161,6 +178,7 @@ :options="listOfDocs.assent" option-label="fileName" style="width: 70%" + :placeholder="props.legal?.assent[0]?.fileName || 'Select an Assent Form'" @change="updateAssent" />