import { describe, expect, it } from 'vitest' import { addAppCreatorToOnboarding, buildAppCreatedTrackingIdentity, buildAppCreatorEventDetails, getAppCreatorUserId, resolveAppCreatorEmail, } from '../supabase/functions/_backend/utils/app_creator.ts' const creatorUserId = '6aa76066-55ef-4238-ade6-0b32334a4097' describe('app creator metadata', () => { it.concurrent('stores the authenticated creator without dropping onboarding state', () => { const onboarding = addAppCreatorToOnboarding({ features: { ota: { stage: 'local_only' } }, }, creatorUserId, 'creator@capgo.app') expect(onboarding).toEqual({ created_by_email: 'creator@capgo.app', created_by_user_id: creatorUserId, features: { ota: { stage: 'local_only' } }, }) expect(getAppCreatorUserId(onboarding)).toBe(creatorUserId) }) it.concurrent('builds Bento event details with the creator id and email', () => { expect(buildAppCreatorEventDetails({ created_by_email: 'creator@capgo.app', created_by_user_id: creatorUserId, })).toEqual({ created_by_user_id: creatorUserId, created_by_email: 'creator@capgo.app', }) }) it.concurrent('uses the stored user email when JWT claims do not contain one', () => { expect(resolveAppCreatorEmail(undefined, 'creator@capgo.app')).toBe('creator@capgo.app') expect(resolveAppCreatorEmail('', 'creator@capgo.app')).toBe('creator@capgo.app') }) it.concurrent('omits invalid or missing creator metadata', () => { expect(getAppCreatorUserId({ created_by_user_id: 'not-a-user-id' })).toBeUndefined() expect(buildAppCreatorEventDetails({ created_by_email: 'creator@capgo.app' })).toEqual({}) }) it.concurrent('attributes App Created to the creator user with its creation source', () => { const orgId = '046a36ac-e03c-4590-9257-bd6c9dba9ee8' expect(buildAppCreatedTrackingIdentity({ created_by_user_id: creatorUserId, setup: { source: 'cli' } }, orgId)) .toEqual({ user_id: creatorUserId, source: 'cli' }) expect(buildAppCreatedTrackingIdentity({ created_by_user_id: creatorUserId, source: 'ai' }, orgId)) .toEqual({ user_id: creatorUserId, source: 'ai' }) expect(buildAppCreatedTrackingIdentity(null, orgId)).toEqual({ user_id: orgId, source: 'unknown' }) }) })