import { $roleUtils } from '~/services/rights/roleUtils'

let roles: Array<string>, final_role: Array<string>

beforeEach(() => {
  roles = [
    'ROLE_BOOK_CONFIG_VIEW',
    'ROLE_ROOM_CONFIG',
    'ROLE_USER',
    'ROLE_ADMIN',
    'ROLE_ADMIN_CORE',
    'ROLE_PLACE_VIEW',
    'ROLE_ADMINISTRATIF_MANAGER_CORE'
  ]

  final_role = [
    'ROLE_GENERAL-CONFIG_VIEW',
    'ROLE_TAGG-ADVANCED',
    'ROLE_ROOM',
    'ROLE_USER_VIEW'
  ]
})

describe('isA()', () => {
  it('should have the profil of ADMINISTRATIF_MANAGER thanks to his roles', () => {
    expect($roleUtils.isA('ADMINISTRATIF_MANAGER', roles)).toBeTruthy()
  })

  it('should not have the profil of ADMINISTRATIF_MANAGER thanks to his roles', () => {
    expect($roleUtils.isA('TEACHER', roles)).toBeFalsy()
  })
})

describe('filterFunctionRoles()', () => {
  it('should filters roles to keep just roles without function', () => {
    const filter_roles = [
      'ROLE_BOOK_CONFIG_VIEW',
      'ROLE_ROOM_CONFIG',
      'ROLE_USER',
      'ROLE_PLACE_VIEW'
    ]

    expect($roleUtils.filterFunctionRoles(roles)).toStrictEqual(filter_roles)
  })
})

describe('transformUnderscoreToHyphenBeforeCompleteMigration()', () => {
  it('should transform underscore to hyphen only on role name', () => {
    const roles_to_array = [
      'ROLE_GENERAL_CONFIG_VIEW',
      'ROLE_TAGG_ADVANCED',
      'ROLE_ROOM',
      'ROLE_USER_VIEW'
    ]

    expect($roleUtils.transformUnderscoreToHyphenBeforeCompleteMigration(roles_to_array)).toStrictEqual(final_role)
  })
})

describe('transformRoleToAbilities()', () => {
  it('should convert Role to Abilities', () => {
    const abilities_to_have = [
      { action: 'read', subject: 'general-config' },
      { action: 'manage', subject: 'tagg-advanced' },
      { action: 'manage', subject: 'room' },
      { action: 'read', subject: 'user' }
    ]

    expect($roleUtils.transformRoleToAbilities(final_role)).toStrictEqual(abilities_to_have)
  })
})
