Files
library/shared-types/test/audit.types.spec.ts
T
2026-02-19 15:20:25 -08:00

130 lines
4.1 KiB
TypeScript

/**
* @copyright NHCarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import {
AuditAction,
AuditCategory,
type AuditLog,
type AuditLogFilters,
type AuditLogUser,
} from "../src/lib/audit.types";
describe("audit Types", () => {
describe("auditAction enum", () => {
it("should have all expected action values", () => {
expect(AuditAction.login).toBe("LOGIN");
expect(AuditAction.logout).toBe("LOGOUT");
expect(AuditAction.loginFailed).toBe("LOGIN_FAILED");
expect(AuditAction.commentCreate).toBe("COMMENT_CREATE");
expect(AuditAction.commentUpdate).toBe("COMMENT_UPDATE");
expect(AuditAction.commentDelete).toBe("COMMENT_DELETE");
expect(AuditAction.entryCreate).toBe("ENTRY_CREATE");
expect(AuditAction.entryUpdate).toBe("ENTRY_UPDATE");
expect(AuditAction.entryDelete).toBe("ENTRY_DELETE");
expect(AuditAction.like).toBe("LIKE");
expect(AuditAction.unlike).toBe("UNLIKE");
expect(AuditAction.userBan).toBe("USER_BAN");
expect(AuditAction.userUnban).toBe("USER_UNBAN");
expect(AuditAction.rateLimitExceeded).toBe("RATE_LIMIT_EXCEEDED");
expect(AuditAction.csrfValidationFailed).toBe("CSRF_VALIDATION_FAILED");
expect(AuditAction.unauthorizedAccess).toBe("UNAUTHORIZED_ACCESS");
});
});
describe("auditCategory enum", () => {
it("should have all expected category values", () => {
expect(AuditCategory.auth).toBe("AUTH");
expect(AuditCategory.content).toBe("CONTENT");
expect(AuditCategory.admin).toBe("ADMIN");
expect(AuditCategory.security).toBe("SECURITY");
});
});
describe("auditLogUser interface", () => {
it("should accept valid user objects", () => {
const userWithAvatar: AuditLogUser = {
avatar: "https://example.com/avatar.png",
id: "user123",
username: "testuser",
};
const userWithoutAvatar: AuditLogUser = {
id: "user456",
username: "anotheruser",
};
expect(userWithAvatar.avatar).toBe("https://example.com/avatar.png");
expect(userWithoutAvatar.avatar).toBeUndefined();
});
});
describe("auditLog interface", () => {
it("should accept valid audit log with minimal fields", () => {
const minimalLog: AuditLog = {
action: AuditAction.login,
category: AuditCategory.auth,
createdAt: new Date(),
id: "log123",
success: true,
};
expect(minimalLog.userId).toBeUndefined();
expect(minimalLog.details).toBeUndefined();
});
it("should accept valid audit log with all fields", () => {
const fullLog: AuditLog = {
action: AuditAction.commentDelete,
category: AuditCategory.admin,
createdAt: new Date(),
details: "Admin deleted inappropriate comment",
id: "log456",
resourceId: "comment123",
resourceType: "comment",
success: true,
targetUser: {
id: "user789",
username: "targetuser",
},
targetUserId: "user789",
user: {
avatar: "https://example.com/avatar.png",
id: "user123",
username: "admin",
},
userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64)",
userId: "user123",
};
expect(fullLog.user?.username).toBe("admin");
expect(fullLog.targetUser?.username).toBe("targetuser");
});
});
describe("auditLogFilters interface", () => {
it("should accept empty filters", () => {
const emptyFilters: AuditLogFilters = {};
expect(emptyFilters).toEqual({});
});
it("should accept filters with all fields", () => {
const fullFilters: AuditLogFilters = {
action: AuditAction.login,
category: AuditCategory.auth,
endDate: new Date("2024-12-31"),
limit: 50,
page: 1,
startDate: new Date("2024-01-01"),
success: true,
userId: "user123",
};
expect(fullFilters.page).toBe(1);
expect(fullFilters.limit).toBe(50);
});
});
});