UNPKG

sanity

Version:

Sanity is a real-time content infrastructure with a scalable, hosted backend featuring a Graph Oriented Query Language (GROQ), asset pipelines and fast edge caches

60 lines (48 loc) 1.65 kB
import {expect, test} from '@jest/globals' import {type ConditionalPropertyCallbackContext, type CurrentUser} from '@sanity/types' import {userHasRole} from './userHasRole' const roleLessUser: CurrentUser = { id: 'pabc123', email: 'some@user.com', name: 'Some User', role: '', roles: [], } const conditionalContextUser: ConditionalPropertyCallbackContext['currentUser'] = { id: 'pabc123', email: 'some@user.com', name: 'Some User', roles: [{name: 'administrator', title: 'Administrator'}], } const adminUser: CurrentUser = { ...roleLessUser, role: 'administrator', // Legacy roles: [{name: 'administrator', title: 'Administrator'}], } const multiRoleUser: CurrentUser = { ...adminUser, role: 'editor', // Legacy roles: [ {name: 'translator', title: 'Translator'}, {name: 'editor', title: 'Editor'}, ], } test('userHasRole(): no roles', () => { expect(userHasRole(roleLessUser, 'administrator')).toBe(false) }) test('userHasRole(): no match', () => { expect(userHasRole(adminUser, 'dogwalker')).toBe(false) }) test('userHasRole(): match (single role)', () => { expect(userHasRole(adminUser, 'administrator')).toBe(true) }) test('userHasRole(): match (multiple roles)', () => { expect(userHasRole(multiRoleUser, 'editor')).toBe(true) }) test('userHasRole(): no match (multiple roles)', () => { expect(userHasRole(multiRoleUser, 'administrator')).toBe(false) }) test('userHasRole(): conditional property callback context (no `role` prop)', () => { expect(userHasRole(conditionalContextUser, 'administrator')).toBe(true) expect(userHasRole(conditionalContextUser, 'dogwalker')).toBe(false) })