import { Account } from "./account";
import { State } from "./state";

describe("state", () => {
  describe("fromJSON", () => {
    it("should deserialize to an instance of itself", () => {
      expect(State.fromJSON({}, () => new Account({}))).toBeInstanceOf(State);
    });

    it("should always assign an object to accounts", () => {
      const state = State.fromJSON({}, () => new Account({}));
      expect(state.accounts).not.toBeNull();
      expect(state.accounts).toEqual({});
    });

    it("should build an account map", () => {
      const accountsSpy = jest.spyOn(Account, "fromJSON");
      const state = State.fromJSON(
        {
          accounts: {
            userId: {},
          },
        },
        Account.fromJSON
      );

      expect(state.accounts["userId"]).toBeInstanceOf(Account);
      expect(accountsSpy).toHaveBeenCalled();
    });
  });
});
