mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2026-02-28 21:19:42 +00:00
98 lines
3.3 KiB
JavaScript
98 lines
3.3 KiB
JavaScript
|
|
const { expect } = require('chai')
|
||
|
|
const { Sequelize } = require('sequelize')
|
||
|
|
const Database = require('../../../server/Database')
|
||
|
|
|
||
|
|
describe('Review Model', () => {
|
||
|
|
beforeEach(async () => {
|
||
|
|
Database.sequelize = new Sequelize({ dialect: 'sqlite', storage: ':memory:', logging: false })
|
||
|
|
await Database.buildModels()
|
||
|
|
})
|
||
|
|
|
||
|
|
afterEach(async () => {
|
||
|
|
await Database.sequelize.close()
|
||
|
|
})
|
||
|
|
|
||
|
|
async function createTestLibraryItem(id = 'li1') {
|
||
|
|
const library = await Database.libraryModel.create({ name: 'Test', mediaType: 'book' })
|
||
|
|
const book = await Database.bookModel.create({ title: 'Test Book' })
|
||
|
|
return await Database.libraryItemModel.create({ id, mediaId: book.id, mediaType: 'book', libraryId: library.id })
|
||
|
|
}
|
||
|
|
|
||
|
|
it('should validate rating between 1 and 5', async () => {
|
||
|
|
const user = await Database.userModel.create({ username: 'u1' })
|
||
|
|
const item = await createTestLibraryItem('li1')
|
||
|
|
const item2 = await createTestLibraryItem('li2')
|
||
|
|
const item3 = await createTestLibraryItem('li3')
|
||
|
|
|
||
|
|
// Valid
|
||
|
|
await Database.reviewModel.create({ userId: user.id, libraryItemId: item.id, rating: 5 })
|
||
|
|
|
||
|
|
// Invalid - too high
|
||
|
|
let error
|
||
|
|
try {
|
||
|
|
await Database.reviewModel.create({ userId: user.id, libraryItemId: item2.id, rating: 6 })
|
||
|
|
} catch (err) {
|
||
|
|
error = err
|
||
|
|
}
|
||
|
|
expect(error).to.exist
|
||
|
|
expect(error.name).to.equal('SequelizeValidationError')
|
||
|
|
|
||
|
|
// Invalid - too low
|
||
|
|
error = null
|
||
|
|
try {
|
||
|
|
await Database.reviewModel.create({ userId: user.id, libraryItemId: item3.id, rating: 0 })
|
||
|
|
} catch (err) {
|
||
|
|
error = err
|
||
|
|
}
|
||
|
|
expect(error).to.exist
|
||
|
|
expect(error.name).to.equal('SequelizeValidationError')
|
||
|
|
})
|
||
|
|
|
||
|
|
it('should enforce unique constraint on userId and libraryItemId', async () => {
|
||
|
|
const user = await Database.userModel.create({ username: 'u1' })
|
||
|
|
const item = await createTestLibraryItem('li1')
|
||
|
|
|
||
|
|
await Database.reviewModel.create({ userId: user.id, libraryItemId: item.id, rating: 5 })
|
||
|
|
|
||
|
|
let error
|
||
|
|
try {
|
||
|
|
await Database.reviewModel.create({ userId: user.id, libraryItemId: item.id, rating: 4 })
|
||
|
|
} catch (err) {
|
||
|
|
error = err
|
||
|
|
}
|
||
|
|
expect(error).to.exist
|
||
|
|
expect(error.name).to.equal('SequelizeUniqueConstraintError')
|
||
|
|
})
|
||
|
|
|
||
|
|
it('should cascade delete when user is deleted', async () => {
|
||
|
|
const user = await Database.userModel.create({ username: 'u1' })
|
||
|
|
const item = await createTestLibraryItem('li1')
|
||
|
|
await Database.reviewModel.create({ userId: user.id, libraryItemId: item.id, rating: 5 })
|
||
|
|
|
||
|
|
await user.destroy()
|
||
|
|
const count = await Database.reviewModel.count()
|
||
|
|
expect(count).to.equal(0)
|
||
|
|
})
|
||
|
|
|
||
|
|
it('should return correct format in toOldJSON', async () => {
|
||
|
|
const user = await Database.userModel.create({ username: 'testuser' })
|
||
|
|
const item = await createTestLibraryItem('li1')
|
||
|
|
const review = await Database.reviewModel.create({
|
||
|
|
userId: user.id,
|
||
|
|
libraryItemId: item.id,
|
||
|
|
rating: 4,
|
||
|
|
reviewText: 'Nice'
|
||
|
|
})
|
||
|
|
|
||
|
|
// Manually associate user for the test
|
||
|
|
review.user = user
|
||
|
|
|
||
|
|
const json = review.toOldJSON()
|
||
|
|
expect(json.rating).to.equal(4)
|
||
|
|
expect(json.reviewText).to.equal('Nice')
|
||
|
|
expect(json.user.username).to.equal('testuser')
|
||
|
|
expect(json.createdAt).to.be.a('number')
|
||
|
|
expect(json.updatedAt).to.be.a('number')
|
||
|
|
})
|
||
|
|
})
|