import { render, screen } from "@testing-library/react";
import { describe, expect, it, vi } from "vitest";
import { WebhookStatusBadge } from "#/components/features/settings/git-settings/webhook-status-badge";
// Mock react-i18next
vi.mock("react-i18next", () => ({
useTranslation: () => ({
t: (key: string) => key,
}),
}));
describe("WebhookStatusBadge", () => {
it("should display installed status when webhook is installed", () => {
// Arrange
const props = {
webhookInstalled: true,
};
// Act
render();
// Assert
const badge = screen.getByText("GITLAB$WEBHOOK_STATUS_INSTALLED");
expect(badge).toBeInTheDocument();
});
it("should display not installed status when webhook is not installed", () => {
// Arrange
const props = {
webhookInstalled: false,
};
// Act
render();
// Assert
const badge = screen.getByText("GITLAB$WEBHOOK_STATUS_NOT_INSTALLED");
expect(badge).toBeInTheDocument();
});
it("should display installed status when installation result is successful", () => {
// Arrange
const props = {
webhookInstalled: false,
installationResult: {
success: true,
error: null,
},
};
// Act
render();
// Assert
const badge = screen.getByText("GITLAB$WEBHOOK_STATUS_INSTALLED");
expect(badge).toBeInTheDocument();
});
it("should display failed status when installation result has error", () => {
// Arrange
const props = {
webhookInstalled: false,
installationResult: {
success: false,
error: "Installation failed",
},
};
// Act
render();
// Assert
const badge = screen.getByText("GITLAB$WEBHOOK_STATUS_FAILED");
expect(badge).toBeInTheDocument();
});
it("should show error message when installation fails", () => {
// Arrange
const errorMessage = "Permission denied";
const props = {
webhookInstalled: false,
installationResult: {
success: false,
error: errorMessage,
},
};
// Act
render();
// Assert
const badgeContainer = screen.getByText(
"GITLAB$WEBHOOK_STATUS_FAILED",
).parentElement;
expect(badgeContainer).toHaveAttribute("title", errorMessage);
});
});