Skip to content

Commit 87175bd

Browse files
Merge pull request #84 from RobinBuschmann/issue-68
fixes #68
2 parents 74bde9f + dccba3c commit 87175bd

File tree

4 files changed

+44
-7
lines changed

4 files changed

+44
-7
lines changed

lib/models/BaseSequelize.ts

+6-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import {Model} from "./Model";
2-
import {getModels} from "../services/models";
2+
import {DEFAULT_DEFINE_OPTIONS, getModels} from "../services/models";
33
import {getAssociations, processAssociation} from "../services/association";
44
import {ISequelizeConfig} from "../interfaces/ISequelizeConfig";
55
import {resolveScopes} from "../services/models";
@@ -28,13 +28,16 @@ export abstract class BaseSequelize {
2828
* Prepares sequelize config passed to original sequelize constructor
2929
*/
3030
static prepareConfig(config: ISequelizeConfig | ISequelizeValidationOnlyConfig): ISequelizeConfig {
31+
if (!config.define) {
32+
config.define = {};
33+
}
34+
config.define = {...DEFAULT_DEFINE_OPTIONS, ...config.define};
3135

3236
if (config.validateOnly) {
3337

3438
return this.getValidationOnlyConfig(config);
3539
}
36-
37-
return config as ISequelizeConfig;
40+
return {...config as ISequelizeConfig};
3841
}
3942

4043
static getValidationOnlyConfig(config: ISequelizeConfig | ISequelizeValidationOnlyConfig): ISequelizeConfig {

lib/services/models.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ const MODEL_NAME_KEY = 'sequelize:modelName';
1616
const SCOPES_KEY = 'sequelize:scopes';
1717
const ATTRIBUTES_KEY = 'sequelize:attributes';
1818
const OPTIONS_KEY = 'sequelize:options';
19-
const DEFAULT_OPTIONS: DefineOptions<any> = {
19+
export const DEFAULT_DEFINE_OPTIONS: DefineOptions<any> = {
2020
timestamps: false
2121
};
2222
export const PROPERTY_LINK_TO_ORIG = '__origClass';
@@ -141,7 +141,7 @@ export function getOptions(target: any): DefineOptions<any> | undefined {
141141
* Sets seuqlize define options to class prototype
142142
*/
143143
export function setOptions(target: any, options: DefineOptions<any>): void {
144-
Reflect.defineMetadata(OPTIONS_KEY, {...DEFAULT_OPTIONS, ...options}, target);
144+
Reflect.defineMetadata(OPTIONS_KEY, {...options}, target);
145145
}
146146

147147
/**

test/specs/models/sequelize.spec.ts

+33
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
1+
/* tslint:disable:max-classes-per-file */
2+
13
import {expect} from 'chai';
24
import {createSequelize} from "../../utils/sequelize";
35
import {Game} from "../../models/exports/Game";
46
import Gamer from "../../models/exports/gamer.model";
57
import {Sequelize} from "../../../lib/models/Sequelize";
8+
import {Model} from '../../../lib/models/Model';
9+
import {Table} from '../../../lib/annotations/Table';
610

711
describe('sequelize', () => {
812

@@ -16,6 +20,35 @@ describe('sequelize', () => {
1620

1721
});
1822

23+
describe('global define options', () => {
24+
25+
const DEFINE_OPTIONS = {timestamps: true, underscoredAll: true};
26+
const sequelizeWithDefine = createSequelize(false, DEFINE_OPTIONS);
27+
28+
it('should have define options', () => {
29+
expect(sequelizeWithDefine)
30+
.to.have.property('options')
31+
.that.has.property('define')
32+
.that.eqls(DEFINE_OPTIONS)
33+
;
34+
});
35+
36+
it('should set define options for models', () => {
37+
@Table
38+
class User extends Model<User> {}
39+
sequelizeWithDefine.addModels([User]);
40+
41+
Object
42+
.keys(DEFINE_OPTIONS)
43+
.forEach(key => {
44+
expect(User)
45+
.to.have.property('options')
46+
.that.have.property(key, DEFINE_OPTIONS[key]);
47+
});
48+
});
49+
50+
});
51+
1952
describe('addModels', () => {
2053

2154
it('should not throw', () => {

test/utils/sequelize.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
import {Sequelize} from "../../lib/models/Sequelize";
22
import * as OriginSequelize from "sequelize";
3-
import {Sequelize as SequelizeType} from "sequelize";
3+
import {DefineOptions, Sequelize as SequelizeType} from "sequelize";
44

5-
export function createSequelize(useModelsInPath: boolean = true): Sequelize {
5+
export function createSequelize(useModelsInPath: boolean = true, define: DefineOptions<any> = {}): Sequelize {
66

77
return new Sequelize({
88
name: '__',
99
dialect: 'sqlite',
1010
username: 'root',
1111
password: '',
12+
define,
1213
storage: ':memory:',
1314
logging: !('SEQ_SILENT' in process.env),
1415
modelPaths: useModelsInPath ? [__dirname + '/../models'] : []

0 commit comments

Comments
 (0)