Files
novalon-website/src/db/schema.test.ts
T
张翔 4fdfc2d8b4 feat: implement frontend-backend configuration linkage
- Create public config API for frontend consumption
- Add configuration fetching to homepage
- Implement module show/hide logic based on config
- Add support for Services items filtering
- Add support for Products featured products and pricing display
- Add support for News display count, categories, and sort order
- Fix table name from 'configs' to 'siteConfig' in API route
- Update type definitions for proper TypeScript support
2026-03-13 13:11:20 +08:00

87 lines
3.1 KiB
TypeScript

import { describe, it, expect } from '@jest/globals';
import { users, content, siteConfig, auditLogs, contentVersions } from './schema';
describe('Database Schema', () => {
describe('users table', () => {
it('should have correct columns defined', () => {
expect(users.id).toBeDefined();
expect(users.email).toBeDefined();
expect(users.passwordHash).toBeDefined();
expect(users.name).toBeDefined();
expect(users.isAdmin).toBeDefined();
expect(users.avatar).toBeDefined();
expect(users.createdAt).toBeDefined();
expect(users.updatedAt).toBeDefined();
});
it('should have default isAdmin as false', () => {
const isAdmin = users.isAdmin;
expect(isAdmin).toBeDefined();
});
});
describe('content table', () => {
it('should have correct columns defined', () => {
expect(content.id).toBeDefined();
expect(content.type).toBeDefined();
expect(content.title).toBeDefined();
expect(content.slug).toBeDefined();
expect(content.excerpt).toBeDefined();
expect(content.content).toBeDefined();
expect(content.coverImage).toBeDefined();
expect(content.category).toBeDefined();
expect(content.tags).toBeDefined();
expect(content.status).toBeDefined();
expect(content.publishedAt).toBeDefined();
expect(content.authorId).toBeDefined();
expect(content.sortOrder).toBeDefined();
expect(content.metadata).toBeDefined();
expect(content.createdAt).toBeDefined();
expect(content.updatedAt).toBeDefined();
});
it('should have default status as draft', () => {
expect(content.status).toBeDefined();
});
});
describe('contentVersions table', () => {
it('should have correct columns defined', () => {
expect(contentVersions.id).toBeDefined();
expect(contentVersions.contentId).toBeDefined();
expect(contentVersions.version).toBeDefined();
expect(contentVersions.title).toBeDefined();
expect(contentVersions.content).toBeDefined();
expect(contentVersions.changes).toBeDefined();
expect(contentVersions.changedBy).toBeDefined();
expect(contentVersions.changedAt).toBeDefined();
});
});
describe('siteConfig table', () => {
it('should have correct columns defined', () => {
expect(siteConfig.id).toBeDefined();
expect(siteConfig.key).toBeDefined();
expect(siteConfig.value).toBeDefined();
expect(siteConfig.category).toBeDefined();
expect(siteConfig.description).toBeDefined();
expect(siteConfig.updatedAt).toBeDefined();
expect(siteConfig.updatedBy).toBeDefined();
});
});
describe('auditLogs table', () => {
it('should have correct columns defined', () => {
expect(auditLogs.id).toBeDefined();
expect(auditLogs.userId).toBeDefined();
expect(auditLogs.action).toBeDefined();
expect(auditLogs.resourceType).toBeDefined();
expect(auditLogs.resourceId).toBeDefined();
expect(auditLogs.details).toBeDefined();
expect(auditLogs.ipAddress).toBeDefined();
expect(auditLogs.userAgent).toBeDefined();
expect(auditLogs.timestamp).toBeDefined();
});
});
});