'use strict'; const chai = require('chai'); const expect = chai.expect; const Support = require('../../support'); const dialect = Support.getTestDialect(); const { DataTypes } = require('@sequelize/core'); if (dialect === 'mariadb') { describe('[MariaDB Specific] Associations', () => { describe('many-to-many', () => { describe('where tables have the same prefix', () => { it('should create a table wp_table1wp_table2s', async function () { const Table2 = this.sequelize.define('wp_table2', { foo: DataTypes.STRING }); const Table1 = this.sequelize.define('wp_table1', { foo: DataTypes.STRING }); Table1.belongsToMany(Table2, { through: 'wp_table1swp_table2s' }); Table2.belongsToMany(Table1, { through: 'wp_table1swp_table2s' }); await Table1.sync({ force: true }); await Table2.sync({ force: true }); expect(this.sequelize.models.get('wp_table1swp_table2s')).to.exist; }); }); describe('when join table name is specified', () => { beforeEach(async function () { const Table2 = this.sequelize.define('ms_table1', { foo: DataTypes.STRING }); const Table1 = this.sequelize.define('ms_table2', { foo: DataTypes.STRING }); Table1.belongsToMany(Table2, { through: 'table1_to_table2' }); Table2.belongsToMany(Table1, { through: 'table1_to_table2' }); await Table1.sync({ force: true }); await Table2.sync({ force: true }); }); it('should not use only a specified name', function () { expect(this.sequelize.models.get('ms_table1sms_table2s')).not.to.exist; expect(this.sequelize.models.get('table1_to_table2')).to.exist; }); }); }); describe('HasMany', () => { beforeEach(async function () { // prevent periods from occurring in the table name since they are used to delimit (table.column) this.User = this.sequelize.define(`User${Math.ceil(Math.random() * 10_000_000)}`, { name: DataTypes.STRING, }); this.Task = this.sequelize.define(`Task${Math.ceil(Math.random() * 10_000_000)}`, { name: DataTypes.STRING, }); this.users = null; this.tasks = null; this.User.belongsToMany(this.Task, { as: 'Tasks', through: 'UserTasks' }); this.Task.belongsToMany(this.User, { as: 'Users', through: 'UserTasks' }); const users = []; const tasks = []; for (let i = 0; i < 5; ++i) { users[i] = { name: `User${Math.random()}` }; tasks[i] = { name: `Task${Math.random()}` }; } await this.sequelize.sync({ force: true }); await this.User.bulkCreate(users); await this.Task.bulkCreate(tasks); }); }); }); }