"use strict";
// SPDX-License-Identifier: Apache-2.0
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const ts_jest_1 = require("@golevelup/ts-jest");
const request_1 = require("../../request");
const DataFixture_1 = require("../../../../../__tests__/fixtures/shared/DataFixture");
const LogService_1 = __importDefault(require("../../../../app/service/log/LogService"));
const ValidatedArgs_1 = __importDefault(require("../../../../core/validation/ValidatedArgs"));
const ValidationError_1 = require("../../../../core/validation/ValidationError");
const Security_1 = __importDefault(require("../../../in/security/Security"));
const HoldFixture_1 = require("../../../../../__tests__/fixtures/hold/HoldFixture");
const CreateHoldByPartitionCommand_1 = require("../../../../app/usecase/command/security/operations/hold/createHoldByPartition/CreateHoldByPartitionCommand");
const CreateHoldFromByPartitionCommand_1 = require("../../../../app/usecase/command/security/operations/hold/createHoldFromByPartition/CreateHoldFromByPartitionCommand");
const ControllerCreateHoldByPartitionCommand_1 = require("../../../../app/usecase/command/security/operations/hold/controllerCreateHoldByPartition/ControllerCreateHoldByPartitionCommand");
const ProtectedCreateHoldByPartitionCommand_1 = require("../../../../app/usecase/command/security/operations/hold/protectedCreateHoldByPartition/ProtectedCreateHoldByPartitionCommand");
const GetHeldAmountForQuery_1 = require("../../../../app/usecase/query/security/hold/getHeldAmountFor/GetHeldAmountForQuery");
const GetHeldAmountForByPartitionQuery_1 = require("../../../../app/usecase/query/security/hold/getHeldAmountForByPartition/GetHeldAmountForByPartitionQuery");
const GetHoldCountForByPartitionQuery_1 = require("../../../../app/usecase/query/security/hold/getHoldCountForByPartition/GetHoldCountForByPartitionQuery");
const GetHoldsIdForByPartitionQuery_1 = require("../../../../app/usecase/query/security/hold/getHoldsIdForByPartition/GetHoldsIdForByPartitionQuery");
const GetHoldForByPartitionQuery_1 = require("../../../../app/usecase/query/security/hold/getHoldForByPartition/GetHoldForByPartitionQuery");
const SecurityDate_1 = require("../../../../domain/context/shared/SecurityDate");
const ReleaseHoldByPartitionCommand_1 = require("../../../../app/usecase/command/security/operations/hold/releaseHoldByPartition/ReleaseHoldByPartitionCommand");
const ReclaimHoldByPartitionCommand_1 = require("../../../../app/usecase/command/security/operations/hold/reclaimHoldByPartition/ReclaimHoldByPartitionCommand");
const ExecuteHoldByPartitionCommand_1 = require("../../../../app/usecase/command/security/operations/hold/executeHoldByPartition/ExecuteHoldByPartitionCommand");
describe("Hold", () => {
    let commandBusMock;
    let queryBusMock;
    let mirrorNodeMock;
    let createHoldByPartitionRequest;
    let createHoldFromByPartitionRequest;
    let controllerCreateHoldByPartitionRequest;
    let protectedCreateHoldByPartitionRequest;
    let getHeldAmountForRequest;
    let getHeldAmountForByPartitionRequest;
    let getHoldCountForByPartitionRequest;
    let getHoldsIdForByPartitionRequest;
    let getHoldForByPartitionRequest;
    let releaseHoldByPartitionRequest;
    let reclaimHoldByPartitionRequest;
    let executeHoldByPartitionRequest;
    let handleValidationSpy;
    const transactionId = DataFixture_1.TransactionIdFixture.create().id;
    beforeEach(() => {
        commandBusMock = (0, ts_jest_1.createMock)();
        queryBusMock = (0, ts_jest_1.createMock)();
        mirrorNodeMock = (0, ts_jest_1.createMock)();
        handleValidationSpy = jest.spyOn(ValidatedArgs_1.default, "handleValidation");
        jest.spyOn(LogService_1.default, "logError").mockImplementation(() => { });
        Security_1.default.commandBus = commandBusMock;
        Security_1.default.queryBus = queryBusMock;
        Security_1.default.mirrorNode = mirrorNodeMock;
    });
    afterEach(() => {
        jest.resetAllMocks();
        jest.restoreAllMocks();
    });
    describe("createHoldByPartition", () => {
        createHoldByPartitionRequest = new request_1.CreateHoldByPartitionRequest(HoldFixture_1.CreateHoldByPartitionRequestFixture.create());
        const expectedResponse = {
            payload: 1,
            transactionId: transactionId,
        };
        it("should create hold by partition successfully", async () => {
            commandBusMock.execute.mockResolvedValue(expectedResponse);
            const result = await Security_1.default.createHoldByPartition(createHoldByPartitionRequest);
            expect(handleValidationSpy).toHaveBeenCalledWith("CreateHoldByPartitionRequest", createHoldByPartitionRequest);
            expect(commandBusMock.execute).toHaveBeenCalledWith(new CreateHoldByPartitionCommand_1.CreateHoldByPartitionCommand(createHoldByPartitionRequest.securityId, createHoldByPartitionRequest.partitionId, createHoldByPartitionRequest.escrowId, createHoldByPartitionRequest.amount, createHoldByPartitionRequest.targetId, createHoldByPartitionRequest.expirationDate));
            expect(result).toEqual(expectedResponse);
        });
        it("should throw an error if command execution fails", async () => {
            const error = new Error("Command execution failed");
            commandBusMock.execute.mockRejectedValue(error);
            await expect(Security_1.default.createHoldByPartition(createHoldByPartitionRequest)).rejects.toThrow("Command execution failed");
            expect(handleValidationSpy).toHaveBeenCalledWith("CreateHoldByPartitionRequest", createHoldByPartitionRequest);
            expect(commandBusMock.execute).toHaveBeenCalledWith(new CreateHoldByPartitionCommand_1.CreateHoldByPartitionCommand(createHoldByPartitionRequest.securityId, createHoldByPartitionRequest.partitionId, createHoldByPartitionRequest.escrowId, createHoldByPartitionRequest.amount, createHoldByPartitionRequest.targetId, createHoldByPartitionRequest.expirationDate));
        });
        it("should throw error if securityId is invalid", async () => {
            createHoldByPartitionRequest = new request_1.CreateHoldByPartitionRequest({
                ...HoldFixture_1.CreateHoldByPartitionRequestFixture.create({
                    securityId: "invalid",
                }),
            });
            await expect(Security_1.default.createHoldByPartition(createHoldByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if partitionId is invalid", async () => {
            createHoldByPartitionRequest = new request_1.CreateHoldByPartitionRequest({
                ...HoldFixture_1.CreateHoldByPartitionRequestFixture.create({
                    partitionId: "invalid",
                }),
            });
            await expect(Security_1.default.createHoldByPartition(createHoldByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if amount is invalid", async () => {
            createHoldByPartitionRequest = new request_1.CreateHoldByPartitionRequest({
                ...HoldFixture_1.CreateHoldByPartitionRequestFixture.create({
                    amount: "invalid",
                }),
            });
            await expect(Security_1.default.createHoldByPartition(createHoldByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if escrowId is invalid", async () => {
            createHoldByPartitionRequest = new request_1.CreateHoldByPartitionRequest({
                ...HoldFixture_1.CreateHoldByPartitionRequestFixture.create({
                    escrowId: "invalid",
                }),
            });
            await expect(Security_1.default.createHoldByPartition(createHoldByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if expirationDate is invalid", async () => {
            createHoldByPartitionRequest = new request_1.CreateHoldByPartitionRequest({
                ...HoldFixture_1.CreateHoldByPartitionRequestFixture.create({
                    expirationDate: (Math.ceil(new Date().getTime() / 1000) - 100).toString(),
                }),
            });
            await expect(Security_1.default.createHoldByPartition(createHoldByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
    });
    describe("createHoldFromByPartition", () => {
        createHoldFromByPartitionRequest = new request_1.CreateHoldFromByPartitionRequest(HoldFixture_1.CreateHoldFromByPartitionRequestFixture.create());
        const expectedResponse = {
            payload: 1,
            transactionId: transactionId,
        };
        it("should create hold from by partition successfully", async () => {
            commandBusMock.execute.mockResolvedValue(expectedResponse);
            const result = await Security_1.default.createHoldFromByPartition(createHoldFromByPartitionRequest);
            expect(handleValidationSpy).toHaveBeenCalledWith("CreateHoldFromByPartitionRequest", createHoldFromByPartitionRequest);
            expect(commandBusMock.execute).toHaveBeenCalledWith(new CreateHoldFromByPartitionCommand_1.CreateHoldFromByPartitionCommand(createHoldFromByPartitionRequest.securityId, createHoldFromByPartitionRequest.partitionId, createHoldFromByPartitionRequest.escrowId, createHoldFromByPartitionRequest.amount, createHoldFromByPartitionRequest.sourceId, createHoldFromByPartitionRequest.targetId, createHoldFromByPartitionRequest.expirationDate));
            expect(result).toEqual(expectedResponse);
        });
        it("should throw an error if command execution fails", async () => {
            const error = new Error("Command execution failed");
            commandBusMock.execute.mockRejectedValue(error);
            await expect(Security_1.default.createHoldFromByPartition(createHoldFromByPartitionRequest)).rejects.toThrow("Command execution failed");
            expect(handleValidationSpy).toHaveBeenCalledWith("CreateHoldFromByPartitionRequest", createHoldFromByPartitionRequest);
            expect(commandBusMock.execute).toHaveBeenCalledWith(new CreateHoldFromByPartitionCommand_1.CreateHoldFromByPartitionCommand(createHoldFromByPartitionRequest.securityId, createHoldFromByPartitionRequest.partitionId, createHoldFromByPartitionRequest.escrowId, createHoldFromByPartitionRequest.amount, createHoldFromByPartitionRequest.sourceId, createHoldFromByPartitionRequest.targetId, createHoldFromByPartitionRequest.expirationDate));
        });
        it("should throw error if securityId is invalid", async () => {
            createHoldFromByPartitionRequest = new request_1.CreateHoldFromByPartitionRequest({
                ...HoldFixture_1.CreateHoldFromByPartitionRequestFixture.create({
                    securityId: "invalid",
                }),
            });
            await expect(Security_1.default.createHoldFromByPartition(createHoldFromByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if partitionId is invalid", async () => {
            createHoldFromByPartitionRequest = new request_1.CreateHoldFromByPartitionRequest({
                ...HoldFixture_1.CreateHoldFromByPartitionRequestFixture.create({
                    partitionId: "invalid",
                }),
            });
            await expect(Security_1.default.createHoldFromByPartition(createHoldFromByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if amount is invalid", async () => {
            createHoldFromByPartitionRequest = new request_1.CreateHoldFromByPartitionRequest({
                ...HoldFixture_1.CreateHoldFromByPartitionRequestFixture.create({
                    amount: "invalid",
                }),
            });
            await expect(Security_1.default.createHoldFromByPartition(createHoldFromByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if escrowId is invalid", async () => {
            createHoldFromByPartitionRequest = new request_1.CreateHoldFromByPartitionRequest({
                ...HoldFixture_1.CreateHoldFromByPartitionRequestFixture.create({
                    escrowId: "invalid",
                }),
            });
            await expect(Security_1.default.createHoldFromByPartition(createHoldFromByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if sourceId is invalid", async () => {
            createHoldFromByPartitionRequest = new request_1.CreateHoldFromByPartitionRequest({
                ...HoldFixture_1.CreateHoldFromByPartitionRequestFixture.create({
                    sourceId: "invalid",
                }),
            });
            await expect(Security_1.default.createHoldFromByPartition(createHoldFromByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if expirationDate is invalid", async () => {
            createHoldFromByPartitionRequest = new request_1.CreateHoldFromByPartitionRequest({
                ...HoldFixture_1.CreateHoldFromByPartitionRequestFixture.create({
                    expirationDate: (Math.ceil(new Date().getTime() / 1000) - 100).toString(),
                }),
            });
            await expect(Security_1.default.createHoldFromByPartition(createHoldFromByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
    });
    describe("controllerCreateHoldByPartition", () => {
        controllerCreateHoldByPartitionRequest = new request_1.ControllerCreateHoldByPartitionRequest(HoldFixture_1.ControllerCreateHoldByPartitionRequestFixture.create());
        const expectedResponse = {
            payload: 1,
            transactionId: transactionId,
        };
        it("should controller create hold by partition successfully", async () => {
            commandBusMock.execute.mockResolvedValue(expectedResponse);
            const result = await Security_1.default.controllerCreateHoldByPartition(controllerCreateHoldByPartitionRequest);
            expect(handleValidationSpy).toHaveBeenCalledWith("ControllerCreateHoldByPartitionRequest", controllerCreateHoldByPartitionRequest);
            expect(commandBusMock.execute).toHaveBeenCalledWith(new ControllerCreateHoldByPartitionCommand_1.ControllerCreateHoldByPartitionCommand(controllerCreateHoldByPartitionRequest.securityId, controllerCreateHoldByPartitionRequest.partitionId, controllerCreateHoldByPartitionRequest.escrowId, controllerCreateHoldByPartitionRequest.amount, controllerCreateHoldByPartitionRequest.sourceId, controllerCreateHoldByPartitionRequest.targetId, controllerCreateHoldByPartitionRequest.expirationDate));
            expect(result).toEqual(expectedResponse);
        });
        it("should throw an error if command execution fails", async () => {
            const error = new Error("Command execution failed");
            commandBusMock.execute.mockRejectedValue(error);
            await expect(Security_1.default.controllerCreateHoldByPartition(controllerCreateHoldByPartitionRequest)).rejects.toThrow("Command execution failed");
            expect(handleValidationSpy).toHaveBeenCalledWith("ControllerCreateHoldByPartitionRequest", controllerCreateHoldByPartitionRequest);
            expect(commandBusMock.execute).toHaveBeenCalledWith(new ControllerCreateHoldByPartitionCommand_1.ControllerCreateHoldByPartitionCommand(controllerCreateHoldByPartitionRequest.securityId, controllerCreateHoldByPartitionRequest.partitionId, controllerCreateHoldByPartitionRequest.escrowId, controllerCreateHoldByPartitionRequest.amount, controllerCreateHoldByPartitionRequest.sourceId, controllerCreateHoldByPartitionRequest.targetId, controllerCreateHoldByPartitionRequest.expirationDate));
        });
        it("should throw error if securityId is invalid", async () => {
            controllerCreateHoldByPartitionRequest = new request_1.ControllerCreateHoldByPartitionRequest({
                ...HoldFixture_1.ControllerCreateHoldByPartitionRequestFixture.create({
                    securityId: "invalid",
                }),
            });
            await expect(Security_1.default.controllerCreateHoldByPartition(controllerCreateHoldByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if partitionId is invalid", async () => {
            controllerCreateHoldByPartitionRequest = new request_1.ControllerCreateHoldByPartitionRequest({
                ...HoldFixture_1.ControllerCreateHoldByPartitionRequestFixture.create({
                    partitionId: "invalid",
                }),
            });
            await expect(Security_1.default.controllerCreateHoldByPartition(controllerCreateHoldByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if amount is invalid", async () => {
            controllerCreateHoldByPartitionRequest = new request_1.ControllerCreateHoldByPartitionRequest({
                ...HoldFixture_1.ControllerCreateHoldByPartitionRequestFixture.create({
                    amount: "invalid",
                }),
            });
            await expect(Security_1.default.controllerCreateHoldByPartition(controllerCreateHoldByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if escrowId is invalid", async () => {
            controllerCreateHoldByPartitionRequest = new request_1.ControllerCreateHoldByPartitionRequest({
                ...HoldFixture_1.ControllerCreateHoldByPartitionRequestFixture.create({
                    escrowId: "invalid",
                }),
            });
            await expect(Security_1.default.controllerCreateHoldByPartition(controllerCreateHoldByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if sourceId is invalid", async () => {
            controllerCreateHoldByPartitionRequest = new request_1.ControllerCreateHoldByPartitionRequest({
                ...HoldFixture_1.ControllerCreateHoldByPartitionRequestFixture.create({
                    sourceId: "invalid",
                }),
            });
            await expect(Security_1.default.controllerCreateHoldByPartition(controllerCreateHoldByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if expirationDate is invalid", async () => {
            controllerCreateHoldByPartitionRequest = new request_1.ControllerCreateHoldByPartitionRequest({
                ...HoldFixture_1.ControllerCreateHoldByPartitionRequestFixture.create({
                    expirationDate: (Math.ceil(new Date().getTime() / 1000) - 100).toString(),
                }),
            });
            await expect(Security_1.default.controllerCreateHoldByPartition(controllerCreateHoldByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
    });
    describe("protectedCreateHoldByPartition", () => {
        protectedCreateHoldByPartitionRequest = new request_1.ProtectedCreateHoldByPartitionRequest(HoldFixture_1.ProtectedCreateHoldByPartitionRequestFixture.create());
        const expectedResponse = {
            payload: 1,
            transactionId: transactionId,
        };
        it("should protected create hold by partition successfully", async () => {
            commandBusMock.execute.mockResolvedValue(expectedResponse);
            const result = await Security_1.default.protectedCreateHoldByPartition(protectedCreateHoldByPartitionRequest);
            expect(handleValidationSpy).toHaveBeenCalledWith("ProtectedCreateHoldByPartitionRequest", protectedCreateHoldByPartitionRequest);
            expect(commandBusMock.execute).toHaveBeenCalledWith(new ProtectedCreateHoldByPartitionCommand_1.ProtectedCreateHoldByPartitionCommand(protectedCreateHoldByPartitionRequest.securityId, protectedCreateHoldByPartitionRequest.partitionId, protectedCreateHoldByPartitionRequest.escrowId, protectedCreateHoldByPartitionRequest.amount, protectedCreateHoldByPartitionRequest.sourceId, protectedCreateHoldByPartitionRequest.targetId, protectedCreateHoldByPartitionRequest.expirationDate, protectedCreateHoldByPartitionRequest.deadline, protectedCreateHoldByPartitionRequest.nonce, protectedCreateHoldByPartitionRequest.signature));
            expect(result).toEqual(expectedResponse);
        });
        it("should throw an error if command execution fails", async () => {
            const error = new Error("Command execution failed");
            commandBusMock.execute.mockRejectedValue(error);
            await expect(Security_1.default.protectedCreateHoldByPartition(protectedCreateHoldByPartitionRequest)).rejects.toThrow("Command execution failed");
            expect(handleValidationSpy).toHaveBeenCalledWith("ProtectedCreateHoldByPartitionRequest", protectedCreateHoldByPartitionRequest);
            expect(commandBusMock.execute).toHaveBeenCalledWith(new ProtectedCreateHoldByPartitionCommand_1.ProtectedCreateHoldByPartitionCommand(protectedCreateHoldByPartitionRequest.securityId, protectedCreateHoldByPartitionRequest.partitionId, protectedCreateHoldByPartitionRequest.escrowId, protectedCreateHoldByPartitionRequest.amount, protectedCreateHoldByPartitionRequest.sourceId, protectedCreateHoldByPartitionRequest.targetId, protectedCreateHoldByPartitionRequest.expirationDate, protectedCreateHoldByPartitionRequest.deadline, protectedCreateHoldByPartitionRequest.nonce, protectedCreateHoldByPartitionRequest.signature));
        });
        it("should throw error if securityId is invalid", async () => {
            protectedCreateHoldByPartitionRequest = new request_1.ProtectedCreateHoldByPartitionRequest({
                ...HoldFixture_1.ProtectedCreateHoldByPartitionRequestFixture.create({
                    securityId: "invalid",
                }),
            });
            await expect(Security_1.default.protectedCreateHoldByPartition(protectedCreateHoldByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if partitionId is invalid", async () => {
            protectedCreateHoldByPartitionRequest = new request_1.ProtectedCreateHoldByPartitionRequest({
                ...HoldFixture_1.ProtectedCreateHoldByPartitionRequestFixture.create({
                    partitionId: "invalid",
                }),
            });
            await expect(Security_1.default.protectedCreateHoldByPartition(protectedCreateHoldByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if amount is invalid", async () => {
            protectedCreateHoldByPartitionRequest = new request_1.ProtectedCreateHoldByPartitionRequest({
                ...HoldFixture_1.ProtectedCreateHoldByPartitionRequestFixture.create({
                    amount: "invalid",
                }),
            });
            await expect(Security_1.default.protectedCreateHoldByPartition(protectedCreateHoldByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if escrowId is invalid", async () => {
            protectedCreateHoldByPartitionRequest = new request_1.ProtectedCreateHoldByPartitionRequest({
                ...HoldFixture_1.ProtectedCreateHoldByPartitionRequestFixture.create({
                    escrowId: "invalid",
                }),
            });
            await expect(Security_1.default.protectedCreateHoldByPartition(protectedCreateHoldByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if sourceId is invalid", async () => {
            protectedCreateHoldByPartitionRequest = new request_1.ProtectedCreateHoldByPartitionRequest({
                ...HoldFixture_1.ProtectedCreateHoldByPartitionRequestFixture.create({
                    sourceId: "invalid",
                }),
            });
            await expect(Security_1.default.protectedCreateHoldByPartition(protectedCreateHoldByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if targetId is invalid", async () => {
            protectedCreateHoldByPartitionRequest = new request_1.ProtectedCreateHoldByPartitionRequest({
                ...HoldFixture_1.ProtectedCreateHoldByPartitionRequestFixture.create({
                    targetId: "invalid",
                }),
            });
            await expect(Security_1.default.protectedCreateHoldByPartition(protectedCreateHoldByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if nonce is invalid", async () => {
            protectedCreateHoldByPartitionRequest = new request_1.ProtectedCreateHoldByPartitionRequest({
                ...HoldFixture_1.ProtectedCreateHoldByPartitionRequestFixture.create({
                    nonce: -1,
                }),
            });
            await expect(Security_1.default.protectedCreateHoldByPartition(protectedCreateHoldByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if expirationDate is invalid", async () => {
            protectedCreateHoldByPartitionRequest = new request_1.ProtectedCreateHoldByPartitionRequest({
                ...HoldFixture_1.ProtectedCreateHoldByPartitionRequestFixture.create({
                    expirationDate: (Math.ceil(new Date().getTime() / 1000) - 100).toString(),
                }),
            });
            await expect(Security_1.default.protectedCreateHoldByPartition(protectedCreateHoldByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if deadline is invalid", async () => {
            protectedCreateHoldByPartitionRequest = new request_1.ProtectedCreateHoldByPartitionRequest({
                ...HoldFixture_1.ProtectedCreateHoldByPartitionRequestFixture.create({
                    deadline: (Math.ceil(new Date().getTime() / 1000) - 100).toString(),
                }),
            });
            await expect(Security_1.default.protectedCreateHoldByPartition(protectedCreateHoldByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
    });
    describe("getHeldAmountFor", () => {
        getHeldAmountForRequest = new request_1.GetHeldAmountForRequest(HoldFixture_1.GetHeldAmountForRequestFixture.create());
        const expectedResponse = {
            payload: 1,
        };
        it("should get held amount for successfully", async () => {
            queryBusMock.execute.mockResolvedValue(expectedResponse);
            const result = await Security_1.default.getHeldAmountFor(getHeldAmountForRequest);
            expect(handleValidationSpy).toHaveBeenCalledWith("GetHeldAmountForRequest", getHeldAmountForRequest);
            expect(queryBusMock.execute).toHaveBeenCalledWith(new GetHeldAmountForQuery_1.GetHeldAmountForQuery(getHeldAmountForRequest.securityId, getHeldAmountForRequest.targetId));
            expect(result).toEqual(expectedResponse.payload);
        });
        it("should throw an error if query execution fails", async () => {
            const error = new Error("Query execution failed");
            queryBusMock.execute.mockRejectedValue(error);
            await expect(Security_1.default.getHeldAmountFor(getHeldAmountForRequest)).rejects.toThrow("Query execution failed");
            expect(handleValidationSpy).toHaveBeenCalledWith("GetHeldAmountForRequest", getHeldAmountForRequest);
            expect(queryBusMock.execute).toHaveBeenCalledWith(new GetHeldAmountForQuery_1.GetHeldAmountForQuery(getHeldAmountForRequest.securityId, getHeldAmountForRequest.targetId));
        });
        it("should throw error if securityId is invalid", async () => {
            getHeldAmountForRequest = new request_1.GetHeldAmountForRequest({
                ...HoldFixture_1.GetHeldAmountForRequestFixture.create({
                    securityId: "invalid",
                }),
            });
            await expect(Security_1.default.getHeldAmountFor(getHeldAmountForRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if targetId is invalid", async () => {
            getHeldAmountForRequest = new request_1.GetHeldAmountForRequest({
                ...HoldFixture_1.GetHeldAmountForRequestFixture.create({
                    targetId: "invalid",
                }),
            });
            await expect(Security_1.default.getHeldAmountFor(getHeldAmountForRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
    });
    describe("getHeldAmountForByPartition", () => {
        getHeldAmountForByPartitionRequest = new request_1.GetHeldAmountForByPartitionRequest(HoldFixture_1.GetHeldAmountForByPartitionRequestFixture.create());
        const expectedResponse = {
            payload: 1,
        };
        it("should get held amount for by partition successfully", async () => {
            queryBusMock.execute.mockResolvedValue(expectedResponse);
            const result = await Security_1.default.getHeldAmountForByPartition(getHeldAmountForByPartitionRequest);
            expect(handleValidationSpy).toHaveBeenCalledWith("GetHeldAmountForByPartitionRequest", getHeldAmountForByPartitionRequest);
            expect(queryBusMock.execute).toHaveBeenCalledWith(new GetHeldAmountForByPartitionQuery_1.GetHeldAmountForByPartitionQuery(getHeldAmountForByPartitionRequest.securityId, getHeldAmountForByPartitionRequest.partitionId, getHeldAmountForByPartitionRequest.targetId));
            expect(result).toEqual(expectedResponse.payload);
        });
        it("should throw an error if query execution fails", async () => {
            const error = new Error("Query execution failed");
            queryBusMock.execute.mockRejectedValue(error);
            await expect(Security_1.default.getHeldAmountForByPartition(getHeldAmountForByPartitionRequest)).rejects.toThrow("Query execution failed");
            expect(handleValidationSpy).toHaveBeenCalledWith("GetHeldAmountForByPartitionRequest", getHeldAmountForByPartitionRequest);
            expect(queryBusMock.execute).toHaveBeenCalledWith(new GetHeldAmountForByPartitionQuery_1.GetHeldAmountForByPartitionQuery(getHeldAmountForByPartitionRequest.securityId, getHeldAmountForByPartitionRequest.partitionId, getHeldAmountForByPartitionRequest.targetId));
        });
        it("should throw error if securityId is invalid", async () => {
            getHeldAmountForByPartitionRequest = new request_1.GetHeldAmountForByPartitionRequest({
                ...HoldFixture_1.GetHeldAmountForByPartitionRequestFixture.create({
                    securityId: "invalid",
                }),
            });
            await expect(Security_1.default.getHeldAmountForByPartition(getHeldAmountForByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if targetId is invalid", async () => {
            getHeldAmountForByPartitionRequest = new request_1.GetHeldAmountForByPartitionRequest({
                ...HoldFixture_1.GetHeldAmountForByPartitionRequestFixture.create({
                    targetId: "invalid",
                }),
            });
            await expect(Security_1.default.getHeldAmountForByPartition(getHeldAmountForByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if partitionId is invalid", async () => {
            getHeldAmountForByPartitionRequest = new request_1.GetHeldAmountForByPartitionRequest({
                ...HoldFixture_1.GetHeldAmountForByPartitionRequestFixture.create({
                    partitionId: "invalid",
                }),
            });
            await expect(Security_1.default.getHeldAmountForByPartition(getHeldAmountForByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
    });
    describe("getHoldCountForByPartition", () => {
        getHoldCountForByPartitionRequest = new request_1.GetHoldCountForByPartitionRequest(HoldFixture_1.GetHoldCountForByPartitionRequestFixture.create());
        const expectedResponse = {
            payload: 1,
        };
        it("should get hold count for by partition successfully", async () => {
            queryBusMock.execute.mockResolvedValue(expectedResponse);
            const result = await Security_1.default.getHoldCountForByPartition(getHoldCountForByPartitionRequest);
            expect(handleValidationSpy).toHaveBeenCalledWith("GetHoldCountForByPartitionRequest", getHoldCountForByPartitionRequest);
            expect(queryBusMock.execute).toHaveBeenCalledWith(new GetHoldCountForByPartitionQuery_1.GetHoldCountForByPartitionQuery(getHoldCountForByPartitionRequest.securityId, getHoldCountForByPartitionRequest.partitionId, getHoldCountForByPartitionRequest.targetId));
            expect(result).toEqual(expectedResponse.payload);
        });
        it("should throw an error if query execution fails", async () => {
            const error = new Error("Query execution failed");
            queryBusMock.execute.mockRejectedValue(error);
            await expect(Security_1.default.getHoldCountForByPartition(getHoldCountForByPartitionRequest)).rejects.toThrow("Query execution failed");
            expect(handleValidationSpy).toHaveBeenCalledWith("GetHoldCountForByPartitionRequest", getHoldCountForByPartitionRequest);
            expect(queryBusMock.execute).toHaveBeenCalledWith(new GetHoldCountForByPartitionQuery_1.GetHoldCountForByPartitionQuery(getHoldCountForByPartitionRequest.securityId, getHoldCountForByPartitionRequest.partitionId, getHoldCountForByPartitionRequest.targetId));
        });
        it("should throw error if securityId is invalid", async () => {
            getHoldCountForByPartitionRequest = new request_1.GetHoldCountForByPartitionRequest({
                ...HoldFixture_1.GetHoldCountForByPartitionRequestFixture.create({
                    securityId: "invalid",
                }),
            });
            await expect(Security_1.default.getHoldCountForByPartition(getHoldCountForByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if targetId is invalid", async () => {
            getHoldCountForByPartitionRequest = new request_1.GetHoldCountForByPartitionRequest({
                ...HoldFixture_1.GetHoldCountForByPartitionRequestFixture.create({
                    targetId: "invalid",
                }),
            });
            await expect(Security_1.default.getHoldCountForByPartition(getHoldCountForByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if partitionId is invalid", async () => {
            getHoldCountForByPartitionRequest = new request_1.GetHoldCountForByPartitionRequest({
                ...HoldFixture_1.GetHoldCountForByPartitionRequestFixture.create({
                    partitionId: "invalid",
                }),
            });
            await expect(Security_1.default.getHoldCountForByPartition(getHoldCountForByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
    });
    describe("getHoldsIdForByPartition", () => {
        getHoldsIdForByPartitionRequest = new request_1.GetHoldsIdForByPartitionRequest(HoldFixture_1.GetHoldsIdForByPartitionRequestFixture.create());
        const expectedResponse = {
            payload: [1],
        };
        it("should get holds id for by partition successfully", async () => {
            queryBusMock.execute.mockResolvedValue(expectedResponse);
            const result = await Security_1.default.getHoldsIdForByPartition(getHoldsIdForByPartitionRequest);
            expect(handleValidationSpy).toHaveBeenCalledWith("GetHoldsIdForByPartitionRequest", getHoldsIdForByPartitionRequest);
            expect(queryBusMock.execute).toHaveBeenCalledWith(new GetHoldsIdForByPartitionQuery_1.GetHoldsIdForByPartitionQuery(getHoldsIdForByPartitionRequest.securityId, getHoldsIdForByPartitionRequest.partitionId, getHoldsIdForByPartitionRequest.targetId, getHoldsIdForByPartitionRequest.start, getHoldsIdForByPartitionRequest.end));
            expect(result).toEqual(expectedResponse.payload);
        });
        it("should throw an error if query execution fails", async () => {
            const error = new Error("Query execution failed");
            queryBusMock.execute.mockRejectedValue(error);
            await expect(Security_1.default.getHoldsIdForByPartition(getHoldsIdForByPartitionRequest)).rejects.toThrow("Query execution failed");
            expect(handleValidationSpy).toHaveBeenCalledWith("GetHoldsIdForByPartitionRequest", getHoldsIdForByPartitionRequest);
            expect(queryBusMock.execute).toHaveBeenCalledWith(new GetHoldsIdForByPartitionQuery_1.GetHoldsIdForByPartitionQuery(getHoldsIdForByPartitionRequest.securityId, getHoldsIdForByPartitionRequest.partitionId, getHoldsIdForByPartitionRequest.targetId, getHoldsIdForByPartitionRequest.start, getHoldsIdForByPartitionRequest.end));
        });
        it("should throw error if securityId is invalid", async () => {
            getHoldsIdForByPartitionRequest = new request_1.GetHoldsIdForByPartitionRequest({
                ...HoldFixture_1.GetHoldsIdForByPartitionRequestFixture.create({
                    securityId: "invalid",
                }),
            });
            await expect(Security_1.default.getHoldsIdForByPartition(getHoldsIdForByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if targetId is invalid", async () => {
            getHoldsIdForByPartitionRequest = new request_1.GetHoldsIdForByPartitionRequest({
                ...HoldFixture_1.GetHoldsIdForByPartitionRequestFixture.create({
                    targetId: "invalid",
                }),
            });
            await expect(Security_1.default.getHoldsIdForByPartition(getHoldsIdForByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if partitionId is invalid", async () => {
            getHoldsIdForByPartitionRequest = new request_1.GetHoldsIdForByPartitionRequest({
                ...HoldFixture_1.GetHoldsIdForByPartitionRequestFixture.create({
                    partitionId: "invalid",
                }),
            });
            await expect(Security_1.default.getHoldsIdForByPartition(getHoldsIdForByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if start is invalid", async () => {
            getHoldsIdForByPartitionRequest = new request_1.GetHoldsIdForByPartitionRequest({
                ...HoldFixture_1.GetHoldsIdForByPartitionRequestFixture.create({
                    start: -1,
                }),
            });
            await expect(Security_1.default.getHoldsIdForByPartition(getHoldsIdForByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if end is invalid", async () => {
            getHoldsIdForByPartitionRequest = new request_1.GetHoldsIdForByPartitionRequest({
                ...HoldFixture_1.GetHoldsIdForByPartitionRequestFixture.create({
                    end: -1,
                }),
            });
            await expect(Security_1.default.getHoldsIdForByPartition(getHoldsIdForByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
    });
    describe("getHoldForByPartition", () => {
        getHoldForByPartitionRequest = new request_1.GetHoldForByPartitionRequest(HoldFixture_1.GetHoldForByPartitionRequestFixture.create());
        const expectedResponse = {
            payload: HoldFixture_1.HoldDetailsFixture.create(),
        };
        it("should get hold for by partition successfully", async () => {
            queryBusMock.execute.mockResolvedValue(expectedResponse);
            const result = await Security_1.default.getHoldForByPartition(getHoldForByPartitionRequest);
            expect(handleValidationSpy).toHaveBeenCalledWith("GetHoldForByPartitionRequest", getHoldForByPartitionRequest);
            expect(queryBusMock.execute).toHaveBeenCalledWith(new GetHoldForByPartitionQuery_1.GetHoldForByPartitionQuery(getHoldForByPartitionRequest.securityId, getHoldForByPartitionRequest.partitionId, getHoldForByPartitionRequest.targetId, getHoldForByPartitionRequest.holdId));
            expect(result).toEqual(expect.objectContaining({
                id: getHoldForByPartitionRequest.holdId,
                amount: expectedResponse.payload.amount.toString(),
                expirationDate: new Date(expectedResponse.payload.expirationTimeStamp * SecurityDate_1.ONE_THOUSAND),
                tokenHolderAddress: expectedResponse.payload.tokenHolderAddress,
                escrowAddress: expectedResponse.payload.escrowAddress,
                destinationAddress: expectedResponse.payload.destinationAddress,
                data: expectedResponse.payload.data,
                operatorData: expectedResponse.payload.operatorData,
            }));
        });
        it("should throw an error if query execution fails", async () => {
            const error = new Error("Query execution failed");
            queryBusMock.execute.mockRejectedValue(error);
            await expect(Security_1.default.getHoldForByPartition(getHoldForByPartitionRequest)).rejects.toThrow("Query execution failed");
            expect(handleValidationSpy).toHaveBeenCalledWith("GetHoldForByPartitionRequest", getHoldForByPartitionRequest);
            expect(queryBusMock.execute).toHaveBeenCalledWith(new GetHoldForByPartitionQuery_1.GetHoldForByPartitionQuery(getHoldForByPartitionRequest.securityId, getHoldForByPartitionRequest.partitionId, getHoldForByPartitionRequest.targetId, getHoldForByPartitionRequest.holdId));
        });
        it("should throw error if securityId is invalid", async () => {
            getHoldForByPartitionRequest = new request_1.GetHoldForByPartitionRequest({
                ...HoldFixture_1.GetHoldForByPartitionRequestFixture.create({
                    securityId: "invalid",
                }),
            });
            await expect(Security_1.default.getHoldForByPartition(getHoldForByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if targetId is invalid", async () => {
            getHoldForByPartitionRequest = new request_1.GetHoldForByPartitionRequest({
                ...HoldFixture_1.GetHoldForByPartitionRequestFixture.create({
                    targetId: "invalid",
                }),
            });
            await expect(Security_1.default.getHoldForByPartition(getHoldForByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if partitionId is invalid", async () => {
            getHoldForByPartitionRequest = new request_1.GetHoldForByPartitionRequest({
                ...HoldFixture_1.GetHoldForByPartitionRequestFixture.create({
                    partitionId: "invalid",
                }),
            });
            await expect(Security_1.default.getHoldForByPartition(getHoldForByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
    });
    describe("releaseHoldByPartition", () => {
        releaseHoldByPartitionRequest = new request_1.ReleaseHoldByPartitionRequest(HoldFixture_1.ReleaseHoldByPartitionRequestFixture.create());
        const expectedResponse = {
            payload: true,
            transactionId: transactionId,
        };
        it("should release hold by partition successfully", async () => {
            commandBusMock.execute.mockResolvedValue(expectedResponse);
            const result = await Security_1.default.releaseHoldByPartition(releaseHoldByPartitionRequest);
            expect(handleValidationSpy).toHaveBeenCalledWith("ReleaseHoldByPartitionRequest", releaseHoldByPartitionRequest);
            expect(commandBusMock.execute).toHaveBeenCalledWith(new ReleaseHoldByPartitionCommand_1.ReleaseHoldByPartitionCommand(releaseHoldByPartitionRequest.securityId, releaseHoldByPartitionRequest.partitionId, releaseHoldByPartitionRequest.amount, releaseHoldByPartitionRequest.holdId, releaseHoldByPartitionRequest.targetId));
            expect(result).toEqual(expectedResponse);
        });
        it("should throw an error if command execution fails", async () => {
            const error = new Error("Command execution failed");
            commandBusMock.execute.mockRejectedValue(error);
            await expect(Security_1.default.releaseHoldByPartition(releaseHoldByPartitionRequest)).rejects.toThrow("Command execution failed");
            expect(handleValidationSpy).toHaveBeenCalledWith("ReleaseHoldByPartitionRequest", releaseHoldByPartitionRequest);
            expect(commandBusMock.execute).toHaveBeenCalledWith(new ReleaseHoldByPartitionCommand_1.ReleaseHoldByPartitionCommand(releaseHoldByPartitionRequest.securityId, releaseHoldByPartitionRequest.partitionId, releaseHoldByPartitionRequest.amount, releaseHoldByPartitionRequest.holdId, releaseHoldByPartitionRequest.targetId));
        });
        it("should throw error if securityId is invalid", async () => {
            releaseHoldByPartitionRequest = new request_1.ReleaseHoldByPartitionRequest({
                ...HoldFixture_1.ReleaseHoldByPartitionRequestFixture.create({
                    securityId: "invalid",
                }),
            });
            await expect(Security_1.default.releaseHoldByPartition(releaseHoldByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if partitionId is invalid", async () => {
            releaseHoldByPartitionRequest = new request_1.ReleaseHoldByPartitionRequest({
                ...HoldFixture_1.ReleaseHoldByPartitionRequestFixture.create({
                    partitionId: "invalid",
                }),
            });
            await expect(Security_1.default.releaseHoldByPartition(releaseHoldByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if targetId is invalid", async () => {
            releaseHoldByPartitionRequest = new request_1.ReleaseHoldByPartitionRequest({
                ...HoldFixture_1.ReleaseHoldByPartitionRequestFixture.create({
                    targetId: "invalid",
                }),
            });
            await expect(Security_1.default.releaseHoldByPartition(releaseHoldByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if amount is invalid", async () => {
            releaseHoldByPartitionRequest = new request_1.ReleaseHoldByPartitionRequest({
                ...HoldFixture_1.ReleaseHoldByPartitionRequestFixture.create({
                    amount: "invalid",
                }),
            });
            await expect(Security_1.default.releaseHoldByPartition(releaseHoldByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if holdId is invalid", async () => {
            releaseHoldByPartitionRequest = new request_1.ReleaseHoldByPartitionRequest({
                ...HoldFixture_1.ReleaseHoldByPartitionRequestFixture.create({
                    holdId: -1,
                }),
            });
            await expect(Security_1.default.releaseHoldByPartition(releaseHoldByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
    });
    describe("reclaimHoldByPartition", () => {
        reclaimHoldByPartitionRequest = new request_1.ReclaimHoldByPartitionRequest(HoldFixture_1.ReclaimHoldByPartitionRequestFixture.create());
        const expectedResponse = {
            payload: true,
            transactionId: transactionId,
        };
        it("should reclaim hold by partition successfully", async () => {
            commandBusMock.execute.mockResolvedValue(expectedResponse);
            const result = await Security_1.default.reclaimHoldByPartition(reclaimHoldByPartitionRequest);
            expect(handleValidationSpy).toHaveBeenCalledWith("ReclaimHoldByPartitionRequest", reclaimHoldByPartitionRequest);
            expect(commandBusMock.execute).toHaveBeenCalledWith(new ReclaimHoldByPartitionCommand_1.ReclaimHoldByPartitionCommand(reclaimHoldByPartitionRequest.securityId, reclaimHoldByPartitionRequest.partitionId, reclaimHoldByPartitionRequest.holdId, reclaimHoldByPartitionRequest.targetId));
            expect(result).toEqual(expectedResponse);
        });
        it("should throw an error if command execution fails", async () => {
            const error = new Error("Command execution failed");
            commandBusMock.execute.mockRejectedValue(error);
            await expect(Security_1.default.reclaimHoldByPartition(reclaimHoldByPartitionRequest)).rejects.toThrow("Command execution failed");
            expect(handleValidationSpy).toHaveBeenCalledWith("ReclaimHoldByPartitionRequest", reclaimHoldByPartitionRequest);
            expect(commandBusMock.execute).toHaveBeenCalledWith(new ReclaimHoldByPartitionCommand_1.ReclaimHoldByPartitionCommand(reclaimHoldByPartitionRequest.securityId, reclaimHoldByPartitionRequest.partitionId, reclaimHoldByPartitionRequest.holdId, reclaimHoldByPartitionRequest.targetId));
        });
        it("should throw error if securityId is invalid", async () => {
            reclaimHoldByPartitionRequest = new request_1.ReclaimHoldByPartitionRequest({
                ...HoldFixture_1.ReclaimHoldByPartitionRequestFixture.create({
                    securityId: "invalid",
                }),
            });
            await expect(Security_1.default.reclaimHoldByPartition(reclaimHoldByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if partitionId is invalid", async () => {
            reclaimHoldByPartitionRequest = new request_1.ReclaimHoldByPartitionRequest({
                ...HoldFixture_1.ReclaimHoldByPartitionRequestFixture.create({
                    partitionId: "invalid",
                }),
            });
            await expect(Security_1.default.reclaimHoldByPartition(reclaimHoldByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if targetId is invalid", async () => {
            reclaimHoldByPartitionRequest = new request_1.ReclaimHoldByPartitionRequest({
                ...HoldFixture_1.ReclaimHoldByPartitionRequestFixture.create({
                    targetId: "invalid",
                }),
            });
            await expect(Security_1.default.reclaimHoldByPartition(reclaimHoldByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if holdId is invalid", async () => {
            reclaimHoldByPartitionRequest = new request_1.ReclaimHoldByPartitionRequest({
                ...HoldFixture_1.ReclaimHoldByPartitionRequestFixture.create({
                    holdId: -1,
                }),
            });
            await expect(Security_1.default.reclaimHoldByPartition(reclaimHoldByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
    });
    describe("executeHoldByPartition", () => {
        executeHoldByPartitionRequest = new request_1.ExecuteHoldByPartitionRequest(HoldFixture_1.ExecuteHoldByPartitionRequestFixture.create());
        const expectedResponse = {
            payload: true,
            transactionId: transactionId,
        };
        it("should execute hold by partition successfully", async () => {
            commandBusMock.execute.mockResolvedValue(expectedResponse);
            const result = await Security_1.default.executeHoldByPartition(executeHoldByPartitionRequest);
            expect(handleValidationSpy).toHaveBeenCalledWith("ExecuteHoldByPartitionRequest", executeHoldByPartitionRequest);
            expect(commandBusMock.execute).toHaveBeenCalledWith(new ExecuteHoldByPartitionCommand_1.ExecuteHoldByPartitionCommand(executeHoldByPartitionRequest.securityId, executeHoldByPartitionRequest.sourceId, executeHoldByPartitionRequest.amount, executeHoldByPartitionRequest.holdId, executeHoldByPartitionRequest.targetId, executeHoldByPartitionRequest.partitionId));
            expect(result).toEqual(expectedResponse);
        });
        it("should throw an error if command execution fails", async () => {
            const error = new Error("Command execution failed");
            commandBusMock.execute.mockRejectedValue(error);
            await expect(Security_1.default.executeHoldByPartition(executeHoldByPartitionRequest)).rejects.toThrow("Command execution failed");
            expect(handleValidationSpy).toHaveBeenCalledWith("ExecuteHoldByPartitionRequest", executeHoldByPartitionRequest);
            expect(commandBusMock.execute).toHaveBeenCalledWith(new ExecuteHoldByPartitionCommand_1.ExecuteHoldByPartitionCommand(executeHoldByPartitionRequest.securityId, executeHoldByPartitionRequest.sourceId, executeHoldByPartitionRequest.amount, executeHoldByPartitionRequest.holdId, executeHoldByPartitionRequest.targetId, executeHoldByPartitionRequest.partitionId));
        });
        it("should throw error if securityId is invalid", async () => {
            executeHoldByPartitionRequest = new request_1.ExecuteHoldByPartitionRequest({
                ...HoldFixture_1.ExecuteHoldByPartitionRequestFixture.create({
                    securityId: "invalid",
                }),
            });
            await expect(Security_1.default.executeHoldByPartition(executeHoldByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if sourceId is invalid", async () => {
            executeHoldByPartitionRequest = new request_1.ExecuteHoldByPartitionRequest({
                ...HoldFixture_1.ExecuteHoldByPartitionRequestFixture.create({
                    sourceId: "invalid",
                }),
            });
            await expect(Security_1.default.executeHoldByPartition(executeHoldByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if targetId is invalid", async () => {
            executeHoldByPartitionRequest = new request_1.ExecuteHoldByPartitionRequest({
                ...HoldFixture_1.ExecuteHoldByPartitionRequestFixture.create({
                    targetId: "invalid",
                }),
            });
            await expect(Security_1.default.executeHoldByPartition(executeHoldByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if holdId is invalid", async () => {
            executeHoldByPartitionRequest = new request_1.ExecuteHoldByPartitionRequest({
                ...HoldFixture_1.ExecuteHoldByPartitionRequestFixture.create({
                    holdId: -1,
                }),
            });
            await expect(Security_1.default.executeHoldByPartition(executeHoldByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if amount is invalid", async () => {
            executeHoldByPartitionRequest = new request_1.ExecuteHoldByPartitionRequest({
                ...HoldFixture_1.ExecuteHoldByPartitionRequestFixture.create({
                    amount: "invalid",
                }),
            });
            await expect(Security_1.default.executeHoldByPartition(executeHoldByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
        it("should throw error if partitionId is invalid", async () => {
            executeHoldByPartitionRequest = new request_1.ExecuteHoldByPartitionRequest({
                ...HoldFixture_1.ExecuteHoldByPartitionRequestFixture.create({
                    partitionId: "invalid",
                }),
            });
            await expect(Security_1.default.executeHoldByPartition(executeHoldByPartitionRequest)).rejects.toThrow(ValidationError_1.ValidationError);
        });
    });
});
