101 lines
2.6 KiB
TypeScript
101 lines
2.6 KiB
TypeScript
import { expect, test } from 'vitest'
|
|
import _ from 'lodash'
|
|
import * as utils from './utils'
|
|
import * as config from './config'
|
|
import * as chat from '../src'
|
|
|
|
const apiUrl = config.get('API_URL')
|
|
|
|
test('api prevents creating user with an invalid fid', async () => {
|
|
const client = new chat.Client({ apiUrl })
|
|
|
|
const userFid = utils.getUserFid()
|
|
const invalidUserIds = [
|
|
`invalid+${userFid}`, // invalid character
|
|
`invalid_${userFid}_${userFid}_${userFid}_${userFid}`, // too long
|
|
]
|
|
|
|
for (const id of invalidUserIds) {
|
|
await expect(client.createUser({ id })).rejects.toThrow(chat.InvalidPayloadError)
|
|
}
|
|
|
|
for (const id of invalidUserIds) {
|
|
const key = await utils.getUserKey(id)
|
|
await expect(client.getOrCreateUser({ 'x-user-key': key })).rejects.toThrow(chat.InvalidPayloadError)
|
|
}
|
|
})
|
|
|
|
test('api prevents creating multiple users with the same foreign id', async () => {
|
|
const client = new chat.Client({ apiUrl })
|
|
|
|
const userFid = utils.getUserFid()
|
|
|
|
const createUser = () =>
|
|
client.createUser({
|
|
id: userFid,
|
|
})
|
|
|
|
await createUser()
|
|
await expect(createUser).rejects.toThrow(chat.AlreadyExistsError)
|
|
})
|
|
|
|
test('get or create user should create a user', async () => {
|
|
const client = new chat.Client({ apiUrl })
|
|
|
|
const userFid = utils.getUserFid()
|
|
const userKey = await utils.getUserKey(userFid)
|
|
await client.getOrCreateUser({ 'x-user-key': userKey })
|
|
|
|
const {
|
|
user: { id: userId },
|
|
} = await client.getOrCreateUser({ 'x-user-key': userKey })
|
|
|
|
expect(userId).toBeDefined()
|
|
})
|
|
|
|
test('get or create user always returns the same user', async () => {
|
|
const client = new chat.Client({ apiUrl })
|
|
|
|
const { key: userKey } = await client.createUser({})
|
|
|
|
const {
|
|
user: { id: userId },
|
|
} = await client.getUser({
|
|
'x-user-key': userKey,
|
|
})
|
|
|
|
const getOrCreate = () =>
|
|
client
|
|
.getOrCreateUser({
|
|
'x-user-key': userKey,
|
|
})
|
|
.then((r) => r.user.id)
|
|
|
|
expect(await getOrCreate()).toBe(userId)
|
|
expect(await getOrCreate()).toBe(userId) // operation is idempotent
|
|
})
|
|
|
|
test('get or create user with a fid always returns the same user', async () => {
|
|
const client = new chat.Client({ apiUrl })
|
|
|
|
const userFid = utils.getUserFid()
|
|
const userKey = await utils.getUserKey(userFid)
|
|
await client.createUser({ id: userFid })
|
|
|
|
const {
|
|
user: { id: userId },
|
|
} = await client.getUser({
|
|
'x-user-key': userKey,
|
|
})
|
|
|
|
const getOrCreate = () =>
|
|
client
|
|
.getOrCreateUser({
|
|
'x-user-key': userKey,
|
|
})
|
|
.then((r) => r.user.id)
|
|
|
|
expect(await getOrCreate()).toBe(userId)
|
|
expect(await getOrCreate()).toBe(userId) // operation is idempotent
|
|
})
|