Enterprise-CMCS/macpro-mako

View on GitHub
lib/lambda/getTypes.test.ts

Summary

Maintainability
A
1 hr
Test Coverage
A
100%
import { describe, it, expect, vi, beforeEach } from "vitest";
import { APIGatewayEvent } from "aws-lambda";
import { handler } from "./getTypes";
import { response } from "libs/handler-lib";
import * as os from "libs/opensearch-lib";

vi.mock("libs/handler-lib", () => ({
  response: vi.fn(),
}));

vi.mock("libs/opensearch-lib", () => ({
  search: vi.fn(),
}));

describe("getTypes Handler", () => {
  beforeEach(() => {
    vi.clearAllMocks();
    process.env.osDomain = "test-domain"; // Set the environment variable before each test
    process.env.indexNamespace = "test-namespace-"; // Set the environment variable before each test
  });

  it("should return 400 if event body is missing", async () => {
    const event = {} as APIGatewayEvent;

    await handler(event);

    expect(response).toHaveBeenCalledWith({
      statusCode: 400,
      body: { message: "Event body required" },
    });
  });

  it("should return 400 if no types are found", async () => {
    (os.search as vi.Mock).mockResolvedValueOnce(null);

    const event = {
      body: JSON.stringify({ authorityId: "test-authority" }),
    } as APIGatewayEvent;

    await handler(event);

    expect(response).toHaveBeenCalledWith({
      statusCode: 400,
      body: { message: "No record found for the given authority" },
    });
  });

  it("should return 200 with the result if types are found", async () => {
    const mockResult = { hits: { hits: [{ _source: { name: "test-type" } }] } };
    (os.search as vi.Mock).mockResolvedValueOnce(mockResult);

    const event = {
      body: JSON.stringify({ authorityId: "test-authority" }),
    } as APIGatewayEvent;

    await handler(event);

    expect(response).toHaveBeenCalledWith({
      statusCode: 200,
      body: mockResult,
    });
  });

  it("should return 500 if an error occurs during processing", async () => {
    (os.search as vi.Mock).mockRejectedValueOnce(new Error("Test error"));

    const event = {
      body: JSON.stringify({ authorityId: "test-authority" }),
    } as APIGatewayEvent;

    await handler(event);

    expect(response).toHaveBeenCalledWith({
      statusCode: 500,
      body: { message: "Internal server error" },
    });
  });
});