UNPKG

7.93 kBJavaScriptView Raw
1"use strict";
2var _ = require('lodash');
3var fakeAsync_1 = require('./fakeAsync');
4var MockPromiseService = (function () {
5 function MockPromiseService() {
6 }
7 MockPromiseService.prototype.promise = function (result, share) {
8 if (_.isUndefined(share)) {
9 share = false;
10 }
11 if (_.isFunction(result)) {
12 return this.makeDynamicMockPromise(result, share);
13 }
14 else {
15 return this.makeMockPromise(result, share);
16 }
17 };
18 MockPromiseService.prototype.rejectedPromise = function () {
19 var params = [];
20 for (var _i = 0; _i < arguments.length; _i++) {
21 params[_i - 0] = arguments[_i];
22 }
23 var mocked = this.makeMockPromise(null, false);
24 mocked.rejected = true;
25 mocked.rejectParams = params;
26 return mocked;
27 };
28 MockPromiseService.prototype.flushAll = function (service) {
29 _.each(service, function (promise) {
30 if (promise && _.isFunction(promise.flush)) {
31 promise.flush();
32 }
33 });
34 };
35 MockPromiseService.prototype.makeMockPromise = function (result, share) {
36 return this.makeDynamicMockPromise(function () { return result; }, share);
37 };
38 MockPromiseService.prototype.makeDynamicMockPromise = function (result, shareParam) {
39 var share = shareParam;
40 ;
41 var requests = [];
42 var mocked;
43 // Return a function that will build a pending promise when called
44 var promiseBuilder = (function () {
45 var args = [];
46 for (var _i = 0; _i < arguments.length; _i++) {
47 args[_i - 0] = arguments[_i];
48 }
49 if (share && _.some(requests)) {
50 return _.first(requests).promise;
51 }
52 var newRequest = {
53 resolve: null,
54 reject: null,
55 params: args,
56 promise: null,
57 rejected: mocked.rejected,
58 rejectParams: mocked.rejectParams,
59 pending: true,
60 };
61 newRequest.promise = new Promise(function (resolve, reject) {
62 newRequest.resolve = resolve;
63 newRequest.reject = reject;
64 });
65 requests.push(newRequest);
66 fakeAsync_1.rlQueueRequest(newRequest);
67 return newRequest.promise;
68 });
69 var spiedBuilder = sinon.spy(promiseBuilder);
70 mocked = spiedBuilder;
71 // Mark promise to be rejected
72 mocked.reject = function () {
73 var params = [];
74 for (var _i = 0; _i < arguments.length; _i++) {
75 params[_i - 0] = arguments[_i];
76 }
77 mocked.rejected = true;
78 mocked.rejectParams = params;
79 };
80 // Mark promise to be shared in builder
81 mocked.share = function (shareParam) {
82 if (_.isUndefined(shareParam)) {
83 share = true;
84 }
85 share = shareParam;
86 };
87 // If current request, resolve and clear
88 mocked.flush = function () {
89 _.each(requests, function (request) {
90 request.pending = false;
91 if (request.rejected) {
92 request.reject.apply(request, request.rejectParams);
93 }
94 else {
95 request.resolve(result.apply(void 0, request.params));
96 }
97 });
98 requests = [];
99 fakeAsync_1.flushMicrotasks();
100 };
101 return mocked;
102 };
103 return MockPromiseService;
104}());
105exports.mockPromise = new MockPromiseService();
106//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja1Byb21pc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJtb2NrUHJvbWlzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsSUFBWSxDQUFDLFdBQU0sUUFBUSxDQUFDLENBQUE7QUFFNUIsMEJBQWdELGFBQWEsQ0FBQyxDQUFBO0FBb0I5RDtJQUFBO0lBNkdBLENBQUM7SUE1R0Esb0NBQU8sR0FBUCxVQUFlLE1BQTRDLEVBQUUsS0FBZTtRQUMzRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxQixLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFCLE1BQU0sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQThCLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNoRixDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDUCxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBUSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkQsQ0FBQztJQUNGLENBQUM7SUFFRCw0Q0FBZSxHQUFmO1FBQXVCLGdCQUFnQjthQUFoQixXQUFnQixDQUFoQixzQkFBZ0IsQ0FBaEIsSUFBZ0I7WUFBaEIsK0JBQWdCOztRQUN0QyxJQUFJLE1BQU0sR0FBa0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDOUUsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDdkIsTUFBTSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUM7UUFDN0IsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNmLENBQUM7SUFFRCxxQ0FBUSxHQUFSLFVBQVMsT0FBWTtRQUNwQixDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFDLE9BQTRC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
\No newline at end of file