import { TestScheduler } from "rxjs/testing";

import { withTimeout$ } from "..";

describe("withTimeout$", () => {
  let testScheduler: TestScheduler;

  beforeEach(() => {
    testScheduler = new TestScheduler((actual, expected) => {
      expect(actual).toEqual(expected);
    });
  });

  it("should emit undefined after the specified timeout", () => {
    testScheduler.run(({ expectObservable }) => {
      const timeout = 1000;
      const expectedMarble = "1s (a|)";
      const expectedValues = { a: undefined };

      const result$ = withTimeout$(timeout);

      expectObservable(result$).toBe(expectedMarble, expectedValues);
    });
  });

  it("should complete after emitting undefined", () => {
    testScheduler.run(({ expectObservable }) => {
      const timeout = 500;
      const expectedMarble = "500ms (a|)";
      const expectedValues = { a: undefined };

      const result$ = withTimeout$(timeout);

      expectObservable(result$).toBe(expectedMarble, expectedValues);
    });
  });
});
