import { testA11y } from 'cypress/support/utils';

describe('My DSpace page', () => {
  it('should display recent submissions and pass accessibility tests', () => {
    cy.visit('/mydspace');

    // 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'));

    cy.get('ds-my-dspace-page').should('be.visible');

    // At least one recent submission should be displayed
    cy.get('[data-test="list-object"]').should('be.visible');

    // Click each filter toggle to open *every* filter
    // (As we want to scan filter section for accessibility issues as well)
    cy.get('.filter-toggle').click({ multiple: true });

    // Analyze <ds-my-dspace-page> for accessibility issues
    testA11y('ds-my-dspace-page');
  });

  it('should have a working detailed view that passes accessibility tests', () => {
    cy.visit('/mydspace');

    // 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'));

    cy.get('ds-my-dspace-page').should('be.visible');

    // Click button in sidebar to display detailed view
    cy.get('ds-search-sidebar [data-test="detail-view"]').click();

    cy.get('ds-object-detail').should('be.visible');

    // Analyze <ds-my-dspace-page> for accessibility issues
    testA11y('ds-my-dspace-page');
  });

  // NOTE: Deleting existing submissions is exercised by submission.spec.ts
  it('should let you start a new submission & edit in-progress submissions', () => {
    cy.visit('/mydspace');

    // 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'));

    // Open the New Submission dropdown
    cy.get('button[data-test="submission-dropdown"]').click();
    // Click on the "Item" type in that dropdown
    cy.get('#entityControlsDropdownMenu button[title="none"]').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_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_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_COLLECTION_NAME'));

    // Now that we've created a submission, we'll test that we can go back and Edit it.
    // Get our Submission URL, to parse out the ID of this new 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];

      // Click the "Save for Later" button to save this submission
      cy.get('ds-submission-form-footer [data-test="save-for-later"]').click();

      // "Save for Later" should send us to MyDSpace
      cy.url().should('include', '/mydspace');

      // Close any open notifications, to make sure they don't get in the way of next steps
      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 created 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');

      // Click the Edit button for this in-progress submission
      cy.get('#edit_' + id).click();

      // Should send us back to the submission form
      cy.url().should('include', '/workspaceitems/' + id + '/edit');

      // Discard our new submission by clicking Discard in Submission form & confirming
      cy.get('ds-submission-form-footer [data-test="discard"]').click();
      cy.get('button#discard_submit').click();

      // Discarding should send us back to MyDSpace
      cy.url().should('include', '/mydspace');
    });
  });

  it('should let you import from external sources', () => {
    cy.visit('/mydspace');

    // 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'));

    // Open the New Import dropdown
    cy.get('button[data-test="import-dropdown"]').click();
    // Click on the "Item" type in that dropdown
    cy.get('#importControlsDropdownMenu button[title="none"]').click();

    // New URL should include /import-external, as we've moved to the import page
    cy.url().should('include', '/import-external');

    // The external import searchbox should be visible
    cy.get('ds-submission-import-external-searchbar').should('be.visible');

    // Test for accessibility issues
    testA11y('ds-submission-import-external');
  });

});