@ngneat/spectator
Version:
A powerful tool to simplify your Angular tests
115 lines • 15.8 kB
JavaScript
import { convertToParamMap, ActivatedRoute, ActivatedRouteSnapshot } from '@angular/router';
import { ReplaySubject } from 'rxjs';
import { map } from 'rxjs/operators';
/**
* @publicApi
*
* Utility class for stubbing ActivatedRoute of @angular/router
*/
export class ActivatedRouteStub extends ActivatedRoute {
constructor(options) {
super();
this.testParams = {};
this.testQueryParams = {};
this.testData = {};
this.testFragment = null;
this.testUrl = [];
this.testRoot = null;
this.testParent = null;
this.testFirstChild = null;
this.testChildren = null;
this.paramsSubject = new ReplaySubject(1);
this.queryParamsSubject = new ReplaySubject(1);
this.dataSubject = new ReplaySubject(1);
this.fragmentSubject = new ReplaySubject(1);
this.urlSubject = new ReplaySubject(1);
if (options) {
this.testParams = options.params || {};
this.testQueryParams = options.queryParams || {};
this.testData = options.data || {};
this.testFragment = options.fragment || null;
this.testUrl = options.url || [];
this.testRoot = options.root || null;
this.testParent = options.parent || null;
this.testFirstChild = options.firstChild || null;
this.testChildren = options.children || null;
}
this.params = this.paramsSubject.asObservable();
this.queryParams = this.queryParamsSubject.asObservable();
this.data = this.dataSubject.asObservable();
this.fragment = this.fragmentSubject.asObservable();
this.url = this.urlSubject.asObservable();
this.snapshot = this.buildSnapshot();
this.triggerNavigation();
}
get paramMap() {
return this.paramsSubject.asObservable().pipe(map((params) => convertToParamMap(params)));
}
setParams(params) {
this.testParams = params;
this.snapshot = this.buildSnapshot();
}
setParam(name, value) {
this.testParams = { ...this.testParams, [name]: value };
this.snapshot = this.buildSnapshot();
}
setQueryParams(queryParams) {
this.testQueryParams = queryParams;
this.snapshot = this.buildSnapshot();
}
setQueryParam(name, value) {
this.testQueryParams = { ...this.testQueryParams, [name]: value };
this.snapshot = this.buildSnapshot();
}
setAllData(data) {
this.testData = data;
this.snapshot = this.buildSnapshot();
}
setData(name, value) {
this.testData = { ...this.testData, [name]: value };
this.snapshot = this.buildSnapshot();
}
setFragment(fragment) {
this.testFragment = fragment;
this.snapshot = this.buildSnapshot();
}
setUrl(url) {
this.testUrl = url;
this.snapshot = this.buildSnapshot();
}
get root() {
return this.testRoot || this;
}
get parent() {
return this.testParent || null;
}
get children() {
return this.testChildren || [this];
}
get firstChild() {
return this.testFirstChild || null;
}
/**
* Simulates a route navigation by updating the Params, QueryParams and Data observable streams.
*/
triggerNavigation() {
this.paramsSubject.next(this.testParams);
this.queryParamsSubject.next(this.testQueryParams);
this.dataSubject.next(this.testData);
this.fragmentSubject.next(this.testFragment);
this.urlSubject.next(this.testUrl);
}
toString() {
return 'activatedRouteStub';
}
buildSnapshot() {
const snapshot = new ActivatedRouteSnapshot();
snapshot.params = this.testParams;
snapshot.queryParams = this.testQueryParams;
snapshot.data = this.testData;
snapshot.fragment = this.testFragment;
snapshot.url = this.testUrl;
return snapshot;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZhdGVkLXJvdXRlLXN0dWIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVjdGF0b3Ivc3JjL2xpYi9zcGVjdGF0b3Itcm91dGluZy9hY3RpdmF0ZWQtcm91dGUtc3R1Yi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLHNCQUFzQixFQUFzQyxNQUFNLGlCQUFpQixDQUFDO0FBQ2hJLE9BQU8sRUFBYyxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSXJDOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsY0FBYztJQWlCcEQsWUFBWSxPQUFzQjtRQUNoQyxLQUFLLEVBQUUsQ0FBQztRQWpCRixlQUFVLEdBQVcsRUFBRSxDQUFDO1FBQ3hCLG9CQUFlLEdBQVcsRUFBRSxDQUFDO1FBQzdCLGFBQVEsR0FBUyxFQUFFLENBQUM7UUFDcEIsaUJBQVksR0FBa0IsSUFBSSxDQUFDO1FBQ25DLFlBQU8sR0FBaUIsRUFBRSxDQUFDO1FBQzNCLGFBQVEsR0FBOEIsSUFBSSxDQUFDO1FBQzNDLGVBQVUsR0FBOEIsSUFBSSxDQUFDO1FBQzdDLG1CQUFjLEdBQThCLElBQUksQ0FBQztRQUNqRCxpQkFBWSxHQUFnQyxJQUFJLENBQUM7UUFFeEMsa0JBQWEsR0FBRyxJQUFJLGFBQWEsQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUM3Qyx1QkFBa0IsR0FBRyxJQUFJLGFBQWEsQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUNsRCxnQkFBVyxHQUFHLElBQUksYUFBYSxDQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLG9CQUFlLEdBQUcsSUFBSSxhQUFhLENBQWdCLENBQUMsQ0FBQyxDQUFDO1FBQ3RELGVBQVUsR0FBRyxJQUFJLGFBQWEsQ0FBZSxDQUFDLENBQUMsQ0FBQztR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SSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVNLFFBQVE7UUFDYixPQUFPLG9CQUFvQixDQUFDO0lBQzlCLENBQUM7SUFFTyxhQUFhO1FBQ25CLE1BQU0sUUFBUSxHQUFHLElBQUksc0JBQXNCLEVBQUUsQ0FBQztRQUU5QyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDbEMsUUFBUSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQzVDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUM5QixRQUFRLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFhLENBQUM7UUFDdkMsUUFBUSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBRTVCLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbnZlcnRUb1BhcmFtTWFwLCBBY3RpdmF0ZWRSb3V0ZSwgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgRGF0YSwgUGFyYW1zLCBQYXJhbU1hcCwgVXJsU2VnbWVudCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFJvdXRlT3B0aW9ucyB9IGZyb20gJy4vcm91dGUtb3B0aW9ucyc7XG5cbi8qKlxuICogQHB1YmxpY0FwaVxuICpcbiAqIFV0aWxpdHkgY2xhc3MgZm9yIHN0dWJiaW5nIEFjdGl2YXRlZFJvdXRlIG9mIEBhbmd1bGFyL3JvdXRlclxuICovXG5leHBvcnQgY2xhc3MgQWN0aXZhdGVkUm91dGVTdHViIGV4dGVuZHMgQWN0aXZhdGVkUm91dGUge1xuICBwcml2YXRlIHRlc3RQYXJhbXM6IFBhcmFtcyA9IHt9O1xuICBwcml2YXRlIHRlc3RRdWVyeVBhcmFtczogUGFyYW1zID0ge307XG4gIHByaXZhdGUgdGVzdERhdGE6IERhdGEgPSB7fTtcbiAgcHJpdmF0ZSB0ZXN0RnJhZ21lbnQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHRlc3RVcmw6IFVybFNlZ21lbnRbXSA9IFtdO1xuICBwcml2YXRlIHRlc3RSb290OiBBY3RpdmF0ZWRSb3V0ZVN0dWIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSB0ZXN0UGFyZW50OiBBY3RpdmF0ZWRSb3V0ZVN0dWIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSB0ZXN0Rmlyc3RDaGlsZDogQWN0aXZhdGVkUm91dGVTdHViIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgdGVzdENoaWxkcmVuOiBBY3RpdmF0ZWRSb3V0ZVN0dWJbXSB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcGFyYW1zU3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PFBhcmFtcz4oMSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcXVlcnlQYXJhbXNTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8UGFyYW1zPigxKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkYXRhU3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PERhdGE+KDEpO1xuICBwcml2YXRlIHJlYWRvbmx5IGZyYWdtZW50U3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PHN0cmluZyB8IG51bGw+KDEpO1xuICBwcml2YXRlIHJlYWRvbmx5IHVybFN1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxVcmxTZWdtZW50W10+KDEpO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBSb3V0ZU9wdGlvbnMpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIHRoaXMudGVzdFBhcmFtcyA9IG9wdGlvbnMucGFyYW1zIHx8IHt9O1xuICAgICAgdGhpcy50ZXN0UXVlcnlQYXJhbXMgPSBvcHRpb25zLnF1ZXJ5UGFyYW1zIHx8IHt9O1xuICAgICAgdGhpcy50ZXN0RGF0YSA9IG9wdGlvbnMuZGF0YSB8fCB7fTtcbiAgICAgIHRoaXMudGVzdEZyYWdtZW50ID0gb3B0aW9ucy5mcmFnbWVudCB8fCBudWxsO1xuICAgICAgdGhpcy50ZXN0VXJsID0gb3B0aW9ucy51cmwgfHwgW107XG4gICAgICB0aGlzLnRlc3RSb290ID0gb3B0aW9ucy5yb290IHx8IG51bGw7XG4gICAgICB0aGlzLnRlc3RQYXJlbnQgPSBvcHRpb25zLnBhcmVudCB8fCBudWxsO1xuICAgICAgdGhpcy50ZXN0Rmlyc3RDaGlsZCA9IG9wdGlvbnMuZmlyc3RDaGlsZCB8fCBudWxsO1xuICAgICAgdGhpcy50ZXN0Q2hpbGRyZW4gPSBvcHRpb25zLmNoaWxkcmVuIHx8IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5wYXJhbXMgPSB0aGlzLnBhcmFtc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5xdWVyeVBhcmFtcyA9IHRoaXMucXVlcnlQYXJhbXNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5mcmFnbWVudCA9IHRoaXMuZnJhZ21lbnRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpIGFzIE9ic2VydmFibGU8c3RyaW5nPjtcbiAgICB0aGlzLnVybCA9IHRoaXMudXJsU3ViamVjdC5hc09ic2VydmFibGUoKSBhcyBPYnNlcnZhYmxlPFVybFNlZ21lbnRbXT47XG5cbiAgICB0aGlzLnNuYXBzaG90ID0gdGhpcy5idWlsZFNuYXBzaG90KCk7XG5cbiAgICB0aGlzLnRyaWdnZXJOYXZpZ2F0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHBhcmFtTWFwKCk6IE9ic2VydmFibGU8UGFyYW1NYXA+IHtcbiAgICByZXR1cm4gdGhpcy5wYXJhbXNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUobWFwKChwYXJhbXMpID0+IGNvbnZlcnRUb1BhcmFtTWFwKHBhcmFtcykpKTtcbiAgfVxuXG4gIHB1YmxpYyBzbmFwc2hvdDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdDtcblxuICBwdWJsaWMgc2V0UGFyYW1zKHBhcmFtczogUGFyYW1zKTogdm9pZCB7XG4gICAgdGhpcy50ZXN0UGFyYW1zID0gcGFyYW1zO1xuICAgIHRoaXMuc25hcHNob3QgPSB0aGlzLmJ1aWxkU25hcHNob3QoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRQYXJhbShuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnRlc3RQYXJhbXMgPSB7IC4uLnRoaXMudGVzdFBhcmFtcywgW25hbWVdOiB2YWx1ZSB9O1xuICAgIHRoaXMuc25hcHNob3QgPSB0aGlzLmJ1aWxkU25hcHNob3QoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRRdWVyeVBhcmFtcyhxdWVyeVBhcmFtczogUGFyYW1zKTogdm9pZCB7XG4gICAgdGhpcy50ZXN0UXVlcnlQYXJhbXMgPSBxdWVyeVBhcmFtcztcbiAgICB0aGlzLnNuYXBzaG90ID0gdGhpcy5idWlsZFNuYXBzaG90KCk7XG4gIH1cblxuICBwdWJsaWMgc2V0UXVlcnlQYXJhbShuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnRlc3RRdWVyeVBhcmFtcyA9IHsgLi4udGhpcy50ZXN0UXVlcnlQYXJhbXMsIFtuYW1lXTogdmFsdWUgfTtcbiAgICB0aGlzLnNuYXBzaG90ID0gdGhpcy5idWlsZFNuYXBzaG90KCk7XG4gIH1cblxuICBwdWJsaWMgc2V0QWxsRGF0YShkYXRhOiBEYXRhKTogdm9pZCB7XG4gICAgdGhpcy50ZXN0RGF0YSA9IGRhdGE7XG4gICAgdGhpcy5zbmFwc2hvdCA9IHRoaXMuYnVpbGRTbmFwc2hvdCgpO1xuICB9XG5cbiAgcHVibGljIHNldERhdGEobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy50ZXN0RGF0YSA9IHsgLi4udGhpcy50ZXN0RGF0YSwgW25hbWVdOiB2YWx1ZSB9O1xuICAgIHRoaXMuc25hcHNob3QgPSB0aGlzLmJ1aWxkU25hcHNob3QoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRGcmFnbWVudChmcmFnbWVudDogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMudGVzdEZyYWdtZW50ID0gZnJhZ21lbnQ7XG4gICAgdGhpcy5zbmFwc2hvdCA9IHRoaXMuYnVpbGRTbmFwc2hvdCgpO1xuICB9XG5cbiAgcHVibGljIHNldFVybCh1cmw6IFVybFNlZ21lbnRbXSk6IHZvaWQge1xuICAgIHRoaXMudGVzdFVybCA9IHVybDtcbiAgICB0aGlzLnNuYXBzaG90ID0gdGhpcy5idWlsZFNuYXBzaG90KCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJvb3QoKTogQWN0aXZhdGVkUm91dGVTdHViIHtcbiAgICByZXR1cm4gdGhpcy50ZXN0Um9vdCB8fCB0aGlzO1xuICB9XG5cbiAgcHVibGljIGdldCBwYXJlbnQoKTogQWN0aXZhdGVkUm91dGVTdHViIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMudGVzdFBhcmVudCB8fCBudWxsO1xuICB9XG5cbiAgcHVibGljIGdldCBjaGlsZHJlbigpOiBBY3RpdmF0ZWRSb3V0ZVN0dWJbXSB7XG4gICAgcmV0dXJuIHRoaXMudGVzdENoaWxkcmVuIHx8IFt0aGlzXTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZmlyc3RDaGlsZCgpOiBBY3RpdmF0ZWRSb3V0ZVN0dWIgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy50ZXN0Rmlyc3RDaGlsZCB8fCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpbXVsYXRlcyBhIHJvdXRlIG5hdmlnYXRpb24gYnkgdXBkYXRpbmcgdGhlIFBhcmFtcywgUXVlcnlQYXJhbXMgYW5kIERhdGEgb2JzZXJ2YWJsZSBzdHJlYW1zLlxuICAgKi9cbiAgcHVibGljIHRyaWdnZXJOYXZpZ2F0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMucGFyYW1zU3ViamVjdC5uZXh0KHRoaXMudGVzdFBhcmFtcyk7XG4gICAgdGhpcy5xdWVyeVBhcmFtc1N1YmplY3QubmV4dCh0aGlzLnRlc3RRdWVyeVBhcmFtcyk7XG4gICAgdGhpcy5kYXRhU3ViamVjdC5uZXh0KHRoaXMudGVzdERhdGEpO1xuICAgIHRoaXMuZnJhZ21lbnRTdWJqZWN0Lm5leHQodGhpcy50ZXN0RnJhZ21lbnQpO1xuICAgIHRoaXMudXJsU3ViamVjdC5uZXh0KHRoaXMudGVzdFVybCk7XG4gIH1cblxuICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ2FjdGl2YXRlZFJvdXRlU3R1Yic7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU25hcHNob3QoKTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB7XG4gICAgY29uc3Qgc25hcHNob3QgPSBuZXcgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCgpO1xuXG4gICAgc25hcHNob3QucGFyYW1zID0gdGhpcy50ZXN0UGFyYW1zO1xuICAgIHNuYXBzaG90LnF1ZXJ5UGFyYW1zID0gdGhpcy50ZXN0UXVlcnlQYXJhbXM7XG4gICAgc25hcHNob3QuZGF0YSA9IHRoaXMudGVzdERhdGE7XG4gICAgc25hcHNob3QuZnJhZ21lbnQgPSB0aGlzLnRlc3RGcmFnbWVudCE7XG4gICAgc25hcHNob3QudXJsID0gdGhpcy50ZXN0VXJsO1xuXG4gICAgcmV0dXJuIHNuYXBzaG90O1xuICB9XG59XG4iXX0=