LearnersGuild/idm-jwt-auth

View on GitHub
src/__tests__/utils-test.js

Summary

Maintainability
A
0 mins
Test Coverage
import test from 'ava'

import {jwtClaimsForUser, userFromJWTClaims} from '../utils'

const testUser = {
  id: 'aaaabbbb-cccc-dddd-eeee-ffff11112222',
  name: 'Me Example',
  handle: 'meexample',
  email: 'me@example.com',
  emails: [
    'me@example.com',
    'me2@example.com',
  ],
  dateOfBirth: new Date(Date.UTC(1980, 0, 1, 0, 0, 0, 0)),
  phone: 4159876543,
  timezone: 'America/Los_Angeles',
  roles: ['somerole', 'anotherrole'],
}

/* eslint-disable camelcase */
const testClaims = {
  sub: 'aaaabbbb-cccc-dddd-eeee-ffff11112222',
  name: 'Me Example',
  preferred_username: 'meexample',
  email: 'me@example.com',
  emails: 'me@example.com,me2@example.com',
  birthdate: '1980-01-01',
  zoneinfo: 'America/Los_Angeles',
  phone_number: 4159876543,
  roles: 'somerole,anotherrole'
}

test('jwtClaimsForUser presents correct data', t => {
  t.plan(9)
  const claims = jwtClaimsForUser(testUser)
  t.is(claims.sub, testUser.id)
  t.is(claims.name, testUser.name)
  t.is(claims.preferred_username, testUser.handle)
  t.is(claims.email, testUser.email)
  t.is(claims.emails, testUser.emails.join(','))
  t.is(claims.birthdate, testUser.dateOfBirth.toISOString().slice(0, 10))
  t.is(claims.zoneinfo, testUser.timezone)
  t.is(claims.phone_number, testUser.phone)
  t.is(claims.roles, testUser.roles.join(','))
})

test('jwtClaimsForUser with non-Date dateOfBirth presents correct data', t => {
  t.plan(9)
  const specialTestUser = Object.assign({}, testUser, {dateOfBirth: '1973-10-23T00:00:00.000Z'})
  const claims = jwtClaimsForUser(specialTestUser)
  t.is(claims.sub, specialTestUser.id)
  t.is(claims.name, specialTestUser.name)
  t.is(claims.preferred_username, specialTestUser.handle)
  t.is(claims.email, specialTestUser.email)
  t.is(claims.emails, specialTestUser.emails.join(','))
  t.is(claims.birthdate, specialTestUser.dateOfBirth)
  t.is(claims.zoneinfo, specialTestUser.timezone)
  t.is(claims.phone_number, specialTestUser.phone)
  t.is(claims.roles, specialTestUser.roles.join(','))
})

test('userFromJWTClaims presents correct data', t => {
  t.plan(9)
  const user = userFromJWTClaims(testClaims)
  t.is(user.id, testClaims.sub)
  t.is(user.name, testClaims.name)
  t.is(user.handle, testClaims.preferred_username)
  t.is(user.email, testClaims.email)
  t.is(user.emails.join(','), testClaims.emails)
  t.is(user.dateOfBirth.toISOString().slice(0, 10), testClaims.birthdate)
  t.is(user.timezone, testClaims.zoneinfo)
  t.is(user.phone, testClaims.phone_number)
  t.is(user.roles.join(','), testClaims.roles)
})