;
}
export interface PopupProps {
diff --git a/src/tests/TestPopupUsesIsOpen/TestPopupUsesIsOpen.tsx b/src/tests/TestPopupUsesIsOpen/TestPopupUsesIsOpen.tsx
index e5ae1fe..0a0c7e3 100644
--- a/src/tests/TestPopupUsesIsOpen/TestPopupUsesIsOpen.tsx
+++ b/src/tests/TestPopupUsesIsOpen/TestPopupUsesIsOpen.tsx
@@ -4,12 +4,13 @@ import {PopupProps} from '../../popupsDef';
interface TestPopupUsesIsOpen extends PopupProps {
content?: string;
dataHook?: string;
+ overrideCloseArgs?: any[];
}
export const generateDataHook = (index = 0) => `test-popup-${index}`;
export const TestPopupUsesIsOpen = (props: TestPopupUsesIsOpen) => (
{props.content}
-
);
diff --git a/src/tests/specs/testPopups.response.spec.tsx b/src/tests/specs/testPopups.response.spec.tsx
new file mode 100644
index 0000000..2f17dd3
--- /dev/null
+++ b/src/tests/specs/testPopups.response.spec.tsx
@@ -0,0 +1,177 @@
+import * as React from 'react';
+import {generateDataHook, TestPopupUsesIsOpen} from "../TestPopupUsesIsOpen/TestPopupUsesIsOpen";
+import {PopupManager} from "../../popupManager";
+import {TestPopupsDriver} from "../TestPopups.driver";
+
+describe('testPopups - "response" ', () => {
+ let driver: TestPopupsDriver;
+ const buttonOpenDataHook = 'button-open';
+
+ it('should return "response" of consumer\'s "onClose" override with SYNCHRONOUS function', async () => {
+ const popupManager = new PopupManager();
+ let responsePromise: Promise;
+ const expectedResponse = 'expectedResponseForOnCloseOverride';
+ const onClick = () => {
+ const {response} = popupManager.open(TestPopupUsesIsOpen, {
+ onClose: () => {
+ return expectedResponse;
+ }
+ });
+ responsePromise = response;
+ }
+
+ const testedComponent = () => (
+
+
+
+ );
+
+ driver = new TestPopupsDriver();
+ driver.given.component(testedComponent).given.popupManager(popupManager);
+ driver.when.create();
+
+ driver.when.inGivenComponent.clickOn(buttonOpenDataHook);
+
+ expect(driver.get.isPopupOpen()).toBe(true);
+ driver.get.popupDriver(generateDataHook()).when.closePopup();
+ expect(driver.get.popupDriver(generateDataHook()).get.isOpen()).toBe(false);
+ expect(await responsePromise).toBe(expectedResponse);
+ });
+
+ it('should return "response" of consumer\'s "onClose" override with ASYNCHRONOUS function', async () => {
+ const popupManager = new PopupManager();
+ let responsePromise: Promise;
+ const expectedResponse = 'expectedResponseForOnCloseOverride';
+ const onClick = () => {
+ const {response} = popupManager.open(TestPopupUsesIsOpen, {
+ onClose: () => {
+ return new Promise(resolve => setTimeout(() => resolve(expectedResponse), 100));
+ }
+ });
+ responsePromise = response;
+ }
+
+ const testedComponent = () => (
+
+
+
+ );
+
+ driver = new TestPopupsDriver();
+ driver.given.component(testedComponent).given.popupManager(popupManager);
+ driver.when.create();
+
+ driver.when.inGivenComponent.clickOn(buttonOpenDataHook);
+
+ expect(driver.get.isPopupOpen()).toBe(true);
+ driver.get.popupDriver(generateDataHook()).when.closePopup();
+ expect(driver.get.popupDriver(generateDataHook()).get.isOpen()).toBe(false);
+ expect(await responsePromise).toBe(expectedResponse);
+ });
+
+ it('should return arguments that modal\'s onClose sent, and that hasn\'t received "onClose" override', async () => {
+ const buttonOpenDataHook = 'button-open';
+ const popupManager = new PopupManager();
+ let responsePromise: Promise;
+ const expectedResponse = ['modalResponse', false, -22];
+ const onClick = () => {
+ const {response} = popupManager.open(TestPopupUsesIsOpen, {overrideCloseArgs: expectedResponse});
+ responsePromise = response;
+ }
+
+ const testedComponent = () => (
+
+
+
+ );
+
+ driver = new TestPopupsDriver();
+ driver.given.component(testedComponent).given.popupManager(popupManager);
+ driver.when.create();
+
+ driver.when.inGivenComponent.clickOn(buttonOpenDataHook);
+
+ expect(driver.get.isPopupOpen()).toBe(true);
+ driver.get.popupDriver(generateDataHook()).when.closePopup();
+ expect(driver.get.popupDriver(generateDataHook()).get.isOpen()).toBe(false);
+ expect(await responsePromise).toEqual(expectedResponse);
+ });
+
+ it('should return NOTHING when when modal\'s onClose called with not arguments', async () => {
+ const buttonOpenDataHook = 'button-open';
+ const popupManager = new PopupManager();
+ let responsePromise: Promise;
+ const onClick = () => {
+ const {response} = popupManager.open(TestPopupUsesIsOpen, {overrideCloseArgs: null});
+ responsePromise = response;
+ }
+
+ const testedComponent = () => (
+
+
+
+ );
+
+ driver = new TestPopupsDriver();
+ driver.given.component(testedComponent).given.popupManager(popupManager);
+ driver.when.create();
+
+ driver.when.inGivenComponent.clickOn(buttonOpenDataHook);
+
+ expect(driver.get.isPopupOpen()).toBe(true);
+ driver.get.popupDriver(generateDataHook()).when.closePopup();
+ expect(driver.get.popupDriver(generateDataHook()).get.isOpen()).toBe(false);
+ expect(await responsePromise).toBe(undefined);
+ });
+
+
+ it('should return exception when "onClose" has inner promise that is thrown', async () => {
+ const popupManager = new PopupManager();
+ let responsePromise: Promise;
+ const expectedError = 'Error in onClose';
+ const onClick = () => {
+ const {response} = popupManager.open(TestPopupUsesIsOpen, {
+ onClose: async () => {
+ await new Promise(() => {
+ throw new Error(expectedError)
+ })
+
+ }
+ });
+ responsePromise = response;
+ }
+
+ const testedComponent = () => (
+
+
+
+ );
+
+ driver = new TestPopupsDriver();
+ driver.given.component(testedComponent).given.popupManager(popupManager);
+ driver.when.create();
+
+ driver.when.inGivenComponent.clickOn(buttonOpenDataHook);
+
+ expect(driver.get.isPopupOpen()).toBe(true);
+ driver.get.popupDriver(generateDataHook()).when.closePopup();
+ expect(driver.get.popupDriver(generateDataHook()).get.isOpen()).toBe(false);
+ await expect(responsePromise).rejects.toThrow(expectedError);
+ });
+ }
+);
\ No newline at end of file
diff --git a/src/tests/testPopups.spec.tsx b/src/tests/specs/testPopups.spec.tsx
similarity index 96%
rename from src/tests/testPopups.spec.tsx
rename to src/tests/specs/testPopups.spec.tsx
index 474d8f1..22f34af 100644
--- a/src/tests/testPopups.spec.tsx
+++ b/src/tests/specs/testPopups.spec.tsx
@@ -1,11 +1,11 @@
-import {TestPopupsDriver} from './TestPopups.driver';
-import {TestPopupsManager} from './testPopupsManager';
+import {TestPopupsDriver} from '../TestPopups.driver';
+import {TestPopupsManager} from '../testPopupsManager';
import * as React from 'react';
-import {generateDataHook, TestPopupUsesIsOpen} from "./TestPopupUsesIsOpen/TestPopupUsesIsOpen";
-import {PopupManager, PopupProps} from '../index';
-import {usePopupManager} from '../index';
+import {generateDataHook, TestPopupUsesIsOpen} from "../TestPopupUsesIsOpen/TestPopupUsesIsOpen";
+import {PopupManager, PopupProps} from '../../index';
+import {usePopupManager} from '../../index';
import {useEffect} from "react";
-import {getByDataHook} from "./getByDataHook";
+import {getByDataHook} from "../getByDataHook";
describe('Popups', () => {
let driver: TestPopupsDriver;
@@ -170,13 +170,14 @@ describe('Popups', () => {
it('should close popup with params', () => {
const onClose = jest.fn();
+ const expectedArgs = ['value', true, 1];
justBeforeEachTest({popupManager: new TestPopupsManager()});
- (popupManager as TestPopupsManager).openTestPopup(generateDataHook(), onClose);
+ (popupManager as TestPopupsManager).openTestPopup(generateDataHook(), onClose, '', expectedArgs);
driver.update();
driver.get.popupDriver(generateDataHook()).when.closePopup();
expect(driver.get.popupDriver(generateDataHook()).get.isOpen()).toBe(false);
- expect(onClose).toHaveBeenCalledWith('value', true, 1);
+ expect(onClose).toHaveBeenCalledWith(...expectedArgs);
});
it('should pass popup its own props', () => {
diff --git a/src/tests/testPopupsManager.ts b/src/tests/testPopupsManager.ts
index 655ca69..3d5e81f 100644
--- a/src/tests/testPopupsManager.ts
+++ b/src/tests/testPopupsManager.ts
@@ -3,7 +3,7 @@ import { TestPopupUsesIsOpen } from './TestPopupUsesIsOpen/TestPopupUsesIsOpen'
import {popupInstance} from '../popupsDef';
export class TestPopupsManager extends PopupManager {
- public openTestPopup(dataHook: string, onClose?: () => void, content?: string): popupInstance {
- return this.open(TestPopupUsesIsOpen, { onClose, content, dataHook });
+ public openTestPopup(dataHook: string, onClose?: () => void, content?: string, overrideCloseArgs?: any[]): popupInstance {
+ return this.open(TestPopupUsesIsOpen, { onClose, content, dataHook , overrideCloseArgs});
}
}