emi-challenge-fe/tests/app/features/tasks/data-access/resolvers/task-resolver.spec.ts

67 lines
2.2 KiB
TypeScript
Raw Permalink Normal View History

import { describe, it, expect, vi, beforeEach } from 'vitest';
import { TestBed } from '@angular/core/testing';
import { ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { of, throwError } from 'rxjs';
import { taskResolver } from '@app/features/tasks/data-access/resolvers/task-resolver';
import { TaskService } from '@app/features/tasks/data-access/services/task';
import { TaskStore } from '@app/features/tasks/data-access/store/task-store';
import { TaskBuilder } from '@tests/builders/task.builder';
describe('taskResolver', () => {
let taskService: TaskService;
let taskStore: TaskStore;
beforeEach(() => {
taskService = {
getById: vi.fn(),
} as unknown as TaskService;
taskStore = {
setSelectedTask: vi.fn(),
} as unknown as TaskStore;
TestBed.configureTestingModule({
providers: [
{ provide: TaskService, useValue: taskService },
{ provide: TaskStore, useValue: taskStore },
],
});
});
function createRoute(id: string | null) {
return {
paramMap: {
get: vi.fn().mockReturnValue(id),
},
} as unknown as ActivatedRouteSnapshot;
}
it('should return null when no id param', async () => {
const route = createRoute(null);
const result = await TestBed.runInInjectionContext(() => taskResolver(route, {} as RouterStateSnapshot));
expect(result).toBeNull();
});
it('should return task and set it in store when id exists', async () => {
const task = new TaskBuilder().withId('task-1').build();
vi.mocked(taskService.getById).mockReturnValue(of(task));
const route = createRoute('task-1');
const result = await TestBed.runInInjectionContext(() => taskResolver(route, {} as RouterStateSnapshot));
expect(result).toEqual(task);
expect(taskStore.setSelectedTask).toHaveBeenCalledWith(task);
});
it('should return null when service throws error', async () => {
vi.mocked(taskService.getById).mockReturnValue(throwError(() => new Error('Not found')));
const route = createRoute('task-1');
const result = await TestBed.runInInjectionContext(() => taskResolver(route, {} as RouterStateSnapshot));
expect(result).toBeNull();
});
});