Build NapCat Artifacts / Windows Loader Test (push) Canceled after 0s
Build NapCat Artifacts / Type Check & Test (push) Canceled after 0s
Build NapCat Artifacts / Build NapCat.Framework (push) Canceled after 0s
Build NapCat Artifacts / Build NapCat.Shell (push) Canceled after 0s
123 lines
2.8 KiB
Plaintext
123 lines
2.8 KiB
Plaintext
import { defaultSerializeQueryArgs } from '@internal/query/defaultSerializeQueryArgs'
|
|
|
|
const endpointDefinition: any = {}
|
|
const endpointName = 'test'
|
|
|
|
test('string arg', () => {
|
|
expect(
|
|
defaultSerializeQueryArgs({
|
|
endpointDefinition,
|
|
endpointName,
|
|
queryArgs: 'arg',
|
|
}),
|
|
).toMatchInlineSnapshot(`"test("arg")"`)
|
|
})
|
|
|
|
test('number arg', () => {
|
|
expect(
|
|
defaultSerializeQueryArgs({
|
|
endpointDefinition,
|
|
endpointName,
|
|
queryArgs: 5,
|
|
}),
|
|
).toMatchInlineSnapshot(`"test(5)"`)
|
|
})
|
|
|
|
test('bigint arg has non-default serialization (intead of throwing)', () => {
|
|
expect(
|
|
defaultSerializeQueryArgs({
|
|
endpointDefinition,
|
|
endpointName,
|
|
queryArgs: BigInt(10),
|
|
}),
|
|
).toMatchInlineSnapshot(`"test({"$bigint":"10"})"`)
|
|
})
|
|
|
|
test('simple object arg is sorted', () => {
|
|
expect(
|
|
defaultSerializeQueryArgs({
|
|
endpointDefinition,
|
|
endpointName,
|
|
queryArgs: { name: 'arg', age: 5 },
|
|
}),
|
|
).toMatchInlineSnapshot(`"test({"age":5,"name":"arg"})"`)
|
|
})
|
|
|
|
test('nested object arg is sorted recursively', () => {
|
|
expect(
|
|
defaultSerializeQueryArgs({
|
|
endpointDefinition,
|
|
endpointName,
|
|
queryArgs: { name: { last: 'Split', first: 'Banana' }, age: 5 },
|
|
}),
|
|
).toMatchInlineSnapshot(
|
|
`"test({"age":5,"name":{"first":"Banana","last":"Split"}})"`,
|
|
)
|
|
})
|
|
|
|
test('Fully serializes a deeply nested object', () => {
|
|
const nestedObj = {
|
|
a: {
|
|
a1: {
|
|
a11: {
|
|
a111: 1,
|
|
},
|
|
},
|
|
},
|
|
b: {
|
|
b2: {
|
|
b21: 3,
|
|
},
|
|
b1: {
|
|
b11: 2,
|
|
},
|
|
},
|
|
}
|
|
|
|
const res = defaultSerializeQueryArgs({
|
|
endpointDefinition,
|
|
endpointName,
|
|
queryArgs: nestedObj,
|
|
})
|
|
expect(res).toMatchInlineSnapshot(
|
|
`"test({"a":{"a1":{"a11":{"a111":1}}},"b":{"b1":{"b11":2},"b2":{"b21":3}}})"`,
|
|
)
|
|
})
|
|
|
|
test('Caches results for plain objects', () => {
|
|
const testData = Array.from({ length: 10000 }).map((_, i) => {
|
|
return {
|
|
albumId: i,
|
|
id: i,
|
|
title: 'accusamus beatae ad facilis cum similique qui sunt',
|
|
url: 'https://via.placeholder.com/600/92c952',
|
|
thumbnailUrl: 'https://via.placeholder.com/150/92c952',
|
|
}
|
|
})
|
|
|
|
const data = {
|
|
testData,
|
|
}
|
|
|
|
const runWithTimer = (data: any) => {
|
|
const start = Date.now()
|
|
const res = defaultSerializeQueryArgs({
|
|
endpointDefinition,
|
|
endpointName,
|
|
queryArgs: data,
|
|
})
|
|
const end = Date.now()
|
|
const duration = end - start
|
|
return [res, duration] as const
|
|
}
|
|
|
|
const [res1, time1] = runWithTimer(data)
|
|
const [res2, time2] = runWithTimer(data)
|
|
|
|
expect(res1).toBe(res2)
|
|
expect(time2).toBeLessThanOrEqual(time1)
|
|
// Locally, stringifying 10K items takes 25-30ms.
|
|
// Assuming the WeakMap cache hit, this _should_ be 0
|
|
expect(time2).toBeLessThan(2)
|
|
})
|