mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2026-07-07 09:51:37 +00:00
95 lines
3.6 KiB
JavaScript
95 lines
3.6 KiB
JavaScript
const chai = require('chai')
|
|
const sinon = require('sinon')
|
|
const { expect } = chai
|
|
|
|
const { DataTypes, Sequelize } = require('sequelize')
|
|
const Logger = require('../../../server/Logger')
|
|
|
|
const { up } = require('../../../server/migrations/v2.32.6-large-library-browse-indexes')
|
|
|
|
const TEST_POSTGRES_URL = process.env.TEST_POSTGRES_URL
|
|
|
|
describe('Migration v2.32.6-large-library-browse-indexes (postgres)', () => {
|
|
if (!TEST_POSTGRES_URL) {
|
|
it('skips because TEST_POSTGRES_URL is not set', function() {
|
|
this.skip()
|
|
})
|
|
return
|
|
}
|
|
|
|
let sequelize
|
|
let queryInterface
|
|
|
|
beforeEach(async () => {
|
|
sequelize = new Sequelize(TEST_POSTGRES_URL, {
|
|
dialect: 'postgres',
|
|
logging: false
|
|
})
|
|
queryInterface = sequelize.getQueryInterface()
|
|
sinon.stub(Logger, 'info')
|
|
|
|
await queryInterface.dropTable('mediaProgresses').catch(() => {})
|
|
await queryInterface.dropTable('libraryItems').catch(() => {})
|
|
await queryInterface.dropTable('books').catch(() => {})
|
|
|
|
await queryInterface.createTable('books', {
|
|
id: { type: DataTypes.UUID, allowNull: false, primaryKey: true }
|
|
})
|
|
|
|
await queryInterface.createTable('libraryItems', {
|
|
id: { type: DataTypes.UUID, allowNull: false, primaryKey: true },
|
|
libraryId: { type: DataTypes.UUID, allowNull: false },
|
|
mediaType: { type: DataTypes.STRING, allowNull: false },
|
|
title: { type: DataTypes.TEXT, allowNull: true },
|
|
titleIgnorePrefix: { type: DataTypes.TEXT, allowNull: true },
|
|
createdAt: { type: DataTypes.DATE, allowNull: true }
|
|
})
|
|
|
|
await queryInterface.createTable('mediaProgresses', {
|
|
id: { type: DataTypes.UUID, allowNull: false, primaryKey: true },
|
|
userId: { type: DataTypes.UUID, allowNull: false },
|
|
updatedAt: { type: DataTypes.DATE, allowNull: true }
|
|
})
|
|
})
|
|
|
|
afterEach(async () => {
|
|
sinon.restore()
|
|
if (queryInterface) {
|
|
await queryInterface.dropTable('mediaProgresses').catch(() => {})
|
|
await queryInterface.dropTable('libraryItems').catch(() => {})
|
|
await queryInterface.dropTable('books').catch(() => {})
|
|
}
|
|
if (sequelize) {
|
|
await sequelize.close()
|
|
}
|
|
})
|
|
|
|
it('creates browse indexes with the expected names and column order', async () => {
|
|
await up({ context: { queryInterface, logger: Logger } })
|
|
|
|
const [rows] = await queryInterface.sequelize.query(`
|
|
SELECT indexname, indexdef
|
|
FROM pg_indexes
|
|
WHERE schemaname = 'public'
|
|
AND indexname IN (
|
|
'library_items_library_media_type_title_id',
|
|
'library_items_library_media_type_title_ignore_prefix_id',
|
|
'library_items_library_media_type_created_at_id',
|
|
'media_progress_user_updated_at_id'
|
|
)
|
|
ORDER BY indexname ASC
|
|
`)
|
|
|
|
expect(rows.map((row) => row.indexname)).to.deep.equal([
|
|
'library_items_library_media_type_created_at_id',
|
|
'library_items_library_media_type_title_id',
|
|
'library_items_library_media_type_title_ignore_prefix_id',
|
|
'media_progress_user_updated_at_id'
|
|
])
|
|
|
|
expect(rows.find((row) => row.indexname === 'library_items_library_media_type_title_id').indexdef).to.include('("libraryId", "mediaType", title, id)')
|
|
expect(rows.find((row) => row.indexname === 'library_items_library_media_type_title_ignore_prefix_id').indexdef).to.include('("libraryId", "mediaType", "titleIgnorePrefix", id)')
|
|
expect(rows.find((row) => row.indexname === 'library_items_library_media_type_created_at_id').indexdef).to.include('("libraryId", "mediaType", "createdAt", id)')
|
|
expect(rows.find((row) => row.indexname === 'media_progress_user_updated_at_id').indexdef).to.include('("userId", "updatedAt", id)')
|
|
})
|
|
})
|