/// /// import { generateNewOrg, generateNewUser } from '../../utils/generateMockData'; import { Role } from '@energyweb/origin-backend-core'; describe('User invitation flow', () => { const orgOwner = generateNewUser(); const testOrg = generateNewOrg(orgOwner); const memberAccept = generateNewUser(); const memberReject = generateNewUser(); const deviceManager = generateNewUser(); const admin = generateNewUser(); before(() => { cy.apiRegisterAndApproveUser(orgOwner); cy.apiRegisterAndApproveOrg(orgOwner, testOrg); cy.apiRegisterUser(memberAccept); cy.apiRegisterUser(memberReject); cy.apiRegisterUser(deviceManager); cy.apiRegisterUser(admin); cy.apiSendInvitation(orgOwner, memberAccept.email, Role.OrganizationUser); cy.apiSendInvitation(orgOwner, memberReject.email, Role.OrganizationUser); cy.apiSendInvitation(orgOwner, deviceManager.email, Role.OrganizationDeviceManager); cy.apiSendInvitation(orgOwner, admin.email, Role.OrganizationAdmin); }); it('should show modal and allow to skip it', () => { cy.visit('/user-login'); const { email, password } = memberAccept; cy.fillUserLogin({ email, password }); cy.dataCy('login-button').click(); cy.contains('Invitation to join the marketplace'); cy.contains(orgOwner.firstName); cy.contains(orgOwner.lastName); cy.contains(testOrg.name); cy.dataCy('invitations-later-button').click(); cy.notification('You can find this invitation on the Organizations tab'); cy.get('.toast').click(); cy.contains('Thank you for registering as a user on the marketplace'); cy.get('button').contains('Not now').click(); cy.url().should('include', '/devices/production'); cy.contains(testOrg.name).should('not.exist'); }); it('should allow to accept invitation through invitations table', () => { cy.dataCy('organizations-menu').click(); cy.url().should('include', 'organization-invitations'); cy.contains('Received'); cy.contains('tr', memberAccept.email).contains('td', 'Pending'); cy.contains('tr', memberAccept.email).find('td').last().click(); cy.dataCy('accept-invitation-icon').filter(':visible').click(); cy.contains(`Successfully joined ${testOrg.name}`); cy.contains('As a member you can'); cy.contains('Place orders on the exchange'); cy.contains('button', 'Ok').click(); cy.url().should('include', 'devices/production'); cy.notification('Invitation accepted'); cy.get('.toast').click(); cy.contains(testOrg.name); cy.dataCy('organizations-menu').should('not.exist'); cy.clearLocalStorage(); }); it('should allow to decline invitation through invitations table', () => { cy.visit('/user-login'); const { email, password } = memberReject; cy.fillUserLogin({ email, password }); cy.dataCy('login-button').click(); cy.contains('Invitation to join the marketplace'); cy.contains(orgOwner.firstName); cy.contains(orgOwner.lastName); cy.contains(testOrg.name); cy.dataCy('invitations-later-button').click(); cy.notification('You can find this invitation on the Organizations tab'); cy.get('.toast').click(); cy.contains('Thank you for registering as a user on the marketplace'); cy.get('button').contains('Not now').click(); cy.dataCy('organizations-menu').click(); cy.url().should('include', 'organization-invitations'); cy.contains('tr', memberReject.email).find('td').last().click(); cy.dataCy('decline-invitation-icon').filter(':visible').click(); cy.wait(50); cy.notification('Invitation rejected'); cy.contains('tr', memberReject.email).contains('td', 'Rejected'); cy.dataCy('organizations-menu'); cy.clearLocalStorage(); }); it('should allow to accept invitation through modal window', () => { cy.visit('/user-login'); const { email, password } = deviceManager; cy.fillUserLogin({ email, password }); cy.dataCy('login-button').click(); cy.contains('Invitation to join the marketplace'); cy.contains(orgOwner.firstName); cy.contains(orgOwner.lastName); cy.contains(testOrg.name); cy.dataCy('invitations-accept-button').click(); cy.contains(`Successfully joined ${testOrg.name}`); cy.contains('As a Device Manager you have permission to'); cy.contains('Register devices and device groups'); cy.contains('Place orders on the exchange'); cy.contains('button', 'Ok').click(); cy.contains('Connect Blockchain Address'); cy.contains('button', 'Maybe Later').click(); cy.url().should('include', 'devices/production'); cy.contains(testOrg.name); cy.dataCy('organizations-menu').should('not.exist'); cy.clearLocalStorage(); }); it('should allow to decline invitation through modal window', () => { cy.visit('/user-login'); const { email, password } = admin; cy.fillUserLogin({ email, password }); cy.dataCy('login-button').click(); cy.contains('Invitation to join the marketplace'); cy.contains(orgOwner.firstName); cy.contains(orgOwner.lastName); cy.contains(testOrg.name); cy.dataCy('invitations-decline-button').click(); cy.contains('Thank you for registering as a user on the marketplace'); cy.get('button').contains('Not now').click(); cy.notification('Invitation rejected'); cy.url().should('include', 'devices/production'); cy.contains(testOrg.name).should('not.exist'); cy.dataCy('organizations-menu'); }); });