UNPKG

@foblex/ng-mediator

Version:

A mediator library for Angular facilitating a clean architecture with a better command-query separation.

55 lines 6.43 kB
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==