Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 27 additions & 4 deletions dev/create-sequelize-instance.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,38 @@
import type { Options as Sequelize6Options } from 'sequelize';
import { Sequelize as Sequelize6 } from 'sequelize';
import type { Options as Sequelize7Options, Sequelize as Sequelize7 } from '@sequelize/core';
import type { MsSqlDialect } from '@sequelize/mssql';
import { wrapOptions } from './wrap-options';

export function createSequelize6Instance(options?: Sequelize6Options): Sequelize6 {
return new Sequelize6(wrapOptions(options));
}

export function createSequelize7Instance(options?: Sequelize7Options): Sequelize7 {
// not compatible with node 10
export function createSequelize7Instance(
options?: Omit<Sequelize7Options<MsSqlDialect>, 'dialect'>,
): Sequelize7<MsSqlDialect> {
const { Sequelize: Sequelize7Constructor } = require('@sequelize/core');
// @ts-expect-error -- wrapOptions expect sequelize 6.
return new Sequelize7Constructor(wrapOptions(options));
const { MsSqlDialect } = require('@sequelize/mssql');
const wrappedOptions = wrapOptions(options as unknown as Sequelize6Options) as Sequelize6Options & {
__isOptionsObject__?: boolean;
dialectOptions?: { options?: Record<string, unknown> };
};
const {
dialectOptions,
host: server,
password,
username: userName,
__isOptionsObject__,
...sequelizeOptions
} = wrappedOptions;
const connectionOptions = dialectOptions && dialectOptions.options;

// Sequelize v7 resolves dialects and connection options from standalone dialect packages.
return new Sequelize7Constructor({
...sequelizeOptions,
...connectionOptions,
dialect: MsSqlDialect,
server,
authentication: { type: 'default', options: { userName, password } },
});
}
2 changes: 1 addition & 1 deletion dev/mssql/latest/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ services:
volumes:
- mssql-latest:/var/opt/mssql
healthcheck:
test: ["CMD", "/opt/mssql-tools/bin/sqlcmd", "-S", "localhost", "-U", "SA", "-P", "Password12!", "-l", "30", "-Q", "SELECT 1"]
test: ["CMD", "/opt/mssql-tools18/bin/sqlcmd", "-C", "-S", "localhost", "-U", "SA", "-P", "Password12!", "-l", "30", "-Q", "SELECT 1"]
interval: 3s
timeout: 1s
retries: 10
Expand Down
2 changes: 1 addition & 1 deletion dev/mssql/latest/start.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,6 @@ docker compose -p sequelize-mssql-latest up -d
./../../wait-until-healthy.sh sequelize-mssql-latest

docker exec sequelize-mssql-latest \
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "Password12!" -Q "CREATE DATABASE sequelize_test; ALTER DATABASE sequelize_test SET READ_COMMITTED_SNAPSHOT ON;"
/opt/mssql-tools18/bin/sqlcmd -C -S localhost -U SA -P "Password12!" -Q "CREATE DATABASE sequelize_test; ALTER DATABASE sequelize_test SET READ_COMMITTED_SNAPSHOT ON;"

DIALECT=mssql ts-node ../../check-connection.ts
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,15 @@
"type": "commonjs",
"license": "MIT",
"dependencies": {
"@sequelize/core": "7.0.0-alpha.48",
"@sequelize/mssql": "7.0.0-alpha.48",
"chai": "^4",
"chai-as-promised": "^7",
"chai-datetime": "^1",
"chalk": "^4.1.2",
"cross-env": "^7",
"fs-jetpack": "^4",
"sequelize": "^6",
"@sequelize/core": "alpha",
"sinon": "^13",
"sinon-chai": "^3"
},
Expand Down
41 changes: 0 additions & 41 deletions src/sscce-sequelize-6.ts

This file was deleted.

30 changes: 18 additions & 12 deletions src/sscce-sequelize-7.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
import { CreationOptional, DataTypes, InferAttributes, InferCreationAttributes, Model } from '@sequelize/core';
import { Attribute, NotNull } from '@sequelize/core/decorators-legacy';
import { Attribute, AutoIncrement, NotNull, PrimaryKey, Table } from '@sequelize/core/decorators-legacy';
import { createSequelize7Instance } from '../dev/create-sequelize-instance';
import { expect } from 'chai';
import sinon from 'sinon';

// if your issue is dialect specific, remove the dialects you don't need to test on.
export const testingOnDialects = new Set(['mssql', 'sqlite', 'mysql', 'mariadb', 'postgres', 'postgres-native']);
export const testingOnDialects = new Set(['mssql']);

// You can delete this file if you don't want your SSCCE to be tested against Sequelize 7

Expand All @@ -22,7 +20,11 @@ export async function run() {
},
});

@Table({ tableName: 'trigger_bulk_create_test', hasTrigger: true })
class Foo extends Model<InferAttributes<Foo>, InferCreationAttributes<Foo>> {
@Attribute(DataTypes.INTEGER)
@PrimaryKey
@AutoIncrement
declare id: CreationOptional<number>;

@Attribute(DataTypes.TEXT)
Expand All @@ -31,13 +33,17 @@ export async function run() {
}

sequelize.addModels([Foo]);

// You can use sinon and chai assertions directly in your SSCCE.
const spy = sinon.spy();
sequelize.afterBulkSync(() => spy());
await sequelize.sync({ force: true });
expect(spy).to.have.been.called;

console.log(await Foo.create({ name: 'TS foo' }));
expect(await Foo.count()).to.equal(1);
await sequelize.query(`
CREATE TRIGGER [trigger_bulk_create_test_after_insert]
ON [trigger_bulk_create_test]
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
END
`);

const [foo] = await Foo.bulkCreate([{ name: 'trigger test' }]);
expect(foo.id).to.equal(1);
}
Loading
Loading