ngrx-model
Version:
Model classes for integrating ngrx store with a REST API
61 lines (44 loc) • 1.81 kB
text/typescript
import { Subject } from 'rxjs';
import { rlFakeAsync, mock, IMockedRequest } from '../test/index';
import { SingletonModel } from './singletonModel';
interface IRequestServiceMock {
getItem?: IMockedRequest<number>;
update?: IMockedRequest<number>;
}
describe('SingletonModel', () => {
let model: SingletonModel<number>;
let requestService: IRequestServiceMock;
beforeEach(() => {
requestService = {
getItem: mock.request(),
update: mock.request(),
};
model = new SingletonModel<number>({ url: '/test' }, <any>requestService);
expect(model.url).to.equal('/test');
});
it('should make an http request to get the item, then push it to the stream', rlFakeAsync(() => {
let item;
const itemFromServer = 11;
requestService.getItem = mock.request(itemFromServer);
model.subscribe(data => item = data);
expect(item).to.be.null;
sinon.assert.calledOnce(requestService.getItem);
requestService.getItem.flush();
expect(item).to.equal(itemFromServer);
}));
it('should make an http request to update the item, then push the updated item to the stream', rlFakeAsync(() => {
let itemToSendForUpdate = 21;
let itemFromDataStream;
let itemReturnedFromAction;
requestService.update = mock.request(params => params.domainObject);
model.subscribe(data => itemFromDataStream = data);
model.update(itemToSendForUpdate).subscribe(data => itemReturnedFromAction = data);
expect(itemFromDataStream).to.be.null;
expect(itemReturnedFromAction).to.not.exist;
sinon.assert.calledOnce(requestService.update);
requestService.getItem.flush();
requestService.update.flush();
expect(itemFromDataStream).to.equal(itemToSendForUpdate);
expect(itemReturnedFromAction).to.equal(itemToSendForUpdate);
}));
});