| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- import * as brivenJs from '@supabase/supabase-js'
- import { beforeEach, describe, expect, it, vi } from 'vitest'
- import { createProjectBrivenClient } from './project-briven-client'
- import * as apiKeysUtils from '@/data/api-keys/temp-api-keys-utils'
- vi.mock('@supabase/supabase-js', () => ({
- createClient: vi.fn(),
- }))
- vi.mock('@/data/api-keys/temp-api-keys-utils', () => ({
- getOrRefreshTemporaryApiKey: vi.fn(),
- }))
- describe('project-briven-client', () => {
- beforeEach(() => {
- vi.clearAllMocks()
- })
- describe('createProjectBrivenClient', () => {
- it('should create a Briven client with temporary API key', async () => {
- const mockApiKey = 'test-api-key-123'
- const mockClient = { from: vi.fn() }
- const projectRef = 'test-project-ref'
- const clientEndpoint = 'https://test.supabase.co'
- vi.mocked(apiKeysUtils.getOrRefreshTemporaryApiKey).mockResolvedValue({
- apiKey: mockApiKey,
- expiryTimeMs: Date.now() + 3600000,
- })
- vi.mocked(brivenJs.createClient).mockReturnValue(mockClient as any)
- const result = await createProjectBrivenClient(projectRef, clientEndpoint)
- expect(apiKeysUtils.getOrRefreshTemporaryApiKey).toHaveBeenCalledWith(projectRef)
- expect(brivenJs.createClient).toHaveBeenCalledWith(clientEndpoint, mockApiKey, {
- auth: {
- persistSession: false,
- autoRefreshToken: false,
- detectSessionInUrl: false,
- storage: {
- getItem: expect.any(Function),
- setItem: expect.any(Function),
- removeItem: expect.any(Function),
- },
- },
- })
- expect(result).toBe(mockClient)
- })
- it('should configure storage to not persist session', async () => {
- const mockApiKey = 'test-api-key-456'
- const mockClient = { from: vi.fn() }
- vi.mocked(apiKeysUtils.getOrRefreshTemporaryApiKey).mockResolvedValue({
- apiKey: mockApiKey,
- expiryTimeMs: Date.now() + 3600000,
- })
- vi.mocked(brivenJs.createClient).mockReturnValue(mockClient as any)
- await createProjectBrivenClient('ref', 'https://example.com')
- const config = vi.mocked(brivenJs.createClient).mock.calls[0][2]
- if (!config?.auth?.storage) throw new Error('storage config is missing')
- const storage = config.auth.storage
- // Test storage methods return expected values
- expect(storage.getItem('any-key')).toBeNull()
- expect(storage.setItem('key', 'value')).toBeUndefined()
- expect(storage.removeItem('key')).toBeUndefined()
- })
- it('should throw error if API key retrieval fails', async () => {
- const error = new Error('Failed to get API key')
- vi.mocked(apiKeysUtils.getOrRefreshTemporaryApiKey).mockRejectedValue(error)
- await expect(createProjectBrivenClient('ref', 'https://example.com')).rejects.toThrow(
- 'Failed to get API key'
- )
- expect(brivenJs.createClient).not.toHaveBeenCalled()
- })
- it('should pass through different project refs and endpoints', async () => {
- const mockApiKey = 'api-key'
- const mockClient = { from: vi.fn() }
- vi.mocked(apiKeysUtils.getOrRefreshTemporaryApiKey).mockResolvedValue({
- apiKey: mockApiKey,
- expiryTimeMs: Date.now() + 3600000,
- })
- vi.mocked(brivenJs.createClient).mockReturnValue(mockClient as any)
- await createProjectBrivenClient('project-123', 'https://project123.supabase.co')
- expect(apiKeysUtils.getOrRefreshTemporaryApiKey).toHaveBeenCalledWith('project-123')
- expect(brivenJs.createClient).toHaveBeenCalledWith(
- 'https://project123.supabase.co',
- mockApiKey,
- expect.any(Object)
- )
- })
- it('should disable session persistence options', async () => {
- const mockApiKey = 'api-key'
- const mockClient = { from: vi.fn() }
- vi.mocked(apiKeysUtils.getOrRefreshTemporaryApiKey).mockResolvedValue({
- apiKey: mockApiKey,
- expiryTimeMs: Date.now() + 3600000,
- })
- vi.mocked(brivenJs.createClient).mockReturnValue(mockClient as any)
- await createProjectBrivenClient('ref', 'https://example.com')
- const config = vi.mocked(brivenJs.createClient).mock.calls[0][2]
- if (!config?.auth) throw new Error('auth config is missing')
- expect(config.auth.persistSession).toBe(false)
- expect(config.auth.autoRefreshToken).toBe(false)
- expect(config.auth.detectSessionInUrl).toBe(false)
- })
- })
- })
|