import {getMinimalMe} from '../../../support/helpers';

const getOperations = ({readOnly = false, classReadOnly = false}) => ({
  MeQuery: getMinimalMe({readOnly, classReadOnly}),
  ProjectsQuery: {
    projects: [
      {
        id: 'projectId',
        final: false,
        student: {
          id: btoa('PrivateUserNode:1'),
        },
        entriesCount: 3,
      },
    ],
  },
});

describe('Read Only Portfolio', () => {
  beforeEach(() => {
    cy.setup();
  });

  it('Can create and edit project', () => {
    cy.mockGraphqlOps({operations: getOperations({readOnly: false})});

    cy.visit('/portfolio');
    cy.getByDataCy('project-list').should('exist');
    cy.getByDataCy('create-project-button').should('exist');
    cy.getByDataCy('project').should('have.length', 1);
    cy.getByDataCy('project-actions').should('exist');
  });

  it('Can not create and edit project when license invalid', () => {
    cy.mockGraphqlOps({operations: getOperations({readOnly: true})});

    cy.visit('/portfolio');
    cy.getByDataCy('project-list').should('exist');
    cy.getByDataCy('add-project-button').should('not.exist');
    cy.getByDataCy('project').should('have.length', 1);
    cy.getByDataCy('project-actions').should('not.exist');
  });

  it('Can not create and edit project when class inactive', () => {
    cy.mockGraphqlOps({operations: getOperations({readOnly: false, classReadOnly: true})});

    cy.visit('/portfolio');
    cy.getByDataCy('project-list').should('exist');
    cy.getByDataCy('add-project-button').should('not.exist');
    cy.getByDataCy('project').should('have.length', 1);
    cy.getByDataCy('project-actions').should('not.exist');
  });
});
