import { JWTTokenModel } from './jwt.model';

describe('auth: jwt.model', () => {
  const model = new JWTTokenModel();
  beforeEach(() => {
    // from: https://jwt.io/
    model.token = `eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1OTg1NDEzOTYsImlhdCI6MTU5ODUxMTM5NiwibmJmIjoxNTk4NTExMzk2LCJqdGkiOiIyOWIzNzJmZC0yMDRiLTRlODQtOTEzZC1jYjFmZjVlYTA2MGUiLCJpZGVudGl0eSI6ImFkbWluIiwiZnJlc2giOmZhbHNlLCJ0eXBlIjoiYWNjZXNzIiwidXNlcl9jbGFpbXMiOnsidXNlcm5hbWUiOiJhZG1pbiIsIm5pY2tuYW1lIjoiXHU3YmExXHU3NDA2XHU1NDU4Iiwic3RhdHVzIjoxLCJ1c2VyX2lkIjoxLCJyb2xlX2lkcyI6WzFdLCJyb2xlX25hbWVfbGlzdCI6WyJcdTdiYTFcdTc0MDZcdTU0NTgiXX19.VIJnS_lzRWd9t03z6wyuZ1xJZvxTCutfnEE21R_F_Oc`;
  });
  const payloadDATA = {
    name: 'datagrand',
    user_claims: {
      username: 'admin'
    }
  };

  describe('#payload', () => {
    it('should be decoded', () => {
      const payload = model.payload;
      console.log('payload', payload);
      expect(payload.user_claims.username).toBe(payloadDATA.user_claims.username);
    });
    it('should be throw error when token is null or undefined', () => {
      expect(() => {
        model.token = null;
        const payload = model.payload;
        console.log(payload);
      }).toThrowError();
      expect(() => {
        model.token = undefined;
        const payload = model.payload;
        console.log(payload);
      }).toThrowError();
    });
    it('should be throw error when invalid token length', () => {
      expect(() => {
        model.token = `a`;
        const payload = model.payload;
        console.log(payload);
      }).toThrowError();
      expect(() => {
        model.token = `a.a.a`;
        const payload = model.payload;
        console.log(payload);
      }).toThrowError();
    });
    it('should be throw error when invalid token', () => {
      expect(() => {
        model.token = `a.aa.a`;
        const payload = model.payload;
        console.log(payload);
      }).toThrowError();
    });
    it(`should be throw error when can't decode the token`, () => {
      expect(() => {
        model.token = `a.aaa.a`;
        const payload = model.payload;
        console.log(payload);
      }).toThrowError();
    });
  });
});
