72 lines
3.0 KiB
JavaScript
72 lines
3.0 KiB
JavaScript
const test = require('node:test')
|
|
const assert = require('node:assert/strict')
|
|
|
|
const { tenantFilter } = require('../worker_tenant')
|
|
const cloningService = require('../voice-cloning-job-handler/voice_cloning/voice_cloning_service')
|
|
const cloningProfileService = require('../voice-cloning-job-handler/user_audio_profile/user_audio_profile_service')
|
|
const synthProfileService = require('../voice-synthsizer-job-handler/user_audio_profile/user_audio_profile_service')
|
|
const salutationService = require('../voice-synthsizer-job-handler/salutation/salutation_service')
|
|
const jobService = require('../voice-synthsizer-job-handler/job/job_service')
|
|
|
|
const userId = '507f1f77bcf86cd799439011'
|
|
const otherUserId = '507f191e810c19729de860ea'
|
|
const recordId = '507f1f77bcf86cd799439012'
|
|
|
|
function fakeModel() {
|
|
const calls = []
|
|
return {
|
|
calls,
|
|
findOne: async (filter) => { calls.push(['findOne', filter]); return null },
|
|
find: async (filter) => { calls.push(['find', filter]); return [] },
|
|
findOneAndUpdate: async (filter, update) => {
|
|
calls.push(['findOneAndUpdate', filter, update])
|
|
return null
|
|
},
|
|
updateMany: async (filter, update) => {
|
|
calls.push(['updateMany', filter, update])
|
|
return { modifiedCount: 0 }
|
|
},
|
|
}
|
|
}
|
|
|
|
test('tenant filter requires a valid user ID and keeps it in the query', () => {
|
|
assert.throws(() => tenantFilter({ _id: recordId }), /userId/)
|
|
assert.throws(() => tenantFilter({ _id: recordId, userId: { $ne: otherUserId } }), /userId/)
|
|
assert.equal(String(tenantFilter({ _id: recordId, userId }).userId), userId)
|
|
})
|
|
|
|
for (const [name, factory] of [
|
|
['cloning record', cloningService],
|
|
['cloning profile', cloningProfileService],
|
|
['synthesis profile', synthProfileService],
|
|
['synthesis job', jobService],
|
|
]) {
|
|
test(`${name} reads and writes require matching tenant`, async () => {
|
|
const model = fakeModel()
|
|
const service = factory(model)
|
|
await service.read({ _id: recordId, userId })
|
|
await service.find({ userId })
|
|
await service.update({ _id: recordId, userId, status: 'processing' })
|
|
await service.remove({ _id: recordId, userId })
|
|
await service.removeMany({ userId })
|
|
for (const [, filter] of model.calls) {
|
|
assert.equal(String(filter.userId), userId)
|
|
}
|
|
const update = model.calls.find(([method]) => method === 'findOneAndUpdate')
|
|
assert.equal(update[1]._id, recordId)
|
|
assert.deepEqual(update[2], { $set: { status: 'processing' } })
|
|
assert.equal(update[1].deleted, false)
|
|
await assert.rejects(service.update({ _id: recordId, status: 'processing' }), /userId/)
|
|
})
|
|
}
|
|
|
|
test('salutation updates cannot change ownership', async () => {
|
|
const model = fakeModel()
|
|
const service = salutationService(model)
|
|
await service.update({ _id: recordId, userId: otherUserId, salutationVideo: 'url' }, userId)
|
|
const [, filter, update] = model.calls[0]
|
|
assert.equal(String(filter.userId), userId)
|
|
assert.deepEqual(update, { $set: { salutationVideo: 'url' } })
|
|
await assert.rejects(service.read({ _id: recordId }), /userId/)
|
|
})
|