import { makeAppObjectRepo } from "@vived/core";
import { AppDispatcher } from "../Entities/AppDispatcher";
import { ShowConfirmUC, makeShowConfirmUC, } from "./ShowConfirmUC";
class MockDispatcher extends AppDispatcher {
    constructor() {
        super(...arguments);
        this.dispatch = jest.fn();
        this.formRequestAndDispatch = jest.fn();
    }
}
function makeTestRig() {
    const appObjects = makeAppObjectRepo();
    const dispatcher = appObjects.getOrCreate("Dispatcher");
    const mockDispatcher = new MockDispatcher(dispatcher, AppDispatcher.type);
    const uc = makeShowConfirmUC(dispatcher);
    return { uc, dispatcher, appObjects, mockDispatcher };
}
describe("Dispatch Show Confirm", () => {
    it("Gets the UC", () => {
        const { uc, appObjects } = makeTestRig();
        expect(ShowConfirmUC.get(appObjects)).toEqual(uc);
    });
    it("Dispatches the correct type", () => {
        const { uc, mockDispatcher } = makeTestRig();
        const spy = jest.spyOn(mockDispatcher, "formRequestAndDispatch");
        const confirmCB = jest.fn();
        const cancelCB = jest.fn();
        const confirmDTO = {
            confirmButtonLabel: "Confirm Button",
            confirmCallback: confirmCB,
            cancelButtonLabel: "Cancel Button",
            cancelCallback: cancelCB,
            message: "A Message",
            title: "A Title",
        };
        uc.showConfirm(confirmDTO);
        expect(spy).toHaveBeenCalledTimes(1);
        expect(spy.mock.calls[0][0]).toEqual(uc.requestType);
    });
    it("Dispatches the correct version", () => {
        const { uc, mockDispatcher } = makeTestRig();
        const spy = jest.spyOn(mockDispatcher, "formRequestAndDispatch");
        const confirmCB = jest.fn();
        const cancelCB = jest.fn();
        const confirmDTO = {
            confirmButtonLabel: "Confirm Button",
            confirmCallback: confirmCB,
            cancelButtonLabel: "Cancel Button",
            cancelCallback: cancelCB,
            message: "A Message",
            title: "A Title",
        };
        uc.showConfirm(confirmDTO);
        expect(spy).toHaveBeenCalledTimes(1);
        expect(spy.mock.calls[0][1]).toEqual(1);
    });
    it("Dispatches the correct payload", () => {
        const { uc, mockDispatcher } = makeTestRig();
        const spy = jest.spyOn(mockDispatcher, "formRequestAndDispatch");
        const confirmCB = jest.fn();
        const cancelCB = jest.fn();
        const confirmDTO = {
            confirmButtonLabel: "Confirm Button",
            confirmCallback: confirmCB,
            cancelButtonLabel: "Cancel Button",
            cancelCallback: cancelCB,
            message: "A Message",
            title: "A Title",
        };
        uc.showConfirm(confirmDTO);
        expect(spy).toHaveBeenCalledTimes(1);
        expect(spy.mock.calls[0][2]).toEqual(confirmDTO);
    });
});
//# sourceMappingURL=ShowConfirmUC.test.js.map