passbolt-styleguide
Version:
Passbolt styleguide contains common styling assets used by the different sites, plugin, etc.
106 lines (92 loc) • 4.04 kB
JavaScript
/**
* Passbolt ~ Open source password manager for teams
* Copyright (c) 2020 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) 2020 Passbolt SA (https://www.passbolt.com)
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
* @link https://www.passbolt.com Passbolt(tm)
* @since 2.11.0
*/
/**
* Unit tests on EnterNameForm in regard of specifications
*/
import EnterNameFormPage from "./EnterNameForm.test.page";
import {defaultProps} from "./EnterNameForm.test.data";
import {waitFor} from "@testing-library/react";
import fetchMock from "fetch-mock-jest";
beforeEach(() => {
jest.resetModules();
});
describe("As AN I should see the Enter Name Form Page", () => {
let page; // The page to test against
const props = defaultProps(); // The applicative context
describe('As AN I can start adding a name', () => {
/**
* I should see the enter name form
*/
beforeEach(() => {
fetchMock.reset();
page = new EnterNameFormPage(props);
});
it('As AN I should be redirected after enter a name with success', async() => {
expect(page.exists()).toBeTruthy();
expect(page.title).toBe('New here? Enter your name to get started.');
expect(page.haveAccount.textContent).toBe('I already have an account');
expect(page.registerButton.textContent).toBe('Sign up');
// Fill the form
page.insertFirstname("firstname");
page.insertLastname("lastname");
jest.spyOn(props.apiTriageContext, 'onRegistrationRequested').mockImplementation(() => {});
await page.register();
expect(props.apiTriageContext.onRegistrationRequested).toHaveBeenCalledWith("firstname", "lastname");
});
it('As AN I should see a processing feedback while submitting the form', async() => {
// Fill the form
page.insertFirstname("firstname");
page.insertLastname("lastname");
page.registerWithoutWaitFor();
// API calls are made on submit, wait they are resolved.
await waitFor(() => {
expect(page.firstname.getAttribute("disabled")).not.toBeNull();
expect(page.lastname.getAttribute("disabled")).not.toBeNull();
expect(page.registerButton.getAttribute("disabled")).not.toBeNull();
expect(page.registerButton.className).toBe('button primary disabled processing big full-width');
});
});
it('As AN I shouldn’t be able to submit the form if there is an invalid field', async() => {
await page.register();
// Throw error message
expect(page.firstnameErrorMessage).toBe("A first name is required.");
expect(page.lastnameErrorMessage).toBe("A last name is required.");
page.insertFirstname("");
page.insertLastname("");
await page.register();
expect(page.firstnameErrorMessage).toBe("A first name is required.");
expect(page.lastnameErrorMessage).toBe("A last name is required.");
});
/*
* it('As AN I should see an error toaster if the submit operation fails for an unexpected reason', async() => {
* // Fill the form
* page.insertFirstname("firstname");
* page.insertLastname("lastname");
*
* // Mock the request function to make it return an error.
* const error = {
* status: 500
* };
* mockFetchPost("http://localhost/users/register.json?api-version=v2", Promise.reject(error));
*
* jest.spyOn(ActionFeedbackContext._currentValue, 'displayError').mockImplementation(() => {});
*
* await page.register();
*
* // Throw general error message
* expect(ActionFeedbackContext._currentValue.displayError).toHaveBeenCalledWith("There was an unexpected error, please retry later...");
* });
*/
});
});