Files
gridpilot.gg/apps/website/lib/view-models/RecordEngagementInputViewModel.test.ts
2026-01-24 01:25:46 +01:00

48 lines
1.4 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import { RecordEngagementInputViewModel } from './RecordEngagementInputViewModel';
describe('RecordEngagementInputViewModel', () => {
it('maps basic fields from input data', () => {
const vm = new RecordEngagementInputViewModel({
eventType: 'button_click',
userId: 'user-1',
metadata: { key: 'value' },
});
expect(vm.eventType).toBe('button_click');
expect(vm.userId).toBe('user-1');
expect(vm.metadata).toEqual({ key: 'value' });
});
it('derives displayEventType from snake_case eventType', () => {
const vm = new RecordEngagementInputViewModel({
eventType: 'page_view',
});
expect(vm.displayEventType).toBe('Page View');
});
it('detects presence of metadata and counts keys', () => {
const withMetadata = new RecordEngagementInputViewModel({
eventType: 'test',
metadata: { a: 1, b: 2 },
});
const withoutMetadata = new RecordEngagementInputViewModel({
eventType: 'test',
});
const emptyMetadata = new RecordEngagementInputViewModel({
eventType: 'test',
metadata: {},
});
expect(withMetadata.hasMetadata).toBe(true);
expect(withMetadata.metadataKeysCount).toBe(2);
expect(withoutMetadata.hasMetadata).toBe(false);
expect(withoutMetadata.metadataKeysCount).toBe(0);
expect(emptyMetadata.hasMetadata).toBe(false);
expect(emptyMetadata.metadataKeysCount).toBe(0);
});
});