2022-08-16 14:05:03 +02:00
|
|
|
import { BehaviorSubject } from "rxjs";
|
|
|
|
|
2022-11-23 23:26:57 +01:00
|
|
|
import { BrowserStateService } from "../../services/browser-state.service";
|
2022-08-16 14:05:03 +02:00
|
|
|
|
|
|
|
import { browserSession } from "./browser-session.decorator";
|
|
|
|
import { SessionStorable } from "./session-storable";
|
|
|
|
import { sessionSync } from "./session-sync.decorator";
|
|
|
|
|
|
|
|
// browserSession initializes SessionSyncers for each sessionSync decorated property
|
|
|
|
// We don't want to test SessionSyncers, so we'll mock them
|
|
|
|
jest.mock("./session-syncer");
|
|
|
|
|
|
|
|
describe("browserSession decorator", () => {
|
|
|
|
it("should throw if StateService is not a constructor argument", () => {
|
|
|
|
@browserSession
|
|
|
|
class TestClass {}
|
|
|
|
expect(() => {
|
|
|
|
new TestClass();
|
|
|
|
}).toThrowError(
|
|
|
|
"Cannot decorate TestClass with browserSession, Browser's StateService must be injected"
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("should create if StateService is a constructor argument", () => {
|
2022-11-23 23:26:57 +01:00
|
|
|
const stateService = Object.create(BrowserStateService.prototype, {});
|
2022-08-16 14:05:03 +02:00
|
|
|
|
|
|
|
@browserSession
|
|
|
|
class TestClass {
|
2022-11-23 23:26:57 +01:00
|
|
|
constructor(private stateService: BrowserStateService) {}
|
2022-08-16 14:05:03 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
expect(new TestClass(stateService)).toBeDefined();
|
|
|
|
});
|
|
|
|
|
|
|
|
describe("interaction with @sessionSync decorator", () => {
|
2022-11-23 23:26:57 +01:00
|
|
|
let stateService: BrowserStateService;
|
2022-08-16 14:05:03 +02:00
|
|
|
|
|
|
|
@browserSession
|
|
|
|
class TestClass {
|
|
|
|
@sessionSync({ initializer: (s: string) => s })
|
2022-11-01 11:25:46 +01:00
|
|
|
private behaviorSubject = new BehaviorSubject("");
|
2022-08-16 14:05:03 +02:00
|
|
|
|
2022-11-23 23:26:57 +01:00
|
|
|
constructor(private stateService: BrowserStateService) {}
|
2022-08-16 14:05:03 +02:00
|
|
|
|
|
|
|
fromJSON(json: any) {
|
|
|
|
this.behaviorSubject.next(json);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
beforeEach(() => {
|
2022-11-23 23:26:57 +01:00
|
|
|
stateService = Object.create(BrowserStateService.prototype, {}) as BrowserStateService;
|
2022-08-16 14:05:03 +02:00
|
|
|
});
|
|
|
|
|
|
|
|
it("should create a session syncer", () => {
|
|
|
|
const testClass = new TestClass(stateService) as any as SessionStorable;
|
|
|
|
expect(testClass.__sessionSyncers.length).toEqual(1);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("should initialize the session syncer", () => {
|
|
|
|
const testClass = new TestClass(stateService) as any as SessionStorable;
|
|
|
|
expect(testClass.__sessionSyncers[0].init).toHaveBeenCalled();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|