Leon4gr45's picture
Upload folder using huggingface_hub (part 2)
1477a90 verified
Raw
History Blame Contribute Delete
3.15 kB
// Code generated by @openmeter/typespec-typescript. DO NOT EDIT.
import fetchMock from '@fetch-mock/vitest'
import { beforeEach, describe, expect, it } from 'vitest'
import { Client, funcs } from '../src/index.js'
const meter = {
id: '01ARZ3NDEKTSV4RRFFQ69G5FAV',
name: 'API calls',
key: 'api_calls',
aggregation: 'count',
event_type: 'api-request',
created_at: '2024-01-01T00:00:00Z',
updated_at: '2024-01-01T00:00:00Z',
}
beforeEach(() => {
fetchMock.mockReset()
})
function client() {
return new Client({
baseUrl: 'https://eu.api.konghq.com/v3',
apiKey: 'k',
fetch: fetchMock.fetchHandler,
})
}
function mockList() {
fetchMock.route('*', {
body: { data: [meter], meta: { page: { number: 1, size: 10, total: 1 } } },
headers: { 'Content-Type': 'application/json' },
})
}
function lastQuery(): URLSearchParams {
return new URL(fetchMock.callHistory.lastCall()!.url).searchParams
}
describe('listMeters query serialization', () => {
it('encodes page as a deep object', async () => {
mockList()
await funcs.listMeters(client(), { page: { size: 10, number: 2 } })
const q = lastQuery()
expect(q.get('page[size]')).toBe('10')
expect(q.get('page[number]')).toBe('2')
})
it('encodes a scalar filter', async () => {
mockList()
await funcs.listMeters(client(), { filter: { key: 'm' } })
expect(lastQuery().get('filter[key]')).toBe('m')
})
it('encodes a nested filter operand as a deep object', async () => {
mockList()
await funcs.listMeters(client(), { filter: { key: { eq: 'foo' } } })
expect(lastQuery().get('filter[key][eq]')).toBe('foo')
})
it('comma-joins array operands into a single parameter', async () => {
mockList()
await funcs.listMeters(client(), {
filter: { key: { oeq: ['a', 'b', 'c'] } },
})
const q = lastQuery()
expect(q.getAll('filter[key][oeq]')).toHaveLength(1)
expect(q.get('filter[key][oeq]')).toBe('a,b,c')
})
it('serializes sort as a plain string, snake-ifying the field name', async () => {
mockList()
await funcs.listMeters(client(), {
sort: { by: 'createdAt', order: 'desc' },
})
const q = lastQuery()
expect(q.get('sort')).toBe('created_at desc')
expect(q.get('sort[by]')).toBeNull()
})
it('omits sort order when ascending is implied', async () => {
mockList()
await funcs.listMeters(client(), { sort: { by: 'name' } })
expect(lastQuery().get('sort')).toBe('name')
})
})
describe('responses are mapped to the camelCase shape', () => {
it('camelizes known fields and drops fields not in the schema', async () => {
fetchMock.route('*', {
body: { ...meter, brand_new_field: 'dropped' },
headers: { 'Content-Type': 'application/json' },
})
const result = await funcs.getMeter(client(), { meterId: 'm' })
expect(result.ok).toBe(true)
expect(result.value).toMatchObject({
id: meter.id,
eventType: meter.event_type,
createdAt: new Date(meter.created_at),
})
expect('event_type' in result.value!).toBe(false)
expect('brand_new_field' in result.value!).toBe(false)
})
})