From d0dec6bae8f011baf841286be6ac0eaf4e0c7f95 Mon Sep 17 00:00:00 2001 From: CharlesSheelam Date: Sun, 23 Jun 2024 07:07:18 -0700 Subject: [PATCH] feat: add smoketests for downloading / upload codebases --- .../fixtures/codebase/codebasetestimage.png | Bin 0 -> 31557 bytes .../codebase/testNarrativeDocumentation.txt | 1 + .../codebase/testSimulationOutput.txt | 1 + .../fixtures/codebase/testSourceCode.txt | 2 + .../fixtures/codebase/testUploadData.txt | 1 + e2e/cypress/tests/codebase.spec.ts | 92 +++++++++++++++++- e2e/package-lock.json | 13 +++ e2e/package.json | 1 + frontend/src/components/CodebaseEditForm.vue | 8 +- .../src/components/CodebaseListSidebar.vue | 1 + .../releaseEditor/CommonImagesModal.vue | 3 +- .../components/releaseEditor/FileUpload.vue | 4 +- .../releaseEditor/MetadataFormPage.vue | 8 +- .../releaseEditor/ProgressSidebar.vue | 1 + .../releaseEditor/UploadFormPage.vue | 1 + 15 files changed, 129 insertions(+), 8 deletions(-) create mode 100644 e2e/cypress/fixtures/codebase/codebasetestimage.png create mode 100644 e2e/cypress/fixtures/codebase/testNarrativeDocumentation.txt create mode 100644 e2e/cypress/fixtures/codebase/testSimulationOutput.txt create mode 100644 e2e/cypress/fixtures/codebase/testSourceCode.txt create mode 100644 e2e/cypress/fixtures/codebase/testUploadData.txt diff --git a/e2e/cypress/fixtures/codebase/codebasetestimage.png b/e2e/cypress/fixtures/codebase/codebasetestimage.png new file mode 100644 index 0000000000000000000000000000000000000000..96a5268e868f12eb129a8f0656621ea0a3e4e0f5 GIT binary patch literal 31557 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 literal 0 HcmV?d00001 diff --git a/e2e/cypress/fixtures/codebase/testNarrativeDocumentation.txt b/e2e/cypress/fixtures/codebase/testNarrativeDocumentation.txt new file mode 100644 index 000000000..bff092200 --- /dev/null +++ b/e2e/cypress/fixtures/codebase/testNarrativeDocumentation.txt @@ -0,0 +1 @@ +//test narative documentation diff --git a/e2e/cypress/fixtures/codebase/testSimulationOutput.txt b/e2e/cypress/fixtures/codebase/testSimulationOutput.txt new file mode 100644 index 000000000..9f1541be1 --- /dev/null +++ b/e2e/cypress/fixtures/codebase/testSimulationOutput.txt @@ -0,0 +1 @@ +//testSimulationOutput diff --git a/e2e/cypress/fixtures/codebase/testSourceCode.txt b/e2e/cypress/fixtures/codebase/testSourceCode.txt new file mode 100644 index 000000000..003a0b85d --- /dev/null +++ b/e2e/cypress/fixtures/codebase/testSourceCode.txt @@ -0,0 +1,2 @@ +//test source code + diff --git a/e2e/cypress/fixtures/codebase/testUploadData.txt b/e2e/cypress/fixtures/codebase/testUploadData.txt new file mode 100644 index 000000000..89786372e --- /dev/null +++ b/e2e/cypress/fixtures/codebase/testUploadData.txt @@ -0,0 +1 @@ +//test upload data diff --git a/e2e/cypress/tests/codebase.spec.ts b/e2e/cypress/tests/codebase.spec.ts index 278433bdb..e86798abb 100644 --- a/e2e/cypress/tests/codebase.spec.ts +++ b/e2e/cypress/tests/codebase.spec.ts @@ -1,10 +1,11 @@ import { loginBeforeEach } from "./setup.spec"; +import 'cypress-file-upload' //login - +/* describe("Login", () => { it("should log into comses homepage with test user", () => { - loginBeforeEach('testuser', 'test12345'); + loginBeforeEach('testuser', '123456'); assert(cy.get("h1").contains("A growing collection of resources for computational model-based science.")); }) }) @@ -87,7 +88,7 @@ describe("Visit events page", () =>{ //EVENTS PAGE }) it("should be able to submit an event", () =>{ - loginBeforeEach('testuser', 'test12345'); + loginBeforeEach('testuser', '123456'); cy.visit("/events"); cy.get('#djHideToolBarButton').click(); cy.get('.text-white').first().click({force:true}); @@ -129,7 +130,7 @@ describe("Visit jobs page", () =>{ //JOBS PAGE }) it("should be able to submit a job posting", () =>{ - loginBeforeEach('testuser', 'test12345'); + loginBeforeEach('testuser', '123456'); cy.visit("/jobs"); cy.get('#djHideToolBarButton').click(); cy.get('.text-white').first().click({force:true}); @@ -149,6 +150,89 @@ describe("Visit jobs page", () =>{ //JOBS PAGE cy.get('.card-body').first().find('a').first().click(); assert(cy.get("h1").contains("Job Title")); assert(cy.get("p").contains("Job Description")); + }) + +}) + +*/ + + +describe("Visit codebases page", () =>{ //codebases PAGE + + it("should visit the codebases page", () =>{ + cy.visit("/codebases"); + assert(cy.get("h1").contains("Computational Model Library")); + }) + + it("should be able to download a codebase", () => { + cy.visit("/codebases"); + cy.get('.search-result').first().find('a').first().click(); + cy.get('#djHideToolBarButton').click(); + cy.get('button.btn.btn-primary.my-1.w-100[rel="nofollow"]').click(); + cy.get('#form-field-industry').select('College/University'); + cy.get('#form-field-affiliation').type("Arizona State University{enter}", {force: true}); + cy.get('#form-field-reason').select('Research'); + cy.get('button[type="submit"][form="download-request-form"].btn.btn-success').click(); + }) + + it("should be able to upload a codebase", () =>{ + loginBeforeEach('test_user', '123456'); + cy.visit("/codebases"); + assert(cy.get("h1").contains("Computational Model Library")); + cy.get('#djHideToolBarButton').click(); + cy.contains('Publish a model').click(); + cy.get('[data-cy="codebase title"]').type("Codebase Title"); + cy.get('[data-cy="codebase description"]').type("Codebase Description"); + cy.get('[data-cy="codebase replication-text"]').type("Codebase Replication Text"); + cy.get('[data-cy="codebase associated publications"]').type("Codebase Associated Publications"); + cy.get('[data-cy="codebase references"]').type("Codebase References"); + cy.get('[data-cy="next"]').click(); + //add images + cy.get('[data-cy="add image"]').click(); //add image + cy.get('[data-cy="upload-image"]').first().selectFile('cypress/fixtures/codebase/codebasetestimage.png', {force: true}); + cy.get('button.btn.btn-outline-gray[data-bs-dismiss="modal"]').get("button").first().click( {force: true} ); + cy.get('button.btn.btn-outline-gray[data-bs-dismiss="modal"]') + .should('be.visible') + .and('not.be.disabled') + .first(). + click( {force: true} ); + cy.get('body').click(0, 0); + cy.get('body').click(0, 0); //FIX: find a more precise way of closing the image upload modal + + //add source code files + cy.get('[data-cy="upload-code"]').first().selectFile('cypress/fixtures/codebase/testSourceCode.txt', {force: true}); + cy.get('[data-cy="upload-docs"]').first().selectFile('cypress/fixtures/codebase/testNarrativeDocumentation.txt', {force: true}); + cy.get('[data-cy="upload-data"]').first().selectFile('cypress/fixtures/codebase/testUploadData.txt', {force: true}); + cy.get('[data-cy="upload-results"]').first().selectFile('cypress/fixtures/codebase/testSimulationOutput.txt', {force: true}); + cy.get('[data-cy="add metadata"]').click(); + cy.get('[data-cy="release-notes"] textarea').type("Release notes"); + cy.get('[data-cy="embargo-end-date"]').click(); + cy.get('[data-cy="embargo-end-date"]').contains('29').click(); + cy.get('[data-cy="operating-system"] select').select('Operating System Independent'); + cy.get('[data-cy="software-frameworks"]').type("NetLogo {enter} "); + cy.get('body').click(0, 0); + cy.get('[data-cy="programming-languages"').type("Net Logo {enter}"); + cy.get('body').click(0, 0); + cy.get('[data-cy="license"] .multiselect__select').click(); + cy.get('[data-cy="license"] .multiselect__element').contains('GPL-2.0').click(); + cy.get('[data-cy="save-and-continue"]').click(); + cy.get('button.btn.btn-danger[rel="nofollow"]').click(); + cy.get('button[type="submit"].btn.btn-danger[form="publish-form"]').click(); + + + + + + + + + + + + + + + }) }) diff --git a/e2e/package-lock.json b/e2e/package-lock.json index fa61ddfdf..f70c54e0b 100644 --- a/e2e/package-lock.json +++ b/e2e/package-lock.json @@ -9,6 +9,7 @@ "version": "0.0.1", "devDependencies": { "cypress": "^13.6.2", + "cypress-file-upload": "^5.0.8", "typescript": "~4.8.4" }, "engines": { @@ -609,6 +610,18 @@ "node": "^16.0.0 || ^18.0.0 || >=20.0.0" } }, + "node_modules/cypress-file-upload": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/cypress-file-upload/-/cypress-file-upload-5.0.8.tgz", + "integrity": "sha512-+8VzNabRk3zG6x8f8BWArF/xA/W0VK4IZNx3MV0jFWrJS/qKn8eHfa5nU73P9fOQAgwHFJx7zjg4lwOnljMO8g==", + "dev": true, + "engines": { + "node": ">=8.2.1" + }, + "peerDependencies": { + "cypress": ">3.0.0" + } + }, "node_modules/dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", diff --git a/e2e/package.json b/e2e/package.json index 228185d79..8b3ce8ea6 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -8,6 +8,7 @@ }, "devDependencies": { "cypress": "^13.6.2", + "cypress-file-upload": "^5.0.8", "typescript": "~4.8.4" }, "engines": { diff --git a/frontend/src/components/CodebaseEditForm.vue b/frontend/src/components/CodebaseEditForm.vue index e4605a0ab..02dac3d1a 100644 --- a/frontend/src/components/CodebaseEditForm.vue +++ b/frontend/src/components/CodebaseEditForm.vue @@ -5,6 +5,7 @@ name="title" label="Title" help="A short title describing this computational model, limited to 300 characters" + data-cy="codebase title" required /> @@ -13,6 +14,7 @@ name="description" label="Description" help="A summary description of your model similar to an abstract. There is no limit on length but it should be kept as succinct as possible." + data-cy="codebase description" required /> - diff --git a/frontend/src/components/CodebaseListSidebar.vue b/frontend/src/components/CodebaseListSidebar.vue index 8601924c3..909e12a27 100644 --- a/frontend/src/components/CodebaseListSidebar.vue +++ b/frontend/src/components/CodebaseListSidebar.vue @@ -3,6 +3,7 @@ create-label="Publish a model" create-url="/codebases/add/" search-label="Apply Filters" + data-cy="publish" :search-url="query" >