85 lines
3.0 KiB
TypeScript
85 lines
3.0 KiB
TypeScript
import { provideHttpClient } from '@angular/common/http';
|
|
import { HttpTestingController, provideHttpClientTesting } from '@angular/common/http/testing';
|
|
import { TestBed } from '@angular/core/testing';
|
|
import { MilestonesApiService } from './milestones-api.service';
|
|
import { MilestoneEntity } from './milestones.store';
|
|
|
|
const API = '/api';
|
|
|
|
const makeMilestone = (overrides: Partial<MilestoneEntity> = {}): MilestoneEntity => ({
|
|
id: 1,
|
|
name: 'Sprint 1',
|
|
description: '',
|
|
startDate: '',
|
|
endDate: '',
|
|
dueDate: '',
|
|
issueIds: [],
|
|
dependsOnIds: [],
|
|
...overrides,
|
|
});
|
|
|
|
describe('MilestonesApiService', () => {
|
|
let service: MilestonesApiService;
|
|
let http: HttpTestingController;
|
|
|
|
beforeEach(() => {
|
|
TestBed.configureTestingModule({
|
|
providers: [provideHttpClient(), provideHttpClientTesting()],
|
|
});
|
|
service = TestBed.inject(MilestonesApiService);
|
|
http = TestBed.inject(HttpTestingController);
|
|
});
|
|
|
|
afterEach(() => http.verify());
|
|
|
|
describe('getAll', () => {
|
|
it('sends GET /api/milestones and returns milestones', () => {
|
|
const milestones = [makeMilestone({ id: 1 }), makeMilestone({ id: 2 })];
|
|
let result: MilestoneEntity[] | undefined;
|
|
service.getAll().subscribe((data) => (result = data));
|
|
const req = http.expectOne(`${API}/milestones`);
|
|
expect(req.request.method).toBe('GET');
|
|
req.flush(milestones);
|
|
expect(result).toEqual(milestones);
|
|
});
|
|
});
|
|
|
|
describe('create', () => {
|
|
it('sends POST /api/milestones with the body and returns the created milestone', () => {
|
|
const body = { name: 'Sprint 2', description: '', startDate: '', endDate: '', dueDate: '', issueIds: [], dependsOnIds: [] };
|
|
const response = makeMilestone({ id: 2, name: 'Sprint 2' });
|
|
let result: MilestoneEntity | undefined;
|
|
service.create(body).subscribe((data) => (result = data));
|
|
const req = http.expectOne(`${API}/milestones`);
|
|
expect(req.request.method).toBe('POST');
|
|
expect(req.request.body).toEqual(body);
|
|
req.flush(response);
|
|
expect(result).toEqual(response);
|
|
});
|
|
});
|
|
|
|
describe('update', () => {
|
|
it('sends PUT /api/milestones/:id with the body and returns the updated milestone', () => {
|
|
const milestone = makeMilestone({ id: 1, name: 'Updated Sprint' });
|
|
let result: MilestoneEntity | undefined;
|
|
service.update(1, milestone).subscribe((data) => (result = data));
|
|
const req = http.expectOne(`${API}/milestones/1`);
|
|
expect(req.request.method).toBe('PUT');
|
|
expect(req.request.body).toEqual(milestone);
|
|
req.flush(milestone);
|
|
expect(result).toEqual(milestone);
|
|
});
|
|
});
|
|
|
|
describe('remove', () => {
|
|
it('sends DELETE /api/milestones/:id and completes', () => {
|
|
let completed = false;
|
|
service.remove(1).subscribe({ complete: () => (completed = true) });
|
|
const req = http.expectOne(`${API}/milestones/1`);
|
|
expect(req.request.method).toBe('DELETE');
|
|
req.flush(null);
|
|
expect(completed).toBe(true);
|
|
});
|
|
});
|
|
});
|