1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- 'use strict';
- const Support = require('../support');
- const { DataTypes, OptimisticLockError } = require('@sequelize/core');
- const chai = require('chai');
- const expect = chai.expect;
- describe(Support.getTestDialectTeaser('Model'), () => {
- describe('optimistic locking', () => {
- let Account;
- beforeEach(async function () {
- Account = this.sequelize.define(
- 'Account',
- {
- number: {
- type: DataTypes.INTEGER,
- },
- },
- {
- version: true,
- },
- );
- await Account.sync({ force: true });
- });
- it('should increment the version on save', async () => {
- const account0 = await Account.create({ number: 1 });
- account0.number += 1;
- expect(account0.version).to.eq(0);
- const account = await account0.save();
- expect(account.version).to.eq(1);
- });
- it('should increment the version on update', async () => {
- const account1 = await Account.create({ number: 1 });
- expect(account1.version).to.eq(0);
- const account0 = await account1.update({ number: 2 });
- expect(account0.version).to.eq(1);
- account0.number += 1;
- const account = await account0.save();
- expect(account.number).to.eq(3);
- expect(account.version).to.eq(2);
- });
- it('prevents stale instances from being saved', async () => {
- await expect(
- (async () => {
- const accountA = await Account.create({ number: 1 });
- const accountB0 = await Account.findByPk(accountA.id);
- accountA.number += 1;
- await accountA.save();
- const accountB = await accountB0;
- accountB.number += 1;
- return await accountB.save();
- })(),
- ).to.eventually.be.rejectedWith(OptimisticLockError);
- });
- it('increment() also increments the version', async () => {
- const account1 = await Account.create({ number: 1 });
- expect(account1.version).to.eq(0);
- const account0 = await account1.increment('number', { by: 1 });
- const account = await account0.reload();
- expect(account.version).to.eq(1);
- });
- it('decrement() also increments the version', async () => {
- const account1 = await Account.create({ number: 1 });
- expect(account1.version).to.eq(0);
- const account0 = await account1.decrement('number', { by: 1 });
- const account = await account0.reload();
- expect(account.version).to.eq(1);
- });
- });
- });
|