@universis/common
Version:
Universis - common directives and services
66 lines (65 loc) • 7.15 kB
JavaScript
import { Injectable } from '@angular/core';
export class ApiTestingController {
constructor() {
// initialize map
this.matches = new Map();
}
/**
* Prepares a request mapper based on the given request match
* @param match
*/
match(match) {
// set temp request and prepare to get request mapper
this._match = match;
return this;
}
/**
* Maps a request (based on an in-process request match)
* with an instance of TestRequest class
* @param mapper
*/
map(mapper) {
if (this._match) {
// search if match.url already exists
const keys = Array.from(this.matches.keys());
// find key by method and url
const key = keys.find(value => {
return value.method === this._match.method && value.url === this._match.url;
});
if (key) {
// update existing item
this.matches.set(key, mapper);
}
else {
// add new
this.matches.set(this._match, mapper);
}
this._match = null;
return this;
}
throw new TypeError('Request match cannot be empty at this context. ' +
'Call CommonTestHttpController.match() first.');
}
/**
* Finds a request mapper based on the given request matcj
* @param req
*/
find(req) {
// get keys
const keys = Array.from(this.matches.keys());
// find key by method and url
const key = keys.find(value => {
return value.method === req.method && value.url === req.url;
});
// and return request mapper if any
if (key) {
return this.matches.get(key);
}
}
}
ApiTestingController.decorators = [
{ type: Injectable }
];
/** @nocollapse */
ApiTestingController.ctorParameters = () => [];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLXRlc3RpbmctY29udHJvbGxlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHVuaXZlcnNpcy9jb21tb24vdGVzdGluZy8iLCJzb3VyY2VzIjpbImFwaS10ZXN0aW5nLWNvbnRyb2xsZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBTXpDLE1BQU07SUFHRjtRQUNJLGlCQUFpQjtRQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksR0FBRyxFQUFnRCxDQUFDO0lBQzNFLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsS0FBbUI7UUFDckIscURBQXFEO1FBQ3JELElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsR0FBRyxDQUFDLE1BQXNDO1FBQ3RDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNiLHFDQUFxQztZQUNyQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUM3Qyw2QkFBNkI7WUFDN0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDMUIsT0FBTyxLQUFLLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7WUFDaEYsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLEdBQUcsRUFBRTtnQkFDTCx1QkFBdUI7Z0JBQ3ZCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQzthQUNqQztpQkFBTTtnQkFDSCxVQUFVO2dCQUNWLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDekM7WUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUNuQixPQUFPLElBQUksQ0FBQztTQUNmO1FBQ0QsTUFBTSxJQUFJLFNBQVMsQ0FBQyxpREFBaUQ7WUFDakUsOENBQThDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxDQUFDLEdBQXFCO1FBQ3RCLFdBQVc7UUFDWCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM3Qyw2QkFBNkI7UUFDN0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUMxQixPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUssR0FBRyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDaEUsQ0FBQyxDQUFDLENBQUM7UUFDSCxtQ0FBbUM7UUFDbkMsSUFBSSxHQUFHLEVBQUU7WUFDTCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2hDO0lBQ0wsQ0FBQzs7O1lBN0RKLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtSZXF1ZXN0TWF0Y2gsIFRlc3RSZXF1ZXN0fSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cC90ZXN0aW5nJztcbmltcG9ydCB7SHR0cFJlcXVlc3R9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQXBpVGVzdGluZ0NvbnRyb2xsZXIge1xuICAgIHByaXZhdGUgX21hdGNoOiBSZXF1ZXN0TWF0Y2g7XG4gICAgcHJpdmF0ZSByZWFkb25seSBtYXRjaGVzOiBNYXA8UmVxdWVzdE1hdGNoLCAocmVxdWVzdDogVGVzdFJlcXVlc3QpID0+IHZvaWQ+O1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAvLyBpbml0aWFsaXplIG1hcFxuICAgICAgICB0aGlzLm1hdGNoZXMgPSBuZXcgTWFwPFJlcXVlc3RNYXRjaCwgKHJlcXVlc3Q6IFRlc3RSZXF1ZXN0KSA9PiB2b2lkPigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByZXBhcmVzIGEgcmVxdWVzdCBtYXBwZXIgYmFzZWQgb24gdGhlIGdpdmVuIHJlcXVlc3QgbWF0Y2hcbiAgICAgKiBAcGFyYW0gbWF0Y2hcbiAgICAgKi9cbiAgICBtYXRjaChtYXRjaDogUmVxdWVzdE1hdGNoKTogQXBpVGVzdGluZ0NvbnRyb2xsZXIge1xuICAgICAgICAvLyBzZXQgdGVtcCByZXF1ZXN0IGFuZCBwcmVwYXJlIHRvIGdldCByZXF1ZXN0IG1hcHBlclxuICAgICAgICB0aGlzLl9tYXRjaCA9IG1hdGNoO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNYXBzIGEgcmVxdWVzdCAoYmFzZWQgb24gYW4gaW4tcHJvY2VzcyByZXF1ZXN0IG1hdGNoKVxuICAgICAqIHdpdGggYW4gaW5zdGFuY2Ugb2YgVGVzdFJlcXVlc3QgY2xhc3NcbiAgICAgKiBAcGFyYW0gbWFwcGVyXG4gICAgICovXG4gICAgbWFwKG1hcHBlcjogKHJlcXVlc3Q6IFRlc3RSZXF1ZXN0KSA9PiB2b2lkKTogQXBpVGVzdGluZ0NvbnRyb2xsZXIge1xuICAgICAgICBpZiAodGhpcy5fbWF0Y2gpIHtcbiAgICAgICAgICAgIC8vIHNlYXJjaCBpZiBtYXRjaC51cmwgYWxyZWFkeSBleGlzdHNcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBBcnJheS5mcm9tKHRoaXMubWF0Y2hlcy5rZXlzKCkpO1xuICAgICAgICAgICAgLy8gZmluZCBrZXkgYnkgbWV0aG9kIGFuZCB1cmxcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGtleXMuZmluZCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm1ldGhvZCA9PT0gdGhpcy5fbWF0Y2gubWV0aG9kICYmIHZhbHVlLnVybCA9PT0gdGhpcy5fbWF0Y2gudXJsO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgLy8gdXBkYXRlIGV4aXN0aW5nIGl0ZW1cbiAgICAgICAgICAgICAgICB0aGlzLm1hdGNoZXMuc2V0KGtleSwgbWFwcGVyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gYWRkIG5ld1xuICAgICAgICAgICAgICAgIHRoaXMubWF0Y2hlcy5zZXQodGhpcy5fbWF0Y2gsIG1hcHBlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9tYXRjaCA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZXF1ZXN0IG1hdGNoIGNhbm5vdCBiZSBlbXB0eSBhdCB0aGlzIGNvbnRleHQuICcgK1xuICAgICAgICAgICAgJ0NhbGwgQ29tbW9uVGVzdEh0dHBDb250cm9sbGVyLm1hdGNoKCkgZmlyc3QuJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmluZHMgYSByZXF1ZXN0IG1hcHBlciBiYXNlZCBvbiB0aGUgZ2l2ZW4gcmVxdWVzdCBtYXRjalxuICAgICAqIEBwYXJhbSByZXFcbiAgICAgKi9cbiAgICBmaW5kKHJlcTogSHR0cFJlcXVlc3Q8YW55Pik6IChyZXF1ZXN0OiBUZXN0UmVxdWVzdCkgPT4gdm9pZCB7XG4gICAgICAgIC8vIGdldCBrZXlzXG4gICAgICAgIGNvbnN0IGtleXMgPSBBcnJheS5mcm9tKHRoaXMubWF0Y2hlcy5rZXlzKCkpO1xuICAgICAgICAvLyBmaW5kIGtleSBieSBtZXRob2QgYW5kIHVybFxuICAgICAgICBjb25zdCBrZXkgPSBrZXlzLmZpbmQodmFsdWUgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm1ldGhvZCA9PT0gcmVxLm1ldGhvZCAmJiB2YWx1ZS51cmwgPT09IHJlcS51cmw7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBhbmQgcmV0dXJuIHJlcXVlc3QgbWFwcGVyIGlmIGFueVxuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXRjaGVzLmdldChrZXkpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19