import { describe, it, expect, vi, beforeEach } from 'vitest'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { provideRouter, ActivatedRoute } from '@angular/router'; import { TaskDetailPage } from '@app/features/tasks/feature/task-detail-page/task-detail-page'; import { TaskStore } from '@app/features/tasks/data-access/store/task-store'; import { TaskService } from '@app/features/tasks/data-access/services/task'; import { of } from 'rxjs'; import { TaskBuilder } from '@tests/builders/task.builder'; describe('TaskDetailPage', () => { let component: TaskDetailPage; let fixture: ComponentFixture; let taskService: TaskService; beforeEach(async () => { taskService = { getById: vi.fn().mockReturnValue(of(new TaskBuilder().build())), update: vi.fn().mockReturnValue(of(new TaskBuilder().build())), transition: vi.fn().mockReturnValue(of(new TaskBuilder().build())), delete: vi.fn().mockReturnValue(of(undefined)), addNote: vi.fn().mockReturnValue(of(new TaskBuilder().build())), deleteNote: vi.fn().mockReturnValue(of(new TaskBuilder().build())), } as unknown as TaskService; await TestBed.configureTestingModule({ imports: [TaskDetailPage], providers: [ provideRouter([]), { provide: ActivatedRoute, useValue: { snapshot: { paramMap: { get: vi.fn().mockReturnValue('task-1'), }, }, }, }, { provide: TaskService, useValue: taskService }, ], }).compileComponents(); fixture = TestBed.createComponent(TaskDetailPage); component = fixture.componentInstance; fixture.detectChanges(); }); it('should create', () => { expect(component).toBeTruthy(); }); it('should return current state from task history', () => { const store = TestBed.inject(TaskStore); store.setSelectedTask(new TaskBuilder().withState('active').build()); expect(component.currentState).toBe('active'); }); it('should return null for currentState when task has empty history', () => { const store = TestBed.inject(TaskStore); store.setSelectedTask(new TaskBuilder().withStateHistory([]).build()); expect(component.currentState).toBeNull(); }); });