audiobookshelf/test/server/models/Review.test.js

98 lines
3.3 KiB
JavaScript
Raw Normal View History

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')
})
})