UNPKG

@apistudio/apim-cli

Version:

CLI for API Management Products

144 lines (118 loc) 4.18 kB
/** * Copyright Super iPaaS Integration LLC, an IBM Company 2024 */ import { getRefsFromApiAsset } from "./api-asset-handler.js"; import { BaseAsset } from "../model/assets-model.js"; import { showWarning } from "../helpers/common/message-helper.js"; jest.mock("../helpers/common/message-helper.js", () => ({ showWarning: jest.fn(), })); describe("api asset handler function test suite", () => { const mockBaseAsset: BaseAsset = { metadata: { name: "test-asset", }, spec: { "policy-sequence": [{ $ref: "policy-seq-1" }, { $ref: "policy-seq-2" }], }, } as unknown as BaseAsset; it("should return target assets from policy sequences", () => { const expectedTargetAssets = [ { kind: "PolicySequence", ref: "policy-seq-1", isNewlyAdded: true }, { kind: "PolicySequence", ref: "policy-seq-2", isNewlyAdded: true }, ]; const result = getRefsFromApiAsset(mockBaseAsset); expect(result).toEqual(expectedTargetAssets); }); it("should handle empty policy-seq array", () => { const emptyPolicySeqAsset: BaseAsset = { metadata: { name: "test-asset", }, spec: { "policy-sequence": [], }, } as unknown as BaseAsset; const result = getRefsFromApiAsset(emptyPolicySeqAsset); expect(result).toEqual([]); }); it("should show warning if spec is not defined", () => { const assetWithUndefinedSpec: BaseAsset = { metadata: { name: "test-asset", }, spec: undefined, } as unknown as BaseAsset; getRefsFromApiAsset(assetWithUndefinedSpec); expect(showWarning).toHaveBeenCalledWith( "Spec is not defined for the asset with kind 'API' and name 'test-asset'" ); }); it("should handle asset without spec property", () => { const assetWithoutSpec: BaseAsset = { metadata: { name: "test-asset", }, } as unknown as BaseAsset; const result = getRefsFromApiAsset(assetWithoutSpec); expect(result).toEqual([]); expect(showWarning).toHaveBeenCalledWith( "Spec is not defined for the asset with kind 'API' and name 'test-asset'" ); }); it("should handle multiple assets in policy-seq", () => { const multiplePolicySeqAsset: BaseAsset = { metadata: { name: "test-asset", }, spec: { "policy-sequence": [ { $ref: "policy-seq-1" }, { $ref: "policy-seq-2" }, { $ref: "policy-seq-3" }, { $ref: "policy-seq-4" }, ], }, } as unknown as BaseAsset; const expectedTargetAssets = [ { kind: "PolicySequence", ref: "policy-seq-1", isNewlyAdded: true }, { kind: "PolicySequence", ref: "policy-seq-2", isNewlyAdded: true }, { kind: "PolicySequence", ref: "policy-seq-3", isNewlyAdded: true }, { kind: "PolicySequence", ref: "policy-seq-4", isNewlyAdded: true }, ]; const result = getRefsFromApiAsset(multiplePolicySeqAsset); expect(result).toEqual(expectedTargetAssets); }); it("should ignore extra properties in policy-seq", () => { const assetWithExtraProps: BaseAsset = { metadata: { name: "test-asset", }, spec: { "policy-sequence": [ { $ref: "policy-seq-1", extraProp: "extraValue" }, { $ref: "policy-seq-2", anotherProp: "anotherValue" }, ], }, } as unknown as BaseAsset; const expectedTargetAssets = [ { kind: "PolicySequence", ref: "policy-seq-1", isNewlyAdded: true }, { kind: "PolicySequence", ref: "policy-seq-2", isNewlyAdded: true }, ]; const result = getRefsFromApiAsset(assetWithExtraProps); expect(result).toEqual(expectedTargetAssets); }); it("should handle empty metadata", () => { const assetWithEmptyMetadata: BaseAsset = { metadata: {}, spec: { "policy-sequence": [{ $ref: "policy-seq-1" }], }, } as unknown as BaseAsset; const expectedTargetAssets = [ { kind: "PolicySequence", ref: "policy-seq-1", isNewlyAdded: true }, ]; const result = getRefsFromApiAsset(assetWithEmptyMetadata); expect(result).toEqual(expectedTargetAssets); }); });