2022-12-05 20:14:56 +00:00
|
|
|
import * as media from 'wildebeest/functions/api/v2/media'
|
|
|
|
import { createPerson } from 'wildebeest/backend/src/activitypub/actors'
|
|
|
|
import { strict as assert } from 'node:assert/strict'
|
|
|
|
import { makeDB, assertJSON, isUrlValid } from '../utils'
|
|
|
|
import * as objects from 'wildebeest/backend/src/activitypub/objects'
|
|
|
|
|
|
|
|
const userKEK = 'test_kek10'
|
|
|
|
const CF_ACCOUNT_ID = 'testaccountid'
|
|
|
|
const CF_API_TOKEN = 'testtoken'
|
|
|
|
const domain = 'cloudflare.com'
|
|
|
|
|
|
|
|
describe('Mastodon APIs', () => {
|
|
|
|
describe('media', () => {
|
|
|
|
test('upload image creates object', async () => {
|
2023-01-11 15:45:07 +00:00
|
|
|
globalThis.fetch = async (input: RequestInfo) => {
|
|
|
|
const request = new Request(input)
|
|
|
|
if (request.url.toString() === 'https://api.cloudflare.com/client/v4/accounts/testaccountid/images/v1') {
|
2022-12-05 20:14:56 +00:00
|
|
|
return new Response(
|
|
|
|
JSON.stringify({
|
|
|
|
success: true,
|
|
|
|
result: {
|
|
|
|
id: 'abcd',
|
2023-01-17 20:37:31 +00:00
|
|
|
variants: ['https://example.com/' + file.name + '/usercontent'],
|
2022-12-05 20:14:56 +00:00
|
|
|
},
|
|
|
|
})
|
|
|
|
)
|
|
|
|
}
|
2023-01-11 15:45:07 +00:00
|
|
|
throw new Error('unexpected request to ' + request.url)
|
2022-12-05 20:14:56 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
const db = await makeDB()
|
2023-01-05 09:33:46 +00:00
|
|
|
const connectedActor = await createPerson(domain, db, userKEK, 'sven@cloudflare.com')
|
2022-12-05 20:14:56 +00:00
|
|
|
|
|
|
|
const file = new File(['abc'], 'image.jpeg', { type: 'image/jpeg' })
|
|
|
|
|
|
|
|
const body = new FormData()
|
|
|
|
body.set('file', file)
|
|
|
|
|
|
|
|
const req = new Request('https://example.com/api/v2/media', {
|
|
|
|
method: 'POST',
|
|
|
|
body,
|
|
|
|
})
|
2023-01-18 13:42:51 +00:00
|
|
|
const res = await media.handleRequestPost(req, db, connectedActor, CF_ACCOUNT_ID, CF_API_TOKEN)
|
2022-12-05 20:14:56 +00:00
|
|
|
assert.equal(res.status, 200)
|
|
|
|
assertJSON(res)
|
|
|
|
|
|
|
|
const data = await res.json<any>()
|
|
|
|
assert(!isUrlValid(data.id))
|
|
|
|
assert(isUrlValid(data.url))
|
|
|
|
assert(isUrlValid(data.preview_url))
|
|
|
|
|
|
|
|
const obj = await objects.getObjectByMastodonId(db, data.id)
|
|
|
|
assert(obj)
|
|
|
|
assert(obj.mastodonId)
|
|
|
|
assert.equal(obj.type, 'Image')
|
|
|
|
assert.equal(obj.originalActorId, connectedActor.id.toString())
|
|
|
|
})
|
|
|
|
})
|
|
|
|
})
|