67 lines
2.2 KiB
TypeScript
67 lines
2.2 KiB
TypeScript
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();
|
|
});
|
|
});
|