@foblex/ng-mediator
Version:
A mediator library for Angular facilitating a clean architecture with a better command-query separation.
55 lines • 6.43 kB
JavaScript
import { of, throwError } from 'rxjs';
import { FCommandBase, FQueryBase } from '../cqrs';
import { FValidatorBase } from './validator';
class MockRequest {
}
// Validators
class SuccessValidator extends FValidatorBase {
validate(request) {
return of([]);
}
}
class FailureValidator extends FValidatorBase {
validate(request) {
return of([new Error('Validation Error')]);
}
}
// Handlers
class SuccessHandler extends FCommandBase {
execute(request) {
return of('Success');
}
}
class FailureHandler extends FQueryBase {
execute(request) {
return throwError(() => new Error('Handler Error'));
}
}
// describe('FMediator', () => {
// let mediator: FMediator;
//
// function setupModule(validator: Type<FValidatorBase<MockRequest, string>>, handler: Type<IRequestHandler<MockRequest, string>>) {
// TestBed.configureTestingModule({
// imports: [ FMediatorModule.forRoot(), FMediatorModule.forFeature(MockRequest, validator, handler) ]
// });
// mediator = TestBed.inject(FMediator);
// }
//
// it('should return success when there are no errors', fakeAsync(() => {
// setupModule(SuccessValidator, SuccessHandler);
// mediator.send(MockRequest, new MockRequest()).subscribe(response => {
// expect(response).toEqual('Success');
// });
// tick();
// }));
//
// it('should return validation error when validator fails', fakeAsync(() => {
// setupModule(FailureValidator, SuccessHandler);
// mediator.send(MockRequest, new MockRequest()).pipe(catchError((err, o) => {
// expect(err).toEqual([ new Error('Validation Error') ]);
// return o;
// })).subscribe();
// tick();
// }));
// });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZi1tZWRpYXRvci5zZXJ2aWNlLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1tZWRpYXRvci9zcmMvbGliL21lZGlhdG9yL2YtbWVkaWF0b3Iuc2VydmljZS5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUE2QixNQUFNLFNBQVMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBSTdDLE1BQU0sV0FBVztDQUNoQjtBQUVELGFBQWE7QUFDYixNQUFNLGdCQUFpQixTQUFRLGNBQW1DO0lBQ3ZELFFBQVEsQ0FBQyxPQUFvQjtRQUNwQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQixDQUFDO0NBQ0Y7QUFFRCxNQUFNLGdCQUFpQixTQUFRLGNBQW1DO0lBQ2hFLFFBQVEsQ0FBQyxPQUFvQjtRQUMzQixPQUFPLEVBQUUsQ0FBQyxDQUFFLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7Q0FDRjtBQUVELFdBQVc7QUFDWCxNQUFNLGNBQWUsU0FBUSxZQUFpQztJQUM1RCxPQUFPLENBQUMsT0FBb0I7UUFDMUIsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdkIsQ0FBQztDQUNGO0FBRUQsTUFBTSxjQUFlLFNBQVEsVUFBK0I7SUFDMUQsT0FBTyxDQUFDLE9BQW9CO1FBQzFCLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztDQUNGO0FBR0QsZ0NBQWdDO0FBQ2hDLDZCQUE2QjtBQUM3QixFQUFFO0FBQ0Ysc0lBQXNJO0FBQ3RJLHVDQUF1QztBQUN2Qyw0R0FBNEc7QUFDNUcsVUFBVTtBQUNWLDRDQUE0QztBQUM1QyxNQUFNO0FBQ04sRUFBRTtBQUNGLDJFQUEyRTtBQUMzRSxxREFBcUQ7QUFDckQsNEVBQTRFO0FBQzVFLDZDQUE2QztBQUM3QyxVQUFVO0FBQ1YsY0FBYztBQUNkLFNBQVM7QUFDVCxFQUFFO0FBQ0YsZ0ZBQWdGO0FBQ2hGLHFEQUFxRDtBQUNyRCxrRkFBa0Y7QUFDbEYsZ0VBQWdFO0FBQ2hFLGtCQUFrQjtBQUNsQix1QkFBdUI7QUFDdkIsY0FBYztBQUNkLFNBQVM7QUFDVCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVzdEJlZCwgZmFrZUFzeW5jLCB0aWNrIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS90ZXN0aW5nJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjYXRjaEVycm9yIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRkNvbW1hbmRCYXNlLCBGUXVlcnlCYXNlLCBJUmVxdWVzdCwgSVJlcXVlc3RIYW5kbGVyIH0gZnJvbSAnLi4vY3Fycyc7XG5pbXBvcnQgeyBGVmFsaWRhdG9yQmFzZSB9IGZyb20gJy4vdmFsaWRhdG9yJztcbmltcG9ydCB7IEZNZWRpYXRvciB9IGZyb20gJy4vZi1tZWRpYXRvcic7XG5pbXBvcnQgeyBGTWVkaWF0b3JNb2R1bGUgfSBmcm9tICcuL2YtbWVkaWF0b3IubW9kdWxlJztcblxuY2xhc3MgTW9ja1JlcXVlc3QgaW1wbGVtZW50cyBJUmVxdWVzdDxzdHJpbmc+IHtcbn1cblxuLy8gVmFsaWRhdG9yc1xuY2xhc3MgU3VjY2Vzc1ZhbGlkYXRvciBleHRlbmRzIEZWYWxpZGF0b3JCYXNlPE1vY2tSZXF1ZXN0LCBzdHJpbmc+IHtcbiAgb3ZlcnJpZGUgdmFsaWRhdGUocmVxdWVzdDogTW9ja1JlcXVlc3QpOiBPYnNlcnZhYmxlPEVycm9yW10+IHtcbiAgICByZXR1cm4gb2YoW10pO1xuICB9XG59XG5cbmNsYXNzIEZhaWx1cmVWYWxpZGF0b3IgZXh0ZW5kcyBGVmFsaWRhdG9yQmFzZTxNb2NrUmVxdWVzdCwgc3RyaW5nPiB7XG4gIHZhbGlkYXRlKHJlcXVlc3Q6IE1vY2tSZXF1ZXN0KTogT2JzZXJ2YWJsZTxFcnJvcltdPiB7XG4gICAgcmV0dXJuIG9mKFsgbmV3IEVycm9yKCdWYWxpZGF0aW9uIEVycm9yJykgXSk7XG4gIH1cbn1cblxuLy8gSGFuZGxlcnNcbmNsYXNzIFN1Y2Nlc3NIYW5kbGVyIGV4dGVuZHMgRkNvbW1hbmRCYXNlPE1vY2tSZXF1ZXN0LCBzdHJpbmc+IHtcbiAgZXhlY3V0ZShyZXF1ZXN0OiBNb2NrUmVxdWVzdCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIG9mKCdTdWNjZXNzJyk7XG4gIH1cbn1cblxuY2xhc3MgRmFpbHVyZUhhbmRsZXIgZXh0ZW5kcyBGUXVlcnlCYXNlPE1vY2tSZXF1ZXN0LCBzdHJpbmc+IHtcbiAgZXhlY3V0ZShyZXF1ZXN0OiBNb2NrUmVxdWVzdCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdIYW5kbGVyIEVycm9yJykpO1xuICB9XG59XG5cblxuLy8gZGVzY3JpYmUoJ0ZNZWRpYXRvcicsICgpID0+IHtcbi8vICAgbGV0IG1lZGlhdG9yOiBGTWVkaWF0b3I7XG4vL1xuLy8gICBmdW5jdGlvbiBzZXR1cE1vZHVsZSh2YWxpZGF0b3I6IFR5cGU8RlZhbGlkYXRvckJhc2U8TW9ja1JlcXVlc3QsIHN0cmluZz4+LCBoYW5kbGVyOiBUeXBlPElSZXF1ZXN0SGFuZGxlcjxNb2NrUmVxdWVzdCwgc3RyaW5nPj4pIHtcbi8vICAgICBUZXN0QmVkLmNvbmZpZ3VyZVRlc3RpbmdNb2R1bGUoe1xuLy8gICAgICAgaW1wb3J0czogWyBGTWVkaWF0b3JNb2R1bGUuZm9yUm9vdCgpLCBGTWVkaWF0b3JNb2R1bGUuZm9yRmVhdHVyZShNb2NrUmVxdWVzdCwgdmFsaWRhdG9yLCBoYW5kbGVyKSBdXG4vLyAgICAgfSk7XG4vLyAgICAgbWVkaWF0b3IgPSBUZXN0QmVkLmluamVjdChGTWVkaWF0b3IpO1xuLy8gICB9XG4vL1xuLy8gICBpdCgnc2hvdWxkIHJldHVybiBzdWNjZXNzIHdoZW4gdGhlcmUgYXJlIG5vIGVycm9ycycsIGZha2VBc3luYygoKSA9PiB7XG4vLyAgICAgc2V0dXBNb2R1bGUoU3VjY2Vzc1ZhbGlkYXRvciwgU3VjY2Vzc0hhbmRsZXIpO1xuLy8gICAgIG1lZGlhdG9yLnNlbmQoTW9ja1JlcXVlc3QsIG5ldyBNb2NrUmVxdWVzdCgpKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuLy8gICAgICAgZXhwZWN0KHJlc3BvbnNlKS50b0VxdWFsKCdTdWNjZXNzJyk7XG4vLyAgICAgfSk7XG4vLyAgICAgdGljaygpO1xuLy8gICB9KSk7XG4vL1xuLy8gICBpdCgnc2hvdWxkIHJldHVybiB2YWxpZGF0aW9uIGVycm9yIHdoZW4gdmFsaWRhdG9yIGZhaWxzJywgZmFrZUFzeW5jKCgpID0+IHtcbi8vICAgICBzZXR1cE1vZHVsZShGYWlsdXJlVmFsaWRhdG9yLCBTdWNjZXNzSGFuZGxlcik7XG4vLyAgICAgbWVkaWF0b3Iuc2VuZChNb2NrUmVxdWVzdCwgbmV3IE1vY2tSZXF1ZXN0KCkpLnBpcGUoY2F0Y2hFcnJvcigoZXJyLCBvKSA9PiB7XG4vLyAgICAgICBleHBlY3QoZXJyKS50b0VxdWFsKFsgbmV3IEVycm9yKCdWYWxpZGF0aW9uIEVycm9yJykgXSk7XG4vLyAgICAgICByZXR1cm4gbztcbi8vICAgICB9KSkuc3Vic2NyaWJlKCk7XG4vLyAgICAgdGljaygpO1xuLy8gICB9KSk7XG4vLyB9KTtcbiJdfQ==