const AuthAPI = require("../AuthAPI");

describe("Auth API", () => {
  beforeEach(done => {
    AuthAPI.removeAllRevokedTokens().then(() => done(), done);
  });

  it("creates tokens with the right scopes", done => {
    const scopes = {
      blacklist: {
        add: true,
        remove: true
      }
    };

    AuthAPI.createToken(scopes).then(token => {
      AuthAPI.verifyToken(token).then(payload => {
        expect(payload.jti).toEqual(expect.any(String));
        expect(payload.iss).toEqual(expect.any(String));
        expect(payload.iat).toEqual(expect.any(Number));
        expect(payload.scopes).toMatchObject(scopes);
        done();
      });
    });
  });

  it("refuses to verify revoked tokens", done => {
    const scopes = {};

    AuthAPI.createToken(scopes).then(token => {
      AuthAPI.revokeToken(token).then(() => {
        AuthAPI.verifyToken(token).then(payload => {
          expect(payload).toBe(null);
          done();
        });
      });
    });
  });
});