Ctrl K
ComunidadGuías…

tests/app-create-pending-onboarding.test.ts

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
import { randomUUID } from 'node:crypto'
import { afterAll, describe, expect, it } from 'vitest'
import {
  APIKEY_TEST_ALL,
  BASE_URL,
  getSupabaseClient,
  ORG_ID,
  resetAppData,
  USER_ID,
} from './test-utils.ts'

const USE_CLOUDFLARE = process.env.USE_CLOUDFLARE_WORKERS === 'true'
// Cloudflare workers can resolve freshly created API keys against a lagging replica.
// This coverage targets the Supabase edge create/complete path used by the CLI.
const describeBackend = describe.skipIf(USE_CLOUDFLARE)

describeBackend('app create with leftover pending onboarding app', () => {
  const pendingAppId = `com.test.pending.onboarding.${randomUUID()}`
  const newAppId = `com.test.create.with.pending.${randomUUID()}`

  afterAll(async () => {
    await resetAppData(pendingAppId)
    await resetAppData(newAppId)
  })

  it('allows API keys to create a new app while a pending onboarding app exists', async () => {
    const supabase = getSupabaseClient()

    const { error: pendingError } = await supabase.from('apps').insert({
      app_id: pendingAppId,
      name: 'Pending onboarding leftover',
      icon_url: '',
      owner_org: ORG_ID,
      user_id: USER_ID,
      need_onboarding: true,
      created_from_onboarding: true,
    })
    expect(pendingError, JSON.stringify(pendingError)).toBeNull()

    const createResponse = await fetch(`${BASE_URL}/app`, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'Authorization': APIKEY_TEST_ALL,
      },
      body: JSON.stringify({
        owner_org: ORG_ID,
        app_id: newAppId,
        name: `App ${newAppId}`,
        icon: '',
        need_onboarding: false,
        created_from_onboarding: true,
      }),
    })
    const createBody = await createResponse.json().catch(() => null)
    expect(createResponse.status, JSON.stringify(createBody)).toBe(200)
    expect((createBody as { app_id?: string }).app_id).toBe(newAppId)

    const completeResponse = await fetch(`${BASE_URL}/app/${pendingAppId}`, {
      method: 'PUT',
      headers: {
        'Content-Type': 'application/json',
        'Authorization': APIKEY_TEST_ALL,
      },
      body: JSON.stringify({
        need_onboarding: false,
      }),
    })
    const completeBody = await completeResponse.json().catch(() => null)
    expect(completeResponse.status, JSON.stringify(completeBody)).toBe(200)
    expect((completeBody as { need_onboarding?: boolean }).need_onboarding).toBe(false)
  })
})