passbolt-styleguide
Version:
Passbolt styleguide contains common styling assets used by the different sites, plugin, etc.
223 lines (170 loc) • 7.34 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.8.0
*/
/**
* Unit tests on SendTestMailDialogPage in regard of specifications
*/
import {waitFor} from "@testing-library/react";
import {defaultProps, propsWithMockSendTestEmail} from "./SendTestMailDialog.test.data";
import SendTestMailDialogPage from "./SendTestMailDialog.test.page";
import {enableFetchMocks} from "jest-fetch-mock";
beforeEach(() => {
jest.resetModules();
enableFetchMocks();
});
describe("SendTestMailDialog", () => {
it('As a signed-in administrator on the “Send test email” dialog, I cannot edit the form when I click on the “Send” button', async() => {
expect.assertions(1);
const props = propsWithMockSendTestEmail();
let promiseResolve = null;
props.adminSmtpSettingsContext.sendTestMailTo.mockImplementation(() => new Promise(resolve => {
promiseResolve = resolve;
}));
const page = new SendTestMailDialogPage(props);
await waitFor(() => {});
await page.setFormWith({
recipient: "test@passbolt.com"
});
await page.sendTestEmail();
expect(page.recipient.disabled).toBeTruthy();
promiseResolve();
});
it('As a signed-in administrator on the “Send test email” dialog, I cannot send the test email when the form does not validate', async() => {
expect.assertions(1);
const page = new SendTestMailDialogPage(defaultProps());
await waitFor(() => {});
await page.setFormWith({
recipient: "invalid email input"
});
await page.clickOn(page.submitButton, () => true);
expect(page.recipient_error.textContent).toBe("Recipient must be a valid email");
});
it('As a signed-in administrator on the “Send test email” dialog, I can see the “Email sent” dialog when the test email was successfully sent', async() => {
expect.assertions(1);
const props = propsWithMockSendTestEmail();
props.adminSmtpSettingsContext.sendTestMailTo.mockImplementation(async() => ({debug: [{message: "everything is fine"}]}));
const page = new SendTestMailDialogPage(props);
await waitFor(() => {});
await page.setFormWith({
recipient: "test@passbolt.com"
});
await page.sendTestEmail();
expect(page.title.textContent).toBe("Email sent");
});
it('As a signed-in administrator on the “Email sent” dialog, I can see the logs', async() => {
expect.assertions(3);
const debugMessage = {debug: [{message: "everything is fine"}]};
const props = propsWithMockSendTestEmail();
props.adminSmtpSettingsContext.sendTestMailTo.mockImplementation(async() => debugMessage);
const page = new SendTestMailDialogPage(props);
await waitFor(() => {});
await page.setFormWith({
recipient: "test@passbolt.com"
});
await page.sendTestEmail();
expect(page.title.textContent).toBe("Email sent");
expect(page.logs).toBeTruthy();
await page.clickOnLogs();
expect(page.logDetails.value).toBe(JSON.stringify(debugMessage.debug, null, 4));
});
it('As a signed-in administrator on the “Send test email” dialog, I can see the “Something went wrong!” dialog when the test email could not be sent ', async() => {
expect.assertions(1);
const props = propsWithMockSendTestEmail();
props.adminSmtpSettingsContext.sendTestMailTo.mockImplementation(async() => {
const error = new Error("Something didn't happen very well!");
error.body = {
debug: [{
message: "test"
}]
};
throw error;
});
const page = new SendTestMailDialogPage(props);
await waitFor(() => {});
await page.setFormWith({
recipient: "test@passbolt.com"
});
await page.sendTestEmail();
expect(page.title.textContent).toBe("Something went wrong!");
});
it('As a signed-in administrator on the “Something went wrong!” dialog, I can see the FAQ help webpage when I click on the link in the message', async() => {
expect.assertions(2);
const props = propsWithMockSendTestEmail();
props.adminSmtpSettingsContext.sendTestMailTo.mockImplementation(async() => {
const error = new Error("Something didn't happen very well!");
error.body = {
debug: [{
message: "test"
}]
};
throw error;
});
const page = new SendTestMailDialogPage(props);
await waitFor(() => {});
await page.setFormWith({
recipient: "test@passbolt.com"
});
await page.sendTestEmail();
expect(page.faqButton).toBeTruthy();
expect(page.faqButton.getAttribute("rel")).toBe("noopener noreferrer");
});
it('As a signed-in administrator on the “Something went wrong!” dialog, I can see the logs', async() => {
expect.assertions(3);
const props = propsWithMockSendTestEmail();
const debugMessage = "Something didn't happen very well!";
props.adminSmtpSettingsContext.sendTestMailTo.mockImplementation(async() => {
throw new Error(debugMessage);
});
const page = new SendTestMailDialogPage(props);
await waitFor(() => {});
await page.setFormWith({
recipient: "test@passbolt.com"
});
await page.sendTestEmail();
expect(page.title.textContent).toBe("Something went wrong!");
expect(page.logs).toBeTruthy();
expect(page.logDetails.value).toBe(JSON.stringify(debugMessage, null, 4));
});
it('As a signed-in administrator on the “Something went wrong!” dialog, I can retry to send an test email', async() => {
expect.assertions(2);
const props = propsWithMockSendTestEmail();
const debugMessage = "Something didn't happen very well!";
props.adminSmtpSettingsContext.sendTestMailTo.mockImplementation(async() => {
throw new Error(debugMessage);
});
const page = new SendTestMailDialogPage(props);
await waitFor(() => {});
await page.setFormWith({
recipient: "test@passbolt.com"
});
await page.sendTestEmail();
expect(page.title.textContent).toBe("Something went wrong!");
await page.retry();
expect(page.title.textContent).toBe("Send test email");
});
it('As a signed-in administrator on the “Email sent” dialog, I can retry to send an test email', async() => {
expect.assertions(2);
const debugMessage = {debug: [{message: "everything is fine"}]};
const props = propsWithMockSendTestEmail();
props.adminSmtpSettingsContext.sendTestMailTo.mockImplementation(async() => debugMessage);
const page = new SendTestMailDialogPage(props);
await waitFor(() => {});
await page.setFormWith({
recipient: "test@passbolt.com"
});
await page.sendTestEmail();
expect(page.title.textContent).toBe("Email sent");
await page.retry();
expect(page.title.textContent).toBe("Send test email");
});
});