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

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

const testProject = (readOnly, shouldActionsExist, classReadOnly = false) => {
  cy.mockGraphqlOps({operations: getOperations({readOnly, classReadOnly})});

  const exist = shouldActionsExist ? 'exist' : 'not.exist';

  cy.visit('/portfolio/project-name');
  cy.getByDataCy('project-title').should('exist');
  cy.getByDataCy('project-entry').should('have.length', 1);
  cy.getByDataCy('add-project-entry').should(exist);
  cy.getByDataCy('project-actions').should(exist);
  cy.getByDataCy('project-entry-more').should(exist);
};

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

  it('Can create and edit project entry', () => {
    testProject(false, true);
  });
  it('Can not create and edit project entry when license expired', () => {
    testProject(true, false);
  });
  it('Can not create and edit project entry when class inactive', () => {
    testProject(false, false, true);
  });
});
