import { describe, it, expect } from "vitest";
import {
generateTerraformResourceHandler,
generateTerraformConfigHandler,
generateK8sManifestHandler,
generateObservabilityHandler,
generateNginxConfigHandler,
} from "./infrastructure.js";
describe("Infrastructure Tools", () => {
describe("generateTerraformResourceHandler", () => {
it("should generate resource", async () => {
const result = await generateTerraformResourceHandler({
provider: "aws",
resourceType: "s3_bucket",
name: "my-bucket",
properties: { bucket: "test-bucket", acl: "private" },
});
expect(result.content[0].text).toContain(
'resource "aws_s3_bucket" "my-bucket"',
);
expect(result.content[0].text).toContain('bucket = "test-bucket"');
});
});
describe("generateTerraformConfigHandler", () => {
it("should generate aws config", async () => {
const result = await generateTerraformConfigHandler({
provider: "aws",
resources: ["bucket", "vm"],
region: "us-west-2",
});
expect(result.content[0].text).toContain('provider "aws"');
expect(result.content[0].text).toContain('region = "us-west-2"');
expect(result.content[0].text).toContain("aws_s3_bucket");
expect(result.content[0].text).toContain("aws_instance");
});
});
describe("generateK8sManifestHandler", () => {
it("should generate deployment and service", async () => {
const result = await generateK8sManifestHandler({
name: "my-app",
image: "nginx:latest",
port: 80,
replicas: 2,
namespace: "prod",
kind: "Deployment",
});
expect(result.content[0].text).toContain("kind: Deployment");
expect(result.content[0].text).toContain("image: nginx:latest");
expect(result.content[0].text).toContain("kind: Service");
});
it("should generate custom spec", async () => {
const result = await generateK8sManifestHandler({
name: "my-config",
image: "",
port: 0,
replicas: 0,
namespace: "default",
kind: "ConfigMap",
spec: { data: { key: "value" } },
});
expect(result.content[0].text).toContain("kind: ConfigMap");
expect(result.content[0].text).toContain('"key": "value"');
});
});
describe("generateObservabilityHandler", () => {
it("should generate prometheus config", async () => {
const result = await generateObservabilityHandler({
type: "prometheus",
appName: "my-app",
});
expect(result.content[0].text).toContain("scrape_configs:");
expect(result.content[0].text).toContain("job_name: 'my-app'");
});
});
describe("generateNginxConfigHandler", () => {
it("should generate proxy config", async () => {
const result = await generateNginxConfigHandler({
domain: "example.com",
proxyTo: "http://localhost:3000",
});
expect(result.content[0].text).toContain("server_name example.com");
expect(result.content[0].text).toContain(
"proxy_pass http://localhost:3000",
);
});
});
});