import { testA11y } from 'cypress/support/utils'; //import { TEST_SUBMIT_USER, TEST_SUBMIT_USER_PASSWORD, TEST_SUBMIT_COLLECTION_NAME, TEST_SUBMIT_COLLECTION_UUID, TEST_ADMIN_USER, TEST_ADMIN_PASSWORD } from 'cypress/support/e2e'; import { Options } from 'cypress-axe'; describe('New Submission page', () => { // NOTE: We already test that new Item submissions can be started from MyDSpace in my-dspace.spec.ts it('should create a new submission when using /submit path & pass accessibility', () => { // Test that calling /submit with collection & entityType will create a new submission cy.visit('/submit?collection='.concat(Cypress.env('DSPACE_TEST_SUBMIT_COLLECTION_UUID')).concat('&entityType=none')); // This page is restricted, so we will be shown the login form. Fill it out & submit. cy.loginViaForm(Cypress.env('DSPACE_TEST_SUBMIT_USER'), Cypress.env('DSPACE_TEST_SUBMIT_USER_PASSWORD')); // Should redirect to /workspaceitems, as we've started a new submission cy.url().should('include', '/workspaceitems'); // The Submission edit form tag should be visible cy.get('ds-submission-edit').should('be.visible'); // A Collection menu button should exist & it's value should be the selected collection cy.get('#collectionControlsMenuButton span').should('have.text', Cypress.env('DSPACE_TEST_SUBMIT_COLLECTION_NAME')); // 4 sections should be visible by default cy.get('div#section_traditionalpageone').should('be.visible'); cy.get('div#section_traditionalpagetwo').should('be.visible'); cy.get('div#section_upload').should('be.visible'); cy.get('div#section_license').should('be.visible'); // Test entire page for accessibility testA11y('ds-submission-edit', { rules: { // Author & Subject fields have invalid "aria-multiline" attrs. // See https://github.com/DSpace/dspace-angular/issues/1272 'aria-allowed-attr': { enabled: false }, // All panels are accordians & fail "aria-required-children" and "nested-interactive". // Seem to require updating ng-bootstrap and https://github.com/DSpace/dspace-angular/issues/2216 'aria-required-children': { enabled: false }, 'nested-interactive': { enabled: false }, // All select boxes fail to have a name / aria-label. // This is a bug in ng-dynamic-forms and may require https://github.com/DSpace/dspace-angular/issues/2216 'select-name': { enabled: false }, }, } as Options, ); // Discard button should work // Clicking it will display a confirmation, which we will confirm with another click cy.get('button#discard').click(); cy.get('button#discard_submit').click(); }); it('should block submission & show errors if required fields are missing', () => { // Create a new submission cy.visit('/submit?collection='.concat(Cypress.env('DSPACE_TEST_SUBMIT_COLLECTION_UUID')).concat('&entityType=none')); // This page is restricted, so we will be shown the login form. Fill it out & submit. cy.loginViaForm(Cypress.env('DSPACE_TEST_SUBMIT_USER'), Cypress.env('DSPACE_TEST_SUBMIT_USER_PASSWORD')); // Attempt an immediate deposit without filling out any fields cy.get('button#deposit').click(); // A warning alert should display. cy.get('ds-notification div.alert-success').should('not.exist'); cy.get('ds-notification div.alert-warning').should('be.visible'); // First section should have an exclamation error in the header // (as it has required fields) cy.get('div#traditionalpageone-header i.fa-exclamation-circle').should('be.visible'); // Title field should have class "is-invalid" applied, as it's required cy.get('input#dc_title').should('have.class', 'is-invalid'); // Date Year field should also have "is-valid" class cy.get('input#dc_date_issued_year').should('have.class', 'is-invalid'); // FINALLY, cleanup after ourselves. This also exercises the MyDSpace delete button. // Get our Submission URL, to parse out the ID of this submission cy.location().then(fullUrl => { // This will be the full path (/workspaceitems/[id]/edit) const path = fullUrl.pathname; // Split on the slashes const subpaths = path.split('/'); // Part 2 will be the [id] of the submission const id = subpaths[2]; // Even though form is incomplete, the "Save for Later" button should still work cy.get('button#saveForLater').click(); // "Save for Later" should send us to MyDSpace cy.url().should('include', '/mydspace'); // A success alert should be visible cy.get('ds-notification div.alert-success').should('be.visible'); // Now, dismiss any open alert boxes (may be multiple, as tests run quickly) cy.get('[data-dismiss="alert"]').click({ multiple: true }); // This is the GET command that will actually run the search cy.intercept('GET', '/server/api/discover/search/objects*').as('search-results'); // On MyDSpace, find the submission we just saved via its ID cy.get('[data-test="search-box"]').type(id); cy.get('[data-test="search-button"]').click(); // Wait for search results to come back from the above GET command cy.wait('@search-results'); // Delete our created submission & confirm deletion cy.get('button#delete_' + id).click(); cy.get('button#delete_confirm').click(); }); }); it('should allow for deposit if all required fields completed & file uploaded', () => { // Create a new submission cy.visit('/submit?collection='.concat(Cypress.env('DSPACE_TEST_SUBMIT_COLLECTION_UUID')).concat('&entityType=none')); // This page is restricted, so we will be shown the login form. Fill it out & submit. cy.loginViaForm(Cypress.env('DSPACE_TEST_SUBMIT_USER'), Cypress.env('DSPACE_TEST_SUBMIT_USER_PASSWORD')); // Fill out all required fields (Title, Date) cy.get('input#dc_title').type('DSpace logo uploaded via e2e tests'); cy.get('input#dc_date_issued_year').type('2022'); // Confirm the required license by checking checkbox // (NOTE: requires "force:true" cause Cypress claims this checkbox is covered by its own <span>) cy.get('input#granted').check( { force: true } ); // Before using Cypress drag & drop, we have to manually trigger the "dragover" event. // This ensures our UI displays the dropzone that covers the entire submission page. // (For some reason Cypress drag & drop doesn't trigger this even itself & upload won't work without this trigger) cy.get('ds-uploader').trigger('dragover'); // This is the POST command that will upload the file cy.intercept('POST', '/server/api/submission/workspaceitems/*').as('upload'); // Upload our DSpace logo via drag & drop onto submission form // cy.get('div#section_upload') cy.get('div.ds-document-drop-zone').selectFile('src/assets/images/dspace-logo.svg', { action: 'drag-drop', }); // Wait for upload to complete before proceeding cy.wait('@upload'); // Wait for deposit button to not be disabled & click it. cy.get('button#deposit').should('not.be.disabled').click(); // No warnings should exist. Instead, just successful deposit alert is displayed cy.get('ds-notification div.alert-warning').should('not.exist'); cy.get('ds-notification div.alert-success').should('be.visible'); }); it('is possible to submit a new "Person" and that form passes accessibility', () => { // To submit a different entity type, we'll start from MyDSpace cy.visit('/mydspace'); // This page is restricted, so we will be shown the login form. Fill it out & submit. // NOTE: At this time, we MUST login as admin to submit Person objects cy.loginViaForm(Cypress.env('DSPACE_TEST_ADMIN_USER'), Cypress.env('DSPACE_TEST_ADMIN_PASSWORD')); // Open the New Submission dropdown cy.get('button[data-test="submission-dropdown"]').click(); // Click on the "Person" type in that dropdown cy.get('#entityControlsDropdownMenu button[title="Person"]').click(); // This should display the <ds-create-item-parent-selector> (popup window) cy.get('ds-create-item-parent-selector').should('be.visible'); // Type in a known Collection name in the search box cy.get('ds-authorized-collection-selector input[type="search"]').type(Cypress.env('DSPACE_TEST_SUBMIT_PERSON_COLLECTION_NAME')); // Click on the button matching that known Collection name cy.get('ds-authorized-collection-selector button[title="'.concat(Cypress.env('DSPACE_TEST_SUBMIT_PERSON_COLLECTION_NAME')).concat('"]')).click(); // New URL should include /workspaceitems, as we've started a new submission cy.url().should('include', '/workspaceitems'); // The Submission edit form tag should be visible cy.get('ds-submission-edit').should('be.visible'); // A Collection menu button should exist & its value should be the selected collection cy.get('#collectionControlsMenuButton span').should('have.text', Cypress.env('DSPACE_TEST_SUBMIT_PERSON_COLLECTION_NAME')); // 3 sections should be visible by default cy.get('div#section_personStep').should('be.visible'); cy.get('div#section_upload').should('be.visible'); cy.get('div#section_license').should('be.visible'); // Test entire page for accessibility testA11y('ds-submission-edit', { rules: { // All panels are accordians & fail "aria-required-children" and "nested-interactive". // Seem to require updating ng-bootstrap and https://github.com/DSpace/dspace-angular/issues/2216 'aria-required-children': { enabled: false }, 'nested-interactive': { enabled: false }, }, } as Options, ); // Click the lookup button next to "Publication" field cy.get('button[data-test="lookup-button"]').click(); // A popup modal window should be visible cy.get('ds-dynamic-lookup-relation-modal').should('be.visible'); // Popup modal should also pass accessibility tests //testA11y('ds-dynamic-lookup-relation-modal'); testA11y({ include: ['ds-dynamic-lookup-relation-modal'], exclude: [ ['ul.nav-tabs'], // Tabs at top of model have several issues which seem to be caused by ng-bootstrap ], }); // Close popup window cy.get('ds-dynamic-lookup-relation-modal button.close').click(); // Back on the form, click the discard button to remove new submission // Clicking it will display a confirmation, which we will confirm with another click cy.get('button#discard').click(); cy.get('button#discard_submit').click(); }); });