123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- import { Sequelize } from '@sequelize/core';
- import { PostgresDialect } from '@sequelize/postgres';
- import { expect } from 'chai';
- import sinon from 'sinon';
- import {
- allowDeprecationsInSuite,
- createSequelizeInstance,
- getTestDialectClass,
- sequelize,
- } from '../support';
- const dialect = getTestDialectClass();
- const dialectName = sequelize.dialect.name;
- describe('Sequelize constructor', () => {
- allowDeprecationsInSuite(['SEQUELIZE0027']);
- it('throws when no dialect is supplied', () => {
- expect(() => {
- // @ts-expect-error -- testing that this throws when the "dialect" option is missing
- new Sequelize({});
- }).to.throw(Error);
- });
- it('throws when an invalid dialect is supplied', () => {
- expect(() => {
- // @ts-expect-error -- testing that this throws
- new Sequelize({ dialect: 'some-fancy-dialect' });
- }).to.throw(
- Error,
- 'The dialect some-fancy-dialect is not natively supported. Native dialects: mariadb, mssql, mysql, postgres, sqlite3, ibmi, db2 and snowflake.',
- );
- });
- it('works when dialect is supplied', () => {
- expect(() => {
- new Sequelize({
- dialect,
- });
- }).not.to.throw();
- });
- it('throws if pool:false', () => {
- expect(() => {
- new Sequelize({
- dialect,
- // @ts-expect-error -- we're testing that this throws an error
- pool: false,
- });
- }).to.throw(
- 'Setting the "pool" option to "false" is not supported since Sequelize 4. To disable the pool, set the "pool"."max" option to 1.',
- );
- });
- it('warns if the database version is not supported', () => {
- const stub = sinon.stub(process, 'emitWarning');
- try {
- createSequelizeInstance({ databaseVersion: '0.0.1' });
- expect(stub.getCalls()[0].args[0]).to.contain(
- 'This database engine version is not supported, please update your database server.',
- );
- } finally {
- stub.restore();
- }
- });
- describe('Network Connections', () => {
- // This test suite runs only for postgres but the logic is the same for every dialect
- if (dialectName !== 'postgres') {
- return;
- }
- it('should correctly set the host and the port', () => {
- const localSequelize = new Sequelize({
- dialect: PostgresDialect,
- host: '127.0.0.1',
- port: 1234,
- });
- expect(localSequelize.options.replication.write.port).to.equal(1234);
- expect(localSequelize.options.replication.write.host).to.equal('127.0.0.1');
- });
- it('accepts a single URI parameter', () => {
- const newSequelize = new Sequelize({
- dialect: PostgresDialect,
- url: `${dialectName}://user:pass@example.com:9821/dbname`,
- });
- const replication = newSequelize.options.replication;
- expect(replication.write).to.deep.eq({
- database: 'dbname',
- user: 'user',
- password: 'pass',
- host: 'example.com',
- port: 9821,
- });
- expect(replication.read).to.deep.eq([]);
- });
- it('supports not providing username, password, or port in URI, but providing them in the option bag', () => {
- const options = {
- port: 10,
- user: 'root',
- password: 'pass',
- database: 'dbname',
- };
- const newSequelize = new Sequelize({
- dialect: PostgresDialect,
- url: `${dialectName}://example.com/dbname`,
- ...options,
- });
- expect(newSequelize.options.replication.write).to.deep.eq({
- host: 'example.com',
- ...options,
- });
- });
- it('supports connection strings in replication options', async () => {
- const url = `${dialectName}://username:password@host:1234/database`;
- const newSequelize = new Sequelize<PostgresDialect>({
- dialect: PostgresDialect,
- replication: {
- write: url,
- read: [url],
- },
- });
- const options = {
- host: 'host',
- database: 'database',
- port: 1234,
- user: 'username',
- password: 'password',
- };
- expect(newSequelize.options.replication.write).to.deep.eq(options);
- expect(newSequelize.options.replication.read).to.deep.eq([options]);
- });
- it('prioritizes the option bag over the URI', () => {
- const newSequelize = new Sequelize<PostgresDialect>({
- dialect: PostgresDialect,
- url: `${dialectName}://localhost:9821/dbname?ssl=true`,
- host: 'localhost2',
- user: 'username2',
- password: 'password2',
- ssl: false,
- port: 2000,
- database: 'dbname2',
- });
- const replication = newSequelize.options.replication;
- expect(replication.write).to.deep.eq({
- database: 'dbname2',
- host: 'localhost2',
- password: 'password2',
- port: 2000,
- ssl: false,
- user: 'username2',
- });
- expect(replication.read).to.deep.eq([]);
- });
- });
- });
|