emi-challenge-fe/tests/app/features/tasks/feature/task-create-page/task-create-page.spec.ts

84 lines
2.3 KiB
TypeScript
Raw Permalink Normal View History

import { describe, it, expect, vi, beforeEach } from 'vitest';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { provideRouter } from '@angular/router';
import { TaskCreatePage } from '@app/features/tasks/feature/task-create-page/task-create-page';
import { TaskService } from '@app/features/tasks/data-access/services/task';
describe('TaskCreatePage', () => {
let component: TaskCreatePage;
let fixture: ComponentFixture<TaskCreatePage>;
let taskService: TaskService;
beforeEach(async () => {
taskService = {
create: vi.fn(),
} as unknown as TaskService;
await TestBed.configureTestingModule({
imports: [TaskCreatePage],
providers: [
provideRouter([]),
{ provide: TaskService, useValue: taskService },
],
}).compileComponents();
fixture = TestBed.createComponent(TaskCreatePage);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
it('should have a form with title, description, dueDate and initialNote', () => {
expect(component.form.get('title')).toBeTruthy();
expect(component.form.get('description')).toBeTruthy();
expect(component.form.get('dueDate')).toBeTruthy();
expect(component.form.get('initialNote')).toBeTruthy();
});
it('should have title as required', () => {
const title = component.form.get('title');
title?.setValue('');
expect(title?.valid).toBe(false);
});
it('should have initialNote as required', () => {
const initialNote = component.form.get('initialNote');
initialNote?.setValue('');
expect(initialNote?.valid).toBe(false);
});
it('should validate title max length', () => {
const title = component.form.get('title');
const longTitle = 'a'.repeat(101);
title?.setValue(longTitle);
expect(title?.valid).toBe(false);
});
it('should accept valid title', () => {
const title = component.form.get('title');
title?.setValue('Valid Task Title');
expect(title?.valid).toBe(true);
});
it('should return true from canDeactivate when form is pristine', () => {
expect(component.canDeactivate()).toBe(true);
});
it('should return false from canDeactivate when form is dirty', () => {
component.form.markAsDirty();
expect(component.canDeactivate()).toBe(false);
});
});