setter_function.test.js
3.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
"use strict";
/* jshint camelcase: false */
/* jshint expr: true */
var chai = require('chai')
, Sequelize = require('../../index')
, Promise = Sequelize.Promise
, expect = chai.expect
, Support = require(__dirname + '/../support')
, DataTypes = require(__dirname + "/../../lib/data-types")
, dialect = Support.getTestDialect()
, datetime = require('chai-datetime');
chai.use(datetime);
chai.config.includeStack = true;
describe(Support.getTestDialectTeaser("Model"), function () {
describe('setter function in join table', function () {
beforeEach(function () {
this.Student = this.sequelize.define('student', {
no: {type:Sequelize.INTEGER, primaryKey:true},
name: Sequelize.STRING,
},{
tableName: "student",
timestamps: false
})
this.Course = this.sequelize.define('course', {
no: {type:Sequelize.INTEGER,primaryKey:true},
name: Sequelize.STRING,
},{
tableName: 'course',
timestamps: false
})
var self = this
self.setter_function_called_count = 0
this.Score = this.sequelize.define('score',{
score: Sequelize.INTEGER,
test_value: {
type: Sequelize.INTEGER,
set: function(v) {
self.setter_function_called_count++;
this.setDataValue('test_value',v+1)
},
//get: function() {
//return Number(this.getDataValue('test_value'))
//}
}
},{
tableName: 'score',
timestamps: false
})
this.Student.hasMany(this.Course, {through:this.Score,foreignKey:'StudentId'})
this.Course.hasMany(this.Student,{through:this.Score,foreignKey:'CourseId'})
return this.sequelize.sync({force:true})
});
it('create some data and test', function () {
var self = this;
return Promise.all([
this.Student.create({no:1,name:'ryan'}),
this.Course.create({no:100,name:'history'}),
])
.bind(this).then(function(){
var s = this.Student.build({no:1})
var c = this.Course.build({no:100})
return s.addCourse(c,{score:98,test_value:1000})
})
.then(function(){
expect(self.setter_function_called_count).to.equal(1)
return self.Score.find({StudentId:1,CourseId:100}).then(function(s){
expect(s.test_value).to.equal(1001) // setter function increased test_value
})
})
.then(function(){
return this.Student.build({no:1}).getCourses({where:{no:100}})
.then(function(m){
// data in database is ok
return self.Score.find({StudentId:1,CourseId:100}).then(function(s){
expect(s.test_value).to.equal(1001)
return m
})
})
})
.then(function(m){
// either is failed. because setter function is called twice.
expect(m[0].score.toJSON().test_value).to.equal(1001)
expect(self.setter_function_called_count).to.equal(1)
})
});
});
});