orca/src/shared/setup-script-telemetry-even...

162 lines
5.1 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import { eventSchemas, setupScriptImportProviderSchema } from './telemetry-events'
describe('setup script prompt schemas', () => {
it('accepts a bucketed candidate prompt exposure', () => {
const parsed = eventSchemas.setup_script_prompt_shown.safeParse({
mode: 'import_available',
provider: 'codex',
file_count_bucket: '1',
unsupported_field_count_bucket: '2-3',
has_shared_hooks: false
})
expect(parsed.success).toBe(true)
})
it('accepts configure prompt actions without a provider', () => {
const parsed = eventSchemas.setup_script_prompt_action.safeParse({
action: 'configure_clicked',
mode: 'configure_needed',
file_count_bucket: '0',
unsupported_field_count_bucket: '0',
has_shared_hooks: true
})
expect(parsed.success).toBe(true)
})
it.each([
'save_detected_setup_clicked',
'save_detected_setup_completed',
'save_detected_setup_failed'
])('accepts %s detected setup save actions', (action) => {
const parsed = eventSchemas.setup_script_prompt_action.safeParse({
action,
mode: 'import_available',
provider: 'package-manager',
file_count_bucket: '2-3',
unsupported_field_count_bucket: '0',
has_shared_hooks: false,
edited_before_save: true
})
expect(parsed.success).toBe(true)
})
it('rejects detected setup save actions without edit state', () => {
const parsed = eventSchemas.setup_script_prompt_action.safeParse({
action: 'save_detected_setup_completed',
mode: 'import_available',
provider: 'package-manager',
file_count_bucket: '2-3',
unsupported_field_count_bucket: '0',
has_shared_hooks: false
})
expect(parsed.success).toBe(false)
})
it('rejects detected setup save actions for non-package-manager imports', () => {
const parsed = eventSchemas.setup_script_prompt_action.safeParse({
action: 'save_detected_setup_completed',
mode: 'import_available',
provider: 'codex',
file_count_bucket: '1',
unsupported_field_count_bucket: '0',
has_shared_hooks: false,
edited_before_save: false
})
expect(parsed.success).toBe(false)
})
it('rejects unknown setup import providers', () => {
const parsed = eventSchemas.setup_script_prompt_shown.safeParse({
mode: 'import_available',
provider: 'made_up_tool',
file_count_bucket: '1',
unsupported_field_count_bucket: '0',
has_shared_hooks: false
})
expect(parsed.success).toBe(false)
})
it('rejects candidate prompt exposure without a provider', () => {
const parsed = eventSchemas.setup_script_prompt_shown.safeParse({
mode: 'import_available',
file_count_bucket: '1',
unsupported_field_count_bucket: '0',
has_shared_hooks: false
})
expect(parsed.success).toBe(false)
})
it('rejects configure prompt actions with a provider', () => {
const parsed = eventSchemas.setup_script_prompt_action.safeParse({
action: 'configure_clicked',
mode: 'configure_needed',
provider: 'codex',
file_count_bucket: '0',
unsupported_field_count_bucket: '0',
has_shared_hooks: false
})
expect(parsed.success).toBe(false)
})
it('rejects edit state on non-save actions', () => {
const parsed = eventSchemas.setup_script_prompt_action.safeParse({
action: 'configure_clicked',
mode: 'configure_needed',
file_count_bucket: '0',
unsupported_field_count_bucket: '0',
has_shared_hooks: false,
edited_before_save: true
})
expect(parsed.success).toBe(false)
})
it('rejects raw setup import details via .strict()', () => {
const parsed = eventSchemas.setup_script_prompt_action.safeParse({
action: 'import_completed',
mode: 'import_available',
provider: 'codex',
file_count_bucket: '1',
unsupported_field_count_bucket: '0',
has_shared_hooks: false,
files: ['.codex/environments/environment.toml'],
setup: 'npm install'
})
expect(parsed.success).toBe(false)
})
it('rejects unknown setup prompt actions', () => {
const parsed = eventSchemas.setup_script_prompt_action.safeParse({
action: 'save_detected_setup_cancelled',
mode: 'configure_needed',
file_count_bucket: '0',
unsupported_field_count_bucket: '0',
has_shared_hooks: false
})
expect(parsed.success).toBe(false)
})
it('rejects legacy generation setup action names', () => {
const parsed = eventSchemas.setup_script_prompt_action.safeParse({
action: 'generate_setup_clicked',
mode: 'import_available',
provider: 'package-manager',
file_count_bucket: '2-3',
unsupported_field_count_bucket: '0',
has_shared_hooks: false,
edited_before_save: false
})
expect(parsed.success).toBe(false)
})
it('keeps the provider schema in sync with known setup import providers', () => {
expect(setupScriptImportProviderSchema.options).toEqual([
'superset',
'conductor',
'codex',
'cmux',
'package-manager'
])
})
})