690615:1449 237 #01
CI / CD Pipeline / build (push) Failing after 3m41s
CI / CD Pipeline / deploy (push) Has been skipped

This commit is contained in:
2026-06-15 14:49:26 +07:00
parent b46c0874f2
commit 4dde6570c1
54 changed files with 7802 additions and 727 deletions
@@ -0,0 +1,70 @@
// File: components/search/__tests__/filters.test.tsx
// Change Log:
// - 2026-06-14: สร้างใหม่สำหรับ Phase 3 Coverage
import { render, screen } from '@testing-library/react';
import { describe, it, expect, vi } from 'vitest';
import { SearchFilters } from '../filters';
describe('SearchFilters', () => {
const mockOnFilterChange = vi.fn();
beforeEach(() => {
vi.clearAllMocks();
});
it('ควร render filters card', () => {
const filters = { types: [], statuses: [] };
render(<SearchFilters filters={filters} onFilterChange={mockOnFilterChange} />);
expect(screen.getByText('Filters')).toBeInTheDocument();
});
it('ควรแสดง Document Type checkboxes', () => {
const filters = { types: [], statuses: [] };
render(<SearchFilters filters={filters} onFilterChange={mockOnFilterChange} />);
expect(screen.getByText('Document Type')).toBeInTheDocument();
expect(screen.getByText('Correspondence')).toBeInTheDocument();
expect(screen.getByText('RFA')).toBeInTheDocument();
expect(screen.getByText('Drawing')).toBeInTheDocument();
});
it('ควรแสดง Status checkboxes', () => {
const filters = { types: [], statuses: [] };
render(<SearchFilters filters={filters} onFilterChange={mockOnFilterChange} />);
expect(screen.getByText('Status')).toBeInTheDocument();
expect(screen.getByText('Draft')).toBeInTheDocument();
expect(screen.getByText('Submitted')).toBeInTheDocument();
expect(screen.getByText('Approved')).toBeInTheDocument();
});
it('ควรแสดง active count badge เมื่อมี filters', () => {
const filters = { types: ['correspondence'], statuses: ['DRAFT'] };
render(<SearchFilters filters={filters} onFilterChange={mockOnFilterChange} />);
expect(screen.getByText('2 active')).toBeInTheDocument();
});
it('ควรไม่แสดง active count badge เมื่อไม่มี filters', () => {
const filters = { types: [], statuses: [] };
render(<SearchFilters filters={filters} onFilterChange={mockOnFilterChange} />);
expect(screen.queryByText(/active/)).not.toBeInTheDocument();
});
it('ควรแสดง Clear all filters button เมื่อมี active filters', () => {
const filters = { types: ['correspondence'], statuses: [] };
render(<SearchFilters filters={filters} onFilterChange={mockOnFilterChange} />);
expect(screen.getByText('Clear all filters')).toBeInTheDocument();
});
it('ควรไม่แสดง Clear all filters button เมื่อไม่มี active filters', () => {
const filters = { types: [], statuses: [] };
render(<SearchFilters filters={filters} onFilterChange={mockOnFilterChange} />);
expect(screen.queryByText('Clear all filters')).not.toBeInTheDocument();
});
});
@@ -0,0 +1,74 @@
// File: components/search/__tests__/results.test.tsx
// Change Log:
// - 2026-06-14: สร้างใหม่สำหรับ Phase 3 Coverage
import { render, screen } from '@testing-library/react';
import { describe, it, expect } from 'vitest';
import { SearchResults } from '../results';
describe('SearchResults', () => {
const mockResults = [
{
type: 'correspondence',
publicId: '019505a1-7c3e-7000-8000-abc123def456',
documentNumber: 'CORR-001',
title: 'Test Correspondence',
description: 'Test description',
status: 'DRAFT',
createdAt: '2026-06-14T10:00:00Z',
highlight: null,
},
];
it('ควร render loading state เมื่อ loading=true', () => {
render(<SearchResults results={[]} query="" loading={true} />);
const spinners = screen.getAllByRole('generic', { name: '' }).filter(el => el.querySelector('.animate-spin'));
if (spinners.length > 0) {
expect(spinners[0]).toBeInTheDocument();
}
});
it('ควร render empty state เมื่อไม่มี results และมี query', () => {
render(<SearchResults results={[]} query="test" loading={false} />);
expect(screen.getByText('No results found for "test"')).toBeInTheDocument();
});
it('ควร render empty state เมื่อไม่มี results และไม่มี query', () => {
render(<SearchResults results={[]} query="" loading={false} />);
expect(screen.getByText('Enter a search term to start')).toBeInTheDocument();
});
it('ควร render results list เมื่อมี results', () => {
render(<SearchResults results={mockResults} query="" loading={false} />);
expect(screen.getByText('Test Correspondence')).toBeInTheDocument();
expect(screen.getByText('CORR-001')).toBeInTheDocument();
});
it('ควรแสดง document type badge', () => {
render(<SearchResults results={mockResults} query="" loading={false} />);
expect(screen.getByText('Correspondence')).toBeInTheDocument();
});
it('ควรแสดง status badge', () => {
render(<SearchResults results={mockResults} query="" loading={false} />);
expect(screen.getByText('Draft')).toBeInTheDocument();
});
it('ควรแสดง description เมื่อมี', () => {
render(<SearchResults results={mockResults} query="" loading={false} />);
expect(screen.getByText('Test description')).toBeInTheDocument();
});
it('ควรแสดง formatted date', () => {
render(<SearchResults results={mockResults} query="" loading={false} />);
expect(screen.getByText(/14 Jun 2026/)).toBeInTheDocument();
});
});