"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const core_1 = require("@vived/core");
const MockDispatcher_1 = require("../Mocks/MockDispatcher");
const GetAssetsForOwnerUC_1 = require("./GetAssetsForOwnerUC");
function makeTestRig() {
    const appObjects = (0, core_1.makeAppObjectRepo)();
    const appObject = appObjects.getOrCreate("Dispatcher");
    const mockDispatcher = new MockDispatcher_1.MockDispatcher(appObject);
    const uc = (0, GetAssetsForOwnerUC_1.makeGetAssetsForOwnerUC)(appObject);
    return { uc, dispatcher: appObject, appObjects, mockDispatcher };
}
describe("Get Linked Assets UC", () => {
    it("Gets the UC", () => {
        const { uc, appObjects } = makeTestRig();
        expect(GetAssetsForOwnerUC_1.GetAssetsForOwnerUC.get(appObjects)).toEqual(uc);
    });
    it("Finds and dispatches to the UC", async () => {
        const { appObjects, uc } = makeTestRig();
        uc.doDispatch = jest.fn();
        await (0, GetAssetsForOwnerUC_1.getAssetsForOwner)("asset1", appObjects);
        expect(uc.doDispatch).toHaveBeenCalledWith("asset1");
    });
    it("Dispatches the correct type", () => {
        const { uc, mockDispatcher } = makeTestRig();
        uc.doDispatch("asset1");
        expect(mockDispatcher.formRequestAndDispatch).toHaveBeenCalledTimes(1);
        expect(mockDispatcher.formRequestAndDispatch.mock.calls[0][0]).toEqual("GET_ASSET_FOR_OWNER");
    });
    it("Dispatches the correct version", () => {
        const { uc, mockDispatcher } = makeTestRig();
        uc.doDispatch("asset1");
        expect(mockDispatcher.formRequestAndDispatch).toHaveBeenCalledTimes(1);
        expect(mockDispatcher.formRequestAndDispatch.mock.calls[0][1]).toEqual(1);
    });
    it("Dispatches a payload", () => {
        const { uc, mockDispatcher } = makeTestRig();
        uc.doDispatch("asset1");
        expect(mockDispatcher.formRequestAndDispatch).toHaveBeenCalledTimes(1);
        const payload = mockDispatcher.formRequestAndDispatch.mock.calls[0][2];
        expect(payload).not.toBeUndefined();
    });
    it("Dispatches resolves with some meta", async () => {
        const { uc, mockDispatcher } = makeTestRig();
        const dispatcher = mockDispatcher;
        const mockMeta = {
            id: "anID",
            name: "a name",
            description: "a desc",
        };
        dispatcher.formRequestAndDispatch = (type, version, payload) => {
            if (!payload)
                return;
            const cb = payload.callback;
            if (!cb)
                return;
            cb([mockMeta]);
        };
        const meta = await uc.doDispatch("asset1");
        expect(meta).toEqual([mockMeta]);
    });
});
//# sourceMappingURL=GetAssetsForOwnerUC.test.js.map