110 lines
4.7 KiB
TypeScript
110 lines
4.7 KiB
TypeScript
import { expect, test } from 'vitest';
|
|
import { getComponentDefinition } from '@/app/(main)/boards/boardComponentRegistry';
|
|
import {
|
|
BOARD_COMPONENT_COMPATIBILITY_MATRIX,
|
|
getSupportedBoardComponentEntityTypes,
|
|
} from './boardComponentCompatibility';
|
|
import { BOARD_ENTITY_TYPES, isBoardComponentSupported } from './boards';
|
|
|
|
test('isBoardComponentSupported allows events chart on website boards', () => {
|
|
expect(isBoardComponentSupported('EventsChart', BOARD_ENTITY_TYPES.website)).toBe(true);
|
|
});
|
|
|
|
test('isBoardComponentSupported rejects events chart on pixel and link boards', () => {
|
|
expect(isBoardComponentSupported('EventsChart', BOARD_ENTITY_TYPES.pixel)).toBe(false);
|
|
expect(isBoardComponentSupported('EventsChart', BOARD_ENTITY_TYPES.link)).toBe(false);
|
|
});
|
|
|
|
test('isBoardComponentSupported rejects event metrics bar and weekly traffic on pixel and link boards', () => {
|
|
expect(isBoardComponentSupported('EventsMetricsBar', BOARD_ENTITY_TYPES.pixel)).toBe(false);
|
|
expect(isBoardComponentSupported('EventsMetricsBar', BOARD_ENTITY_TYPES.link)).toBe(false);
|
|
expect(isBoardComponentSupported('WeeklyTraffic', BOARD_ENTITY_TYPES.pixel)).toBe(false);
|
|
expect(isBoardComponentSupported('WeeklyTraffic', BOARD_ENTITY_TYPES.link)).toBe(false);
|
|
});
|
|
|
|
test('board component compatibility matrix defines website-only components explicitly', () => {
|
|
expect(BOARD_COMPONENT_COMPATIBILITY_MATRIX.EventsMetricsBar).toEqual([
|
|
BOARD_ENTITY_TYPES.website,
|
|
]);
|
|
expect(BOARD_COMPONENT_COMPATIBILITY_MATRIX.EventsChart).toEqual([BOARD_ENTITY_TYPES.website]);
|
|
expect(BOARD_COMPONENT_COMPATIBILITY_MATRIX.Funnel).toEqual([BOARD_ENTITY_TYPES.website]);
|
|
expect(BOARD_COMPONENT_COMPATIBILITY_MATRIX.Goal).toEqual([BOARD_ENTITY_TYPES.website]);
|
|
expect(BOARD_COMPONENT_COMPATIBILITY_MATRIX.RealtimeActiveUsers).toEqual([
|
|
BOARD_ENTITY_TYPES.website,
|
|
]);
|
|
expect(BOARD_COMPONENT_COMPATIBILITY_MATRIX.RealtimeHeader).toEqual([BOARD_ENTITY_TYPES.website]);
|
|
expect(BOARD_COMPONENT_COMPATIBILITY_MATRIX.RealtimeChart).toEqual([BOARD_ENTITY_TYPES.website]);
|
|
expect(BOARD_COMPONENT_COMPATIBILITY_MATRIX.RevenueMetricsBar).toEqual([
|
|
BOARD_ENTITY_TYPES.website,
|
|
]);
|
|
expect(BOARD_COMPONENT_COMPATIBILITY_MATRIX.RevenueChart).toEqual([BOARD_ENTITY_TYPES.website]);
|
|
expect(BOARD_COMPONENT_COMPATIBILITY_MATRIX.RevenueMetricsTable).toEqual([
|
|
BOARD_ENTITY_TYPES.website,
|
|
]);
|
|
expect(BOARD_COMPONENT_COMPATIBILITY_MATRIX.UTM).toEqual([BOARD_ENTITY_TYPES.website]);
|
|
expect(BOARD_COMPONENT_COMPATIBILITY_MATRIX.WeeklyTraffic).toEqual([BOARD_ENTITY_TYPES.website]);
|
|
expect(getSupportedBoardComponentEntityTypes('EventsMetricsBar')).toEqual([
|
|
BOARD_ENTITY_TYPES.website,
|
|
]);
|
|
expect(getSupportedBoardComponentEntityTypes('EventsChart')).toEqual([
|
|
BOARD_ENTITY_TYPES.website,
|
|
]);
|
|
expect(getSupportedBoardComponentEntityTypes('Funnel')).toEqual([BOARD_ENTITY_TYPES.website]);
|
|
expect(getSupportedBoardComponentEntityTypes('Goal')).toEqual([BOARD_ENTITY_TYPES.website]);
|
|
expect(getSupportedBoardComponentEntityTypes('RealtimeActiveUsers')).toEqual([
|
|
BOARD_ENTITY_TYPES.website,
|
|
]);
|
|
expect(getSupportedBoardComponentEntityTypes('RealtimeHeader')).toEqual([
|
|
BOARD_ENTITY_TYPES.website,
|
|
]);
|
|
expect(getSupportedBoardComponentEntityTypes('RealtimeChart')).toEqual([
|
|
BOARD_ENTITY_TYPES.website,
|
|
]);
|
|
expect(getSupportedBoardComponentEntityTypes('RevenueMetricsBar')).toEqual([
|
|
BOARD_ENTITY_TYPES.website,
|
|
]);
|
|
expect(getSupportedBoardComponentEntityTypes('RevenueChart')).toEqual([
|
|
BOARD_ENTITY_TYPES.website,
|
|
]);
|
|
expect(getSupportedBoardComponentEntityTypes('RevenueMetricsTable')).toEqual([
|
|
BOARD_ENTITY_TYPES.website,
|
|
]);
|
|
expect(getSupportedBoardComponentEntityTypes('UTM')).toEqual([BOARD_ENTITY_TYPES.website]);
|
|
expect(getSupportedBoardComponentEntityTypes('WeeklyTraffic')).toEqual([
|
|
BOARD_ENTITY_TYPES.website,
|
|
]);
|
|
});
|
|
|
|
test('isBoardComponentSupported leaves other components available for all board entities', () => {
|
|
expect(isBoardComponentSupported('WebsiteChart', BOARD_ENTITY_TYPES.pixel)).toBe(true);
|
|
expect(isBoardComponentSupported('TextBlock', BOARD_ENTITY_TYPES.link)).toBe(true);
|
|
});
|
|
|
|
test('metrics table limits pixel and link boards to overview-page metric types', () => {
|
|
const definition = getComponentDefinition('MetricsTable');
|
|
const options = definition?.configFields?.find(
|
|
field => field.name === 'type',
|
|
)?.optionsByEntityType;
|
|
|
|
expect(options?.pixel?.map(option => option.value)).toEqual([
|
|
'referrer',
|
|
'channel',
|
|
'country',
|
|
'region',
|
|
'city',
|
|
'browser',
|
|
'os',
|
|
'device',
|
|
]);
|
|
expect(options?.link?.map(option => option.value)).toEqual([
|
|
'referrer',
|
|
'channel',
|
|
'country',
|
|
'region',
|
|
'city',
|
|
'browser',
|
|
'os',
|
|
'device',
|
|
]);
|
|
});
|