passbolt-styleguide
Version:
Passbolt styleguide contains common styling assets used by the different sites, plugin, etc.
151 lines (127 loc) • 6.84 kB
JavaScript
/**
* Passbolt ~ Open source password manager for teams
* Copyright (c) 2022 Passbolt SA (https://www.passbolt.com)
*
* Licensed under GNU Affero General Public License version 3 of the or any later version.
* For full copyright and license information, please see the LICENSE.txt
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) 2022 Passbolt SA (https://www.passbolt.com)
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
* @link https://www.passbolt.com Passbolt(tm)
* @since 3.6.0
*/
import {
defaultProps, formatDateTimeAgo, oneUserAccountRequestsApproved, oneUserAccountRequestsPending,
userAccountRequestsApproved, userAccountRequestsRejectedWithPending
} from "./DisplayUserDetailsAccountRecovery.test.data";
import DisplayUserDetailsAccountRecoveryPage from "./DisplayUserDetailsAccountRecovery.test.page";
import HandleReviewAccountRecoveryRequestWorkflow from "../../AccountRecovery/HandleReviewAccountRecoveryRequestWorkflow/HandleReviewAccountRecoveryRequestWorkflow";
/**
* Unit tests on DisplayUserDetailsAccountRecovery in regard of specifications
*/
beforeEach(() => {
jest.resetModules();
});
describe("See account recovery", () => {
let page; // The page to test against
describe(' As LU I can see user account recovery requests during pending', () => {
const userWithPending = {
userWorkspaceContext: {
details: {
user: {
id: "54c6278e-f824-5fda-91ff-3e946b18d994",
pending_account_recovery_request: {"status": "pending"}
}
}
}
};
const props = defaultProps(userWithPending); // The props to pass
const mockContextRequest = implementation => jest.spyOn(props.context.port, 'request').mockImplementation(implementation);
it('I should see the user account recovery request during pending status', async() => {
const userAccountRecoveryRequestMockImpl = jest.fn(() => Promise.resolve(oneUserAccountRequestsPending));
mockContextRequest(userAccountRecoveryRequestMockImpl);
page = new DisplayUserDetailsAccountRecoveryPage(props);
await page.toggleCollapse();
expect(page.title).toBe('Account recovery');
expect(page.currentStatus).toBe('Current status');
expect(page.currentStatusButton.textContent).toBe('Review');
expect(page.previousRecoveryRequest).toBe('Never');
expect(page.numberOfRecovery).toBe('1');
});
it('I should see the user account recovery previous request during pending status', async() => {
const userAccountRecoveryRequestMockImpl = jest.fn(() => Promise.resolve(userAccountRequestsRejectedWithPending));
mockContextRequest(userAccountRecoveryRequestMockImpl);
page = new DisplayUserDetailsAccountRecoveryPage(props);
await page.toggleCollapse();
expect(page.currentStatus).toBe('Current status');
expect(page.currentStatusButton.textContent).toBe('Review');
expect(page.previousRecoveryRequest).toBe(`Rejected ${formatDateTimeAgo(userAccountRequestsRejectedWithPending[1].created)}`);
expect(page.numberOfRecovery).toBe('2');
});
it('I should review the user account recovery request during pending status', async() => {
const userAccountRecoveryRequestMockImpl = jest.fn(() => Promise.resolve(oneUserAccountRequestsPending));
mockContextRequest(userAccountRecoveryRequestMockImpl);
page = new DisplayUserDetailsAccountRecoveryPage(props);
await page.toggleCollapse();
expect(page.currentStatusButton.textContent).toBe('Review');
await page.reviewAccountRecovery();
const accountRecoveryRequestId = props.userWorkspaceContext.details.user.pending_account_recovery_request.id;
expect(props.workflowContext.start).toHaveBeenLastCalledWith(HandleReviewAccountRecoveryRequestWorkflow, {accountRecoveryRequestId});
});
});
describe(' As LU I can see user account recovery requests', () => {
const props = defaultProps(); // The props to pass
const mockContextRequest = implementation => jest.spyOn(props.context.port, 'request').mockImplementation(implementation);
it('I should see the user account recovery request', async() => {
const userAccountRecoveryRequestMockImpl = jest.fn(() => Promise.resolve(oneUserAccountRequestsApproved));
mockContextRequest(userAccountRecoveryRequestMockImpl);
page = new DisplayUserDetailsAccountRecoveryPage(props);
await page.toggleCollapse();
expect(page.currentStatusButton).toBeNull();
expect(page.previousRecoveryRequest).toBe(`Approved ${formatDateTimeAgo(oneUserAccountRequestsApproved[0].created)}`);
expect(page.numberOfRecovery).toBe('1');
});
it('I should see the user account recovery previous request', async() => {
const userAccountRecoveryRequestMockImpl = jest.fn(() => Promise.resolve(userAccountRequestsApproved));
mockContextRequest(userAccountRecoveryRequestMockImpl);
page = new DisplayUserDetailsAccountRecoveryPage(props);
await page.toggleCollapse();
expect(page.title).toBe('Account recovery');
expect(page.currentStatusButton).toBeNull();
expect(page.previousRecoveryRequest).toBe(`Approved ${formatDateTimeAgo(userAccountRequestsApproved[1].created)}`);
expect(page.numberOfRecovery).toBe('2');
});
it('I should see user account recovery request with 0 request', async() => {
const userAccountRecoveryRequestMockImpl = jest.fn(() => Promise.resolve([]));
mockContextRequest(userAccountRecoveryRequestMockImpl);
page = new DisplayUserDetailsAccountRecoveryPage(props);
await page.toggleCollapse();
expect(page.title).toBe('Account recovery');
expect(page.currentStatusButton).toBeNull();
expect(page.previousRecoveryRequest).toBe('Never');
expect(page.numberOfRecovery).toBe('0');
});
});
describe(' As LU I see a loading state when the activity are not loaded', () => {
let findResolve;
const loadingFindMockImpl = jest.fn(() => new Promise(resolve => {
findResolve = resolve;
}));
const props = defaultProps(); // The props to pass
const mockContextRequest = implementation => jest.spyOn(props.context.port, 'request').mockImplementation(implementation);
beforeEach(() => {
mockContextRequest(loadingFindMockImpl);
page = new DisplayUserDetailsAccountRecoveryPage(props);
});
it('I should see the loading message “Retrieving account recovery”', async() => {
await page.toggleCollapse();
const inProgressFn = () => {
expect(page.isLoading()).toBeTruthy();
findResolve([]);
};
await page.waitForLoading(inProgressFn);
expect(page.isLoading()).toBeFalsy();
});
});
});