///
///
import { generateNewOrg, generateNewUser } from '../../utils/generateMockData';
import { OrganizationInvitationStatus } from '@energyweb/origin-backend-core';
describe('Organization invite form and invitations table', () => {
const testUser = generateNewUser();
const testOrg = generateNewOrg(testUser);
const inviteTab = 'organization-invite';
const invitationsTab = 'organization-invitations';
const inviteEmailCy = 'invitation-email';
const inviteRoleCy = 'invitation-role';
const inviteButtonCy = 'invitation-submit';
const member = generateNewUser();
const deviceManager = generateNewUser();
const admin = generateNewUser();
before(() => {
cy.apiRegisterAndApproveUser(testUser);
cy.apiRegisterAndApproveOrg(testUser, testOrg);
cy.apiLoginUser(testUser);
cy.visit('/');
cy.dataCy('organizations-menu').click();
cy.dataCy(inviteTab).click();
cy.url().should('include', inviteTab);
});
it('should allow to send invitation for member', () => {
cy.dataCy(inviteEmailCy).type(member.email);
cy.contains('Member');
cy.dataCy(inviteButtonCy).click();
cy.notification('Invitation sent');
cy.get('.toast').click();
// testing formReset
cy.dataCy(inviteEmailCy).should('have.value', '');
});
it('should allow to send invitation for device manager', () => {
cy.dataCy(inviteEmailCy).type(deviceManager.email);
cy.dataCy(inviteRoleCy).click();
cy.get('[data-value="2"]').click();
cy.dataCy(inviteButtonCy).click();
cy.notification('Invitation sent');
cy.get('.toast').click();
// testing formReset
cy.dataCy(inviteRoleCy).find('input').should('have.value', '4');
});
it('should allow to send invitation for admin', () => {
cy.dataCy(inviteEmailCy).type(admin.email);
cy.dataCy(inviteRoleCy).click();
cy.get('[data-value="1"]').click();
cy.dataCy(inviteButtonCy).click();
cy.notification('Invitation sent');
cy.get('.toast').click();
});
it('should not allow to send invitation to already invited user', () => {
cy.dataCy(inviteEmailCy).type(member.email);
cy.contains('Member');
cy.dataCy(inviteButtonCy).click();
cy.notification('You have already sent an invitation for this user');
});
it('should not allow to send invitation to a user who is a part of another organization', () => {
cy.clearLocalStorage();
const anotherTestUser = generateNewUser();
const anotherTestOrg = generateNewOrg(anotherTestUser);
cy.apiRegisterUser(anotherTestUser);
cy.apiRegisterOrg(anotherTestUser, anotherTestOrg);
cy.clearLocalStorage();
cy.apiLoginUser(testUser);
cy.visit('/');
cy.dataCy('organizations-menu').click();
cy.dataCy(inviteTab).click();
cy.url().should('include', inviteTab);
cy.dataCy(inviteEmailCy).type(anotherTestUser.email);
cy.dataCy(inviteRoleCy).click();
cy.get('[data-value="1"]').click();
cy.dataCy(inviteButtonCy).click();
cy.notification('Could not invite user to organization');
});
it('should show invitation with pending status', () => {
cy.dataCy(invitationsTab).click();
cy.url().should('include', invitationsTab);
cy.contains('tr', member.email).contains('td', OrganizationInvitationStatus.Pending);
cy.contains('tr', deviceManager.email).contains('td', OrganizationInvitationStatus.Pending);
cy.contains('tr', admin.email).contains('td', OrganizationInvitationStatus.Pending);
cy.contains('1-3 of 3');
});
it('should show invitation with approved status', () => {
cy.clearLocalStorage();
cy.apiRegisterUser(member);
cy.apiUserProceedInvitation(member, OrganizationInvitationStatus.Accepted);
cy.apiLoginUser(testUser);
cy.visit('/');
cy.dataCy('organizations-menu').click();
cy.dataCy(invitationsTab).click();
cy.url().should('include', invitationsTab);
cy.contains('tr', member.email).contains('td', OrganizationInvitationStatus.Accepted);
cy.contains('tr', deviceManager.email).contains('td', OrganizationInvitationStatus.Pending);
cy.contains('tr', admin.email).contains('td', OrganizationInvitationStatus.Pending);
cy.contains('1-3 of 3');
});
it('should show invitation with rejected status', () => {
cy.clearLocalStorage();
cy.apiRegisterUser(deviceManager);
cy.apiUserProceedInvitation(deviceManager, OrganizationInvitationStatus.Rejected);
cy.apiLoginUser(testUser);
cy.visit('/');
cy.dataCy('organizations-menu').click();
cy.dataCy(invitationsTab).click();
cy.url().should('include', invitationsTab);
cy.contains('tr', member.email).contains('td', OrganizationInvitationStatus.Accepted);
cy.contains('tr', deviceManager.email).contains(
'td',
OrganizationInvitationStatus.Rejected
);
cy.contains('tr', admin.email).contains('td', OrganizationInvitationStatus.Pending);
cy.contains('1-3 of 3');
});
});