const { expect } = require('chai') const sinon = require('sinon') const User = require('../../../server/models/User') describe('User model', () => { describe('getUserByIdOrOldId', () => { let originalSequelize beforeEach(() => { originalSequelize = User.sequelize }) afterEach(() => { User.sequelize = originalSequelize sinon.restore() }) it('should resolve UUID ids via primary-key lookup on postgres', async () => { User.sequelize = { getDialect: () => 'postgres', models: { mediaProgress: {} } } const user = { id: 'e8e677b2-da16-4220-ab67-443b7714caf9' } const findByPkStub = sinon.stub(User, 'findByPk').resolves(user) const findOneStub = sinon.stub(User, 'findOne').resolves(null) const result = await User.getUserByIdOrOldId('e8e677b2-da16-4220-ab67-443b7714caf9') expect(result).to.equal(user) expect(findByPkStub.calledOnce).to.equal(true) expect(findOneStub.called).to.equal(false) }) it('should query legacy oldUserId with postgres-safe JSON matcher', async () => { User.sequelize = { getDialect: () => 'postgres', models: { mediaProgress: {} } } const findByPkStub = sinon.stub(User, 'findByPk').resolves(null) const findOneStub = sinon.stub(User, 'findOne').resolves(null) await User.getUserByIdOrOldId('root') expect(findByPkStub.called).to.equal(false) expect(findOneStub.calledOnce).to.equal(true) const options = findOneStub.firstCall.args[0] expect(options.where.attribute.val).to.equal('"extraData"#>>\'{oldUserId}\'') expect(options.where.logic).to.equal('root') }) it('should keep sqlite oldUserId matcher unchanged', async () => { User.sequelize = { getDialect: () => 'sqlite', models: { mediaProgress: {} } } const findOneStub = sinon.stub(User, 'findOne').resolves(null) await User.getUserByIdOrOldId('root') expect(findOneStub.calledOnce).to.equal(true) const options = findOneStub.firstCall.args[0] expect(options.where).to.deep.equal({ 'extraData.oldUserId': 'root' }) }) }) })