import { describe, expect, it } from 'vitest' import { canAssignAudience, canSee, visibleAudiences } from '~/domain/audience' import type { Audience, ViewerScope } from '~/domain/types' const cases: [ViewerScope, Audience, boolean][] = [ ['internal', 'internal', true], ['internal', 'customer', true], ['internal', 'public', true], ['customer', 'internal', false], ['customer', 'customer', true], ['customer', 'public', true], ['public', 'internal', false], ['public', 'customer', false], ['public', 'public', true], ] describe('canSee', () => { for (const [scope, audience, expected] of cases) { it(`${scope} sieht ${audience}: ${expected}`, () => { expect(canSee(scope, audience)).toBe(expected) }) } }) describe('visibleAudiences', () => { it('gibt für intern alle Zielgruppen zurück', () => { expect(visibleAudiences('internal').sort()).toEqual(['customer', 'internal', 'public']) }) it('gibt für Kunden keine internen Beiträge zurück', () => { expect(visibleAudiences('customer').sort()).toEqual(['customer', 'public']) }) it('gibt öffentlich nur öffentliche Beiträge zurück', () => { expect(visibleAudiences('public')).toEqual(['public']) }) }) describe('canAssignAudience', () => { const cases: [ViewerScope, Audience, boolean][] = [ ['internal', 'internal', true], ['internal', 'customer', false], ['internal', 'public', false], ['customer', 'internal', true], ['customer', 'customer', true], ['customer', 'public', false], ['public', 'internal', true], ['public', 'customer', true], ['public', 'public', true], ] for (const [scope, audience, expected] of cases) { it(`${scope} darf ${audience} setzen: ${expected}`, () => { expect(canAssignAudience(scope, audience)).toBe(expected) }) } })