kojac 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/.gitignore +7 -0
- data/Gemfile +17 -0
- data/Gemfile.lock +158 -0
- data/MIT-LICENSE +20 -0
- data/README.md +69 -0
- data/Rakefile +27 -0
- data/app/assets/javascripts/can_extensions.js +45 -0
- data/app/assets/javascripts/kojac.js +1230 -0
- data/app/assets/javascripts/kojac_canjs.js +191 -0
- data/app/assets/javascripts/kojac_ember.js +463 -0
- data/app/controllers/kojac_controller.rb +70 -0
- data/app/serializers/default_kojac_serializer.rb +10 -0
- data/diagram.odg +0 -0
- data/kojac.gemspec +36 -0
- data/lib/kojac/app_serialize.rb +29 -0
- data/lib/kojac/kojac_rails.rb +432 -0
- data/lib/kojac/ring_strong_parameters.rb +195 -0
- data/lib/kojac/version.rb +3 -0
- data/lib/kojac.rb +8 -0
- data/lib/tasks/kojac_tasks.rake +4 -0
- data/notes.txt +48 -0
- data/spec/.DS_Store +0 -0
- data/spec/can_cache_spec.js +87 -0
- data/spec/can_factory_spec.js +144 -0
- data/spec/can_model_spec.js +127 -0
- data/spec/demo/README.rdoc +261 -0
- data/spec/demo/Rakefile +7 -0
- data/spec/demo/app/assets/javascripts/application.js +15 -0
- data/spec/demo/app/assets/stylesheets/application.css +13 -0
- data/spec/demo/app/controllers/application_controller.rb +3 -0
- data/spec/demo/app/helpers/application_helper.rb +2 -0
- data/spec/demo/app/mailers/.gitkeep +0 -0
- data/spec/demo/app/models/.gitkeep +0 -0
- data/spec/demo/app/views/layouts/application.html.erb +14 -0
- data/spec/demo/config/application.rb +65 -0
- data/spec/demo/config/boot.rb +10 -0
- data/spec/demo/config/database.yml +25 -0
- data/spec/demo/config/environment.rb +5 -0
- data/spec/demo/config/environments/development.rb +37 -0
- data/spec/demo/config/environments/production.rb +67 -0
- data/spec/demo/config/environments/test.rb +37 -0
- data/spec/demo/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/demo/config/initializers/inflections.rb +15 -0
- data/spec/demo/config/initializers/mime_types.rb +5 -0
- data/spec/demo/config/initializers/secret_token.rb +7 -0
- data/spec/demo/config/initializers/session_store.rb +8 -0
- data/spec/demo/config/initializers/wrap_parameters.rb +14 -0
- data/spec/demo/config/locales/en.yml +5 -0
- data/spec/demo/config/routes.rb +58 -0
- data/spec/demo/config.ru +4 -0
- data/spec/demo/lib/assets/.gitkeep +0 -0
- data/spec/demo/log/.gitkeep +0 -0
- data/spec/demo/public/404.html +26 -0
- data/spec/demo/public/422.html +26 -0
- data/spec/demo/public/500.html +25 -0
- data/spec/demo/public/favicon.ico +0 -0
- data/spec/demo/script/rails +6 -0
- data/spec/ember_factory_spec.js +157 -0
- data/spec/ember_model_spec.js +179 -0
- data/spec/external/.DS_Store +0 -0
- data/spec/external/ember/.DS_Store +0 -0
- data/spec/external/ember/ember-1.0.0-rc.6.js +30970 -0
- data/spec/external/ember/handlebars-1.0.0-rc.4.js +2239 -0
- data/spec/external/jasmine/MIT.LICENSE +20 -0
- data/spec/external/jasmine/jasmine-html.js +616 -0
- data/spec/external/jasmine/jasmine.css +81 -0
- data/spec/external/jasmine/jasmine.js +2529 -0
- data/spec/external/jasmine.async.js +51 -0
- data/spec/external/jquery/jquery-1.7.2.js +9404 -0
- data/spec/external/jquery/jquery-1.7.2.min.js +4 -0
- data/spec/external/jquery/jquery-1.9.1.js +9597 -0
- data/spec/external/json2.js +480 -0
- data/spec/external/steal/steal-121115.js +2747 -0
- data/spec/external/steal/steal-3.2.3.js +2098 -0
- data/spec/external/steal/steal-3.2.3.min.js +27 -0
- data/spec/external/steal/steal.js +2466 -0
- data/spec/external/steal/steal.min.js +32 -0
- data/spec/external/steal/stealconfig.js +19 -0
- data/spec/external/underscore.js +1223 -0
- data/spec/external/underscore_plus.js +261 -0
- data/spec/external.zip +0 -0
- data/spec/handler_stack_spec.js +143 -0
- data/spec/helpers/SpecHelper.js +10 -0
- data/spec/kojac_caching_spec.js +105 -0
- data/spec/kojac_mock_spec.js +230 -0
- data/spec/kojac_model_spec.js +126 -0
- data/spec/kojac_object_spec.js +171 -0
- data/spec/kojac_operations_spec.js +41 -0
- data/spec/mockjson/order_item.js +37 -0
- data/spec/mockjson/order_item__49.js +15 -0
- data/spec/mockjson/order_item__50.js +15 -0
- data/spec/mockjson/order_item__51.js +15 -0
- data/spec/mockjson/product.js +82 -0
- data/spec/mockjson/product__3.js +22 -0
- data/spec/model_ring_spec.rb +52 -0
- data/spec/operation_include_spec.js +77 -0
- data/spec/run.html +81 -0
- data/spec/spec.js +2 -0
- data/spec/support/jasmine.yml +86 -0
- metadata +380 -0
@@ -0,0 +1,230 @@
|
|
1
|
+
describe("Kojac Mock", function() {
|
2
|
+
|
3
|
+
var App = {};
|
4
|
+
|
5
|
+
var OrderItem = Kojac.Object.extend({
|
6
|
+
id: Int,
|
7
|
+
customer_id: Int,
|
8
|
+
product_id: Int
|
9
|
+
});
|
10
|
+
|
11
|
+
var Product = Kojac.Object.extend({
|
12
|
+
|
13
|
+
});
|
14
|
+
|
15
|
+
beforeEach(function () {
|
16
|
+
App.cache = new Kojac.Object();
|
17
|
+
var factory = new Kojac.ObjectFactory();
|
18
|
+
factory.register([
|
19
|
+
[/^order_item(__|$)/,OrderItem],
|
20
|
+
[/^product(__|$)/,Product]
|
21
|
+
]);
|
22
|
+
App.kojac = new Kojac.Core({
|
23
|
+
cache: App.cache,
|
24
|
+
remoteProvider: new Kojac.RemoteProvider({useMockFileValues: true, mockFilePath: 'mockjson/'}),
|
25
|
+
objectFactory: factory
|
26
|
+
});
|
27
|
+
});
|
28
|
+
|
29
|
+
it("try reading order_item,product", function() {
|
30
|
+
var op;
|
31
|
+
var req;
|
32
|
+
runs(function() {
|
33
|
+
req = App.kojac.readRequest(['order_item','product','order_item__50']);
|
34
|
+
expect(req).toBeDefined('ops');
|
35
|
+
expect(req).toBeDefined('options');
|
36
|
+
expect(req.ops.length).toEqual(3);
|
37
|
+
op = req.ops[0];
|
38
|
+
expect(op.verb).toEqual('READ');
|
39
|
+
expect(op.key).toEqual('order_item');
|
40
|
+
expect(op.result_key).toEqual(op.key);
|
41
|
+
expect(op.results).toEqual({});
|
42
|
+
op = req.ops[1];
|
43
|
+
expect(op.verb).toEqual('READ');
|
44
|
+
expect(op.key).toEqual('product');
|
45
|
+
expect(op.result_key).toEqual(op.key);
|
46
|
+
expect(op.results).toEqual({});
|
47
|
+
op = req.ops[2];
|
48
|
+
expect(op.verb).toEqual('READ');
|
49
|
+
expect(op.key).toEqual('order_item__50');
|
50
|
+
expect(op.result_key).toEqual(op.key);
|
51
|
+
expect(op.results).toEqual({});
|
52
|
+
});
|
53
|
+
waitsFor(function() {
|
54
|
+
return req.isResolved()
|
55
|
+
}, "request done", 3000);
|
56
|
+
runs(function() {
|
57
|
+
expect(req.ops).toBeDefined();
|
58
|
+
op = req.ops[0];
|
59
|
+
expect(op.verb).toEqual('READ');
|
60
|
+
expect(op.key).toEqual('order_item');
|
61
|
+
expect(op.result_key).toEqual(op.key);
|
62
|
+
expect(typeof(op.results)).toBe('object');
|
63
|
+
expect(op.results.order_item).toEqual([49,50,51]);
|
64
|
+
expect(op.results.order_item__49.constructor).toBe(OrderItem);
|
65
|
+
expect(op.results.order_item__49.id).toEqual(49);
|
66
|
+
expect(op.results.order_item__49.accountRef).toEqual("000049X");
|
67
|
+
expect(op.results.order_item__49.productId).toEqual(3);
|
68
|
+
op = req.ops[1];
|
69
|
+
expect(op.verb).toEqual('READ');
|
70
|
+
expect(op.key).toEqual('product');
|
71
|
+
expect(op.result_key).toEqual(op.key);
|
72
|
+
expect(typeof(op.results)).toBe('object');
|
73
|
+
expect(op.results.product).toEqual([3,4,5]);
|
74
|
+
expect(op.results.product__3.constructor).toBe(Product);
|
75
|
+
expect(op.results.product__3.name).toEqual("Product 3");
|
76
|
+
expect(op.results.product__3.provider).toEqual("AJAX Pty Ltd");
|
77
|
+
op = req.ops[2];
|
78
|
+
expect(op.verb).toEqual('READ');
|
79
|
+
expect(op.key).toEqual('order_item__50');
|
80
|
+
expect(op.result_key).toEqual(op.key);
|
81
|
+
expect(op.results.order_item__50.constructor).toBe(OrderItem);
|
82
|
+
expect(op.results.order_item__50.accountRef).toEqual("000050X");
|
83
|
+
expect(op.results.order_item__50.memberTypeId).toEqual("CDB");
|
84
|
+
expect(op.results.order_item__50.drawings).toEqual(1234.50);
|
85
|
+
|
86
|
+
expect(App.cache.order_item__49).toBeDefined();
|
87
|
+
expect(App.cache.order_item__49).toBe(req.ops[0].results.order_item__49);
|
88
|
+
expect(App.cache.product__3).toBeDefined();
|
89
|
+
expect(App.cache.product__3).toBe(req.ops[1].results.product__3);
|
90
|
+
});
|
91
|
+
});
|
92
|
+
|
93
|
+
it("try creating", function() {
|
94
|
+
var op;
|
95
|
+
var req;
|
96
|
+
App.kojac.remoteProvider.mockWriteOperationHandler = function(aOp) {
|
97
|
+
op.result_key = 'order_item__54';
|
98
|
+
op.results = {
|
99
|
+
order_item__54: op.value
|
100
|
+
};
|
101
|
+
};
|
102
|
+
runs(function() {
|
103
|
+
req = App.kojac.createRequest([{order_item:{name: 'Fred'}}]);
|
104
|
+
expect(req).toBeDefined('ops');
|
105
|
+
expect(req).toBeDefined('options');
|
106
|
+
expect(req.ops.length).toEqual(1);
|
107
|
+
op = req.ops[0];
|
108
|
+
expect(op.verb).toEqual('CREATE');
|
109
|
+
expect(op.key).toEqual('order_item');
|
110
|
+
expect(op.value).toEqual({name: 'Fred'});
|
111
|
+
expect(op.results).toEqual({});
|
112
|
+
});
|
113
|
+
waitsFor(function() { return req.isResolved(); }, "request done", 3000);
|
114
|
+
runs(function() {
|
115
|
+
expect(req.ops).toBeDefined();
|
116
|
+
op = req.ops[0];
|
117
|
+
expect(op.verb).toEqual('CREATE');
|
118
|
+
expect(op.key).toEqual('order_item');
|
119
|
+
expect(op.result_key).toEqual('order_item__54');
|
120
|
+
expect(typeof(op.results)).toBe('object');
|
121
|
+
expect(op.results.order_item).toBeUndefined();
|
122
|
+
expect(op.results.order_item__54.constructor).toBe(OrderItem);
|
123
|
+
expect(op.results.order_item__54.name).toEqual("Fred");
|
124
|
+
|
125
|
+
expect(App.cache.order_item__54).toBeDefined();
|
126
|
+
expect(App.cache.order_item__54).toBe(op.results.order_item__54);
|
127
|
+
});
|
128
|
+
});
|
129
|
+
|
130
|
+
it("try updating", function() {
|
131
|
+
var op;
|
132
|
+
var req;
|
133
|
+
App.kojac.remoteProvider.mockWriteOperationHandler = function(aOp) {
|
134
|
+
op.result_key = op.key;
|
135
|
+
op.results = {
|
136
|
+
order_item__54: op.value
|
137
|
+
};
|
138
|
+
};
|
139
|
+
runs(function() {
|
140
|
+
req = App.kojac.updateRequest({order_item__54: {name: 'John'}});
|
141
|
+
expect(req).toBeDefined('ops');
|
142
|
+
expect(req).toBeDefined('options');
|
143
|
+
expect(req.ops.length).toEqual(1);
|
144
|
+
op = req.ops[0];
|
145
|
+
expect(op.verb).toEqual('UPDATE');
|
146
|
+
expect(op.key).toEqual('order_item__54');
|
147
|
+
expect(op.value).toEqual({name: 'John'});
|
148
|
+
expect(op.result_key).toEqual(op.key);
|
149
|
+
expect(op.results).toEqual({});
|
150
|
+
});
|
151
|
+
waitsFor(function() { return req.isResolved(); }, "request done", 3000);
|
152
|
+
runs(function() {
|
153
|
+
expect(req.ops).toBeDefined();
|
154
|
+
op = req.ops[0];
|
155
|
+
expect(op.result_key).toEqual(op.key);
|
156
|
+
expect(typeof(op.results)).toBe('object');
|
157
|
+
expect(op.results.order_item).toBeUndefined();
|
158
|
+
expect(op.results.order_item__54.constructor).toBe(OrderItem);
|
159
|
+
expect(op.results.order_item__54.name).toEqual("John");
|
160
|
+
|
161
|
+
expect(App.cache.order_item__54).toBeDefined();
|
162
|
+
expect(App.cache.order_item__54).toBe(op.results.order_item__54);
|
163
|
+
});
|
164
|
+
});
|
165
|
+
|
166
|
+
it("try destroying", function() {
|
167
|
+
var op;
|
168
|
+
var req;
|
169
|
+
App.kojac.remoteProvider.mockWriteOperationHandler = function(aOp) {
|
170
|
+
op.result_key = op.key;
|
171
|
+
op.results = {
|
172
|
+
order_item__54: undefined
|
173
|
+
};
|
174
|
+
};
|
175
|
+
runs(function() {
|
176
|
+
req = App.kojac.destroyRequest(['order_item__54']);
|
177
|
+
expect(req).toBeDefined('ops');
|
178
|
+
expect(req).toBeDefined('options');
|
179
|
+
expect(req.ops.length).toEqual(1);
|
180
|
+
op = req.ops[0];
|
181
|
+
expect(op.verb).toEqual('DESTROY');
|
182
|
+
expect(op.key).toEqual('order_item__54');
|
183
|
+
expect(op.value).toBeUndefined();
|
184
|
+
expect(op.result_key).toEqual(op.key);
|
185
|
+
expect(op.results).toEqual({});
|
186
|
+
});
|
187
|
+
waitsFor(function() { return req.isResolved(); }, "request done", 3000);
|
188
|
+
runs(function() {
|
189
|
+
expect(req.ops).toBeDefined();
|
190
|
+
op = req.ops[0];
|
191
|
+
expect(op.result_key).toEqual(op.key);
|
192
|
+
expect(typeof(op.results)).toBe('object');
|
193
|
+
expect(op.results.order_item__54).toBeUndefined();
|
194
|
+
expect(App.cache.order_item__54).toBeUndefined();
|
195
|
+
});
|
196
|
+
});
|
197
|
+
|
198
|
+
it("try executing", function() {
|
199
|
+
var op;
|
200
|
+
var req;
|
201
|
+
App.kojac.remoteProvider.mockReadOperationHandler = function(aOp) {
|
202
|
+
op.result_key = op.key;
|
203
|
+
op.results = {
|
204
|
+
results: [1,2,3]
|
205
|
+
};
|
206
|
+
};
|
207
|
+
runs(function() {
|
208
|
+
req = App.kojac.executeRequest('results',{a: 1,b:2},{cacheResults: true});
|
209
|
+
expect(req).toBeDefined('ops');
|
210
|
+
expect(req).toBeDefined('options');
|
211
|
+
expect(req.ops.length).toEqual(1);
|
212
|
+
op = req.ops[0];
|
213
|
+
expect(op.verb).toEqual('EXECUTE');
|
214
|
+
expect(op.key).toEqual('results');
|
215
|
+
expect(op.value).toEqual({a: 1,b:2});
|
216
|
+
expect(op.result_key).toEqual(op.key);
|
217
|
+
expect(op.results).toEqual({});
|
218
|
+
});
|
219
|
+
waitsFor(function() { return req.isResolved(); }, "request done", 3000);
|
220
|
+
runs(function() {
|
221
|
+
expect(req.ops).toBeDefined();
|
222
|
+
op = req.ops[0];
|
223
|
+
expect(op.result_key).toEqual(op.key);
|
224
|
+
expect(typeof(op.results)).toBe('object');
|
225
|
+
expect(op.results.results).toEqual([1,2,3]);
|
226
|
+
expect(App.cache.results).toEqual([1,2,3]);
|
227
|
+
});
|
228
|
+
});
|
229
|
+
});
|
230
|
+
|
@@ -0,0 +1,126 @@
|
|
1
|
+
describe("Kojac Model", function() {
|
2
|
+
|
3
|
+
var TestModel = Kojac.Model.extend({
|
4
|
+
name: String,
|
5
|
+
count: 8
|
6
|
+
});
|
7
|
+
|
8
|
+
var TestModel2 = TestModel.extend({
|
9
|
+
name: Boolean,
|
10
|
+
color: 'red'
|
11
|
+
});
|
12
|
+
|
13
|
+
var TestModel3 = TestModel.extend({
|
14
|
+
count: 0,
|
15
|
+
inc: function() {
|
16
|
+
this.count += 1;
|
17
|
+
}
|
18
|
+
});
|
19
|
+
|
20
|
+
it("create model class and object", function() {
|
21
|
+
expect(TestModel.__attributes).toEqual({name: String, count: Int});
|
22
|
+
expect(TestModel._superClass).toBe(Kojac.Model);
|
23
|
+
var testModel = new TestModel();
|
24
|
+
expect(testModel instanceof TestModel).toBe(true);
|
25
|
+
expect(testModel instanceof Kojac.Object).toBe(true);
|
26
|
+
expect(testModel.name).toBeNull();
|
27
|
+
expect(testModel.count).toBe(8);
|
28
|
+
expect(testModel.toJSON).toBeDefined();
|
29
|
+
});
|
30
|
+
|
31
|
+
it("extend with override and additional attribute", function() {
|
32
|
+
expect(TestModel2.__attributes).toEqual({name: Boolean, count: Int, color: String});
|
33
|
+
expect(TestModel2._superClass).toBe(TestModel);
|
34
|
+
var testModel2 = new TestModel2();
|
35
|
+
expect(testModel2 instanceof TestModel2).toBe(true);
|
36
|
+
expect(testModel2 instanceof Kojac.Object).toBe(true);
|
37
|
+
expect(testModel2.name).toBeNull();
|
38
|
+
expect(testModel2.count).toBe(8);
|
39
|
+
});
|
40
|
+
|
41
|
+
var CurSuper = Kojac.Model.extend({
|
42
|
+
id: Int,
|
43
|
+
accountRef: String,
|
44
|
+
productId: Int,
|
45
|
+
drawings: Number,
|
46
|
+
holdings: Array,
|
47
|
+
comments: Object,
|
48
|
+
content: Null
|
49
|
+
});
|
50
|
+
|
51
|
+
it("write, read and check with correct types", function() {
|
52
|
+
var values = {
|
53
|
+
id: 123,
|
54
|
+
accountRef: 'XYZ',
|
55
|
+
productId: 456,
|
56
|
+
drawings: 3567.88,
|
57
|
+
holdings: [{name: 'this'},{name: 'that'}],
|
58
|
+
comments: {name: 'something else'},
|
59
|
+
content: 123
|
60
|
+
};
|
61
|
+
var curSuper = new CurSuper(values);
|
62
|
+
expect(curSuper.attr()).toEqual(values);
|
63
|
+
});
|
64
|
+
|
65
|
+
it("write incorrect types, then read and check with attr and serialize", function() {
|
66
|
+
var incorrectValues = {
|
67
|
+
id: 123.345,
|
68
|
+
accountRef: 345345346,
|
69
|
+
productId: '456',
|
70
|
+
drawings: '3567.88',
|
71
|
+
holdings: "something",
|
72
|
+
comments: 'something else',
|
73
|
+
content: 'XYZ'
|
74
|
+
};
|
75
|
+
var correctValues = {
|
76
|
+
id: 123,
|
77
|
+
accountRef: '345345346',
|
78
|
+
productId: 456,
|
79
|
+
drawings: 3567.88,
|
80
|
+
holdings: null,
|
81
|
+
comments: null,
|
82
|
+
content: 'XYZ'
|
83
|
+
};
|
84
|
+
var curSuper = new CurSuper(incorrectValues);
|
85
|
+
expect(curSuper.attr()).toEqual(correctValues);
|
86
|
+
});
|
87
|
+
|
88
|
+
|
89
|
+
it("test if Model methods are bound", function() {
|
90
|
+
var testModel3 = new TestModel3();
|
91
|
+
expect(testModel3.count).toEqual(0);
|
92
|
+
testModel3.inc();
|
93
|
+
expect(testModel3.count).toEqual(1);
|
94
|
+
});
|
95
|
+
|
96
|
+
it("defaults test", function() {
|
97
|
+
var Zelda = Kojac.Model.extend({
|
98
|
+
sword: 'Wooden Sword',
|
99
|
+
shield: false,
|
100
|
+
hearts: 3,
|
101
|
+
rupees: 0
|
102
|
+
});
|
103
|
+
var link = new Zelda({
|
104
|
+
rupees: 255
|
105
|
+
});
|
106
|
+
expect(link.attr('sword')).toEqual('Wooden Sword');
|
107
|
+
expect(link.attr('rupees')).toEqual(255);
|
108
|
+
});
|
109
|
+
|
110
|
+
it("Kojac.Model defaults and methods work", function() {
|
111
|
+
var MyTestModel = Kojac.Model.extend({
|
112
|
+
count: 5,
|
113
|
+
inc: function() {
|
114
|
+
this.count += 1;
|
115
|
+
}
|
116
|
+
});
|
117
|
+
console.log('before new MyTestModel');
|
118
|
+
var testModel = new MyTestModel({});
|
119
|
+
console.log('after new MyTestModel');
|
120
|
+
expect(testModel.attr('count')).toBe(5);
|
121
|
+
testModel.inc();
|
122
|
+
expect(testModel.count).toEqual(6);
|
123
|
+
});
|
124
|
+
|
125
|
+
});
|
126
|
+
|
@@ -0,0 +1,171 @@
|
|
1
|
+
describe("John Resigs JrClass", function() {
|
2
|
+
|
3
|
+
it("JRs tests",function(){
|
4
|
+
var Person = JrClass.extend({
|
5
|
+
// init: function(isDancing){
|
6
|
+
// this.dancing = isDancing;
|
7
|
+
// },
|
8
|
+
dance: function(){
|
9
|
+
return this.dancing;
|
10
|
+
}
|
11
|
+
});
|
12
|
+
var Ninja = Person.extend({
|
13
|
+
init: function(){
|
14
|
+
this._super({dancing: false});
|
15
|
+
},
|
16
|
+
dance: function(){
|
17
|
+
// Call the inherited version of dance()
|
18
|
+
return this._super();
|
19
|
+
},
|
20
|
+
swingSword: function(){
|
21
|
+
return true;
|
22
|
+
}
|
23
|
+
});
|
24
|
+
|
25
|
+
var p = new Person({dancing: true});
|
26
|
+
expect(p.dance()).toBeTruthy();
|
27
|
+
|
28
|
+
var n = new Ninja();
|
29
|
+
expect(n.dance()).toBeFalsy();
|
30
|
+
expect(n.swingSword()).toBeTruthy();
|
31
|
+
|
32
|
+
// Should all be true
|
33
|
+
expect(p instanceof Person).toBeTruthy();
|
34
|
+
expect(p instanceof JrClass).toBeTruthy();
|
35
|
+
expect(n instanceof Ninja).toBeTruthy();
|
36
|
+
expect(n instanceof Person).toBeTruthy();
|
37
|
+
expect(n instanceof JrClass).toBeTruthy();
|
38
|
+
});
|
39
|
+
|
40
|
+
it("create base class and object", function() {
|
41
|
+
|
42
|
+
var Person = JrClass.extend({
|
43
|
+
dancing: false
|
44
|
+
});
|
45
|
+
var Ninja = Person.extend({
|
46
|
+
dancing: true
|
47
|
+
});
|
48
|
+
|
49
|
+
var p = new Person();
|
50
|
+
expect(p.dancing).toBeFalsy();
|
51
|
+
p = new Person({dancing: true});
|
52
|
+
expect(p.dancing).toBeTruthy();
|
53
|
+
|
54
|
+
var n = new Ninja();
|
55
|
+
expect(n.dancing).toBeTruthy();
|
56
|
+
n = new Ninja({dancing: false});
|
57
|
+
expect(n.dancing).toBeFalsy();
|
58
|
+
|
59
|
+
});
|
60
|
+
|
61
|
+
it("test _super", function() {
|
62
|
+
|
63
|
+
var Person = JrClass.extend({
|
64
|
+
// init: function(aProperties){
|
65
|
+
// this.dancing = isDancing;
|
66
|
+
// },
|
67
|
+
dance: function(){
|
68
|
+
return this.dancing;
|
69
|
+
}
|
70
|
+
});
|
71
|
+
var Ninja = Person.extend({
|
72
|
+
init: function(){
|
73
|
+
this._super({dancing: false});
|
74
|
+
},
|
75
|
+
dance: function(){
|
76
|
+
// Call the inherited version of dance()
|
77
|
+
return this._super();
|
78
|
+
},
|
79
|
+
swingSword: function(){
|
80
|
+
return true;
|
81
|
+
}
|
82
|
+
});
|
83
|
+
|
84
|
+
var p = new Person({dancing: true});
|
85
|
+
expect(p.dance()).toBeTruthy();
|
86
|
+
|
87
|
+
var n = new Ninja();
|
88
|
+
expect(n.dance()).toBeFalsy();
|
89
|
+
expect(n.swingSword()).toBeTruthy();
|
90
|
+
|
91
|
+
// Should all be true
|
92
|
+
expect(p instanceof Person).toBeTruthy();
|
93
|
+
expect(p instanceof JrClass).toBeTruthy();
|
94
|
+
expect(n instanceof Ninja).toBeTruthy();
|
95
|
+
expect(n instanceof Person).toBeTruthy();
|
96
|
+
expect(n instanceof JrClass).toBeTruthy();
|
97
|
+
|
98
|
+
});
|
99
|
+
|
100
|
+
it("JrClass descendant should clone objects and arrays when used as class default values when extending, but not when instantiating", function(){
|
101
|
+
var OpDefObject = {};
|
102
|
+
var Op = JrClass.extend({
|
103
|
+
anObject: OpDefObject,
|
104
|
+
anArray: [],
|
105
|
+
aNumber: 5
|
106
|
+
});
|
107
|
+
var op1 = new Op();
|
108
|
+
var op2 = new Op();
|
109
|
+
expect(op1.aNumber).toBe(5);
|
110
|
+
expect(op2.aNumber).toBe(5);
|
111
|
+
op2.aNumber = 7;
|
112
|
+
expect(op2.aNumber).toBe(7);
|
113
|
+
|
114
|
+
expect(op1.anObject).not.toBe(OpDefObject);
|
115
|
+
op1.anObject.something = "elephant";
|
116
|
+
expect(op1.anObject).toEqual({something: "elephant"});
|
117
|
+
expect(op2.anObject).not.toBe(OpDefObject);
|
118
|
+
expect(op2.anObject).toEqual({});
|
119
|
+
|
120
|
+
var instanceObject = {name: 'instanceObject'};
|
121
|
+
var op3 = new Op({anObject: instanceObject});
|
122
|
+
expect(op3.anObject).toBe(instanceObject);
|
123
|
+
|
124
|
+
expect(op3.toJSON).toBeDefined();
|
125
|
+
});
|
126
|
+
|
127
|
+
it("JrClass should not clone objects or arrays when used as instance values", function(){
|
128
|
+
var anObject = {};
|
129
|
+
var anArray = [];
|
130
|
+
var op = new JrClass({
|
131
|
+
anObject: anObject,
|
132
|
+
anArray: anArray,
|
133
|
+
aNumber: 5
|
134
|
+
});
|
135
|
+
expect(op.aNumber).toBe(5);
|
136
|
+
expect(op.anObject).toBe(anObject);
|
137
|
+
expect(op.anArray).toBe(anArray);
|
138
|
+
expect(op.toJSON).toBeDefined();
|
139
|
+
});
|
140
|
+
|
141
|
+
it("test if JrClass methods are bound", function() {
|
142
|
+
var TestModel3 = JrClass.extend({
|
143
|
+
count: 4,
|
144
|
+
inc: function() {
|
145
|
+
this.count += 1;
|
146
|
+
}
|
147
|
+
});
|
148
|
+
var testModel3 = new TestModel3();
|
149
|
+
expect(testModel3.count).toEqual(4);
|
150
|
+
testModel3.inc();
|
151
|
+
expect(testModel3.count).toEqual(5);
|
152
|
+
|
153
|
+
var TestModel4 = TestModel3.extend({
|
154
|
+
inc2: function() {
|
155
|
+
this.count += 1;
|
156
|
+
}
|
157
|
+
});
|
158
|
+
var testModel4 = new TestModel4();
|
159
|
+
expect(testModel4.count).toEqual(4);
|
160
|
+
testModel4.inc();
|
161
|
+
expect(testModel4.count).toEqual(5);
|
162
|
+
testModel4.inc2();
|
163
|
+
expect(testModel4.count).toEqual(6);
|
164
|
+
|
165
|
+
var testModel42 = new TestModel4();
|
166
|
+
expect(testModel42.count).toEqual(4);
|
167
|
+
|
168
|
+
});
|
169
|
+
|
170
|
+
});
|
171
|
+
|
@@ -0,0 +1,41 @@
|
|
1
|
+
describe("Kojac Operations", function() {
|
2
|
+
|
3
|
+
beforeEach(function () {
|
4
|
+
this.cache = Ember.Object.create();
|
5
|
+
var factory = new Kojac.ObjectFactory();
|
6
|
+
this.kojac = new Kojac.Core({
|
7
|
+
cache: this.cache,
|
8
|
+
remoteProvider: new Kojac.RemoteProvider({useMockFileValues: true, mockFilePath: 'mockjson/'}),
|
9
|
+
objectFactory: factory
|
10
|
+
});
|
11
|
+
});
|
12
|
+
|
13
|
+
it("try reading order_item,product,order_item__50", function() {
|
14
|
+
var op;
|
15
|
+
var req;
|
16
|
+
runs(function() {
|
17
|
+
req = this.kojac.read('order_item').read('product').read('order_item__50');
|
18
|
+
expect(req).toBeDefined('ops');
|
19
|
+
expect(req).toBeDefined('options');
|
20
|
+
expect(req.ops.length).toEqual(3);
|
21
|
+
op = req.ops[0];
|
22
|
+
expect(op.verb).toEqual('READ');
|
23
|
+
expect(op.key).toEqual('order_item');
|
24
|
+
expect(op.result_key).toEqual(op.key);
|
25
|
+
expect(op.results).toEqual({});
|
26
|
+
op = req.ops[1];
|
27
|
+
expect(op.verb).toEqual('READ');
|
28
|
+
expect(op.key).toEqual('product');
|
29
|
+
expect(op.result_key).toEqual(op.key);
|
30
|
+
expect(op.results).toEqual({});
|
31
|
+
op = req.ops[2];
|
32
|
+
expect(op.verb).toEqual('READ');
|
33
|
+
expect(op.key).toEqual('order_item__50');
|
34
|
+
expect(op.result_key).toEqual(op.key);
|
35
|
+
expect(op.results).toEqual({});
|
36
|
+
});
|
37
|
+
});
|
38
|
+
});
|
39
|
+
|
40
|
+
|
41
|
+
|
@@ -0,0 +1,37 @@
|
|
1
|
+
{
|
2
|
+
"result_key": "order_item",
|
3
|
+
"results": {
|
4
|
+
"order_item": [
|
5
|
+
49,
|
6
|
+
50,
|
7
|
+
51
|
8
|
+
],
|
9
|
+
"order_item__49": {
|
10
|
+
"id": 49,
|
11
|
+
"accountRef": "000049X",
|
12
|
+
"productId": 3,
|
13
|
+
"memberTypeId": "CA",
|
14
|
+
"adviserCommissionRate": 49.34,
|
15
|
+
"employmentStartDate": "2049-12-16 00:00:00.000",
|
16
|
+
"drawings": 1234.49
|
17
|
+
},
|
18
|
+
"order_item__50": {
|
19
|
+
"id": 50,
|
20
|
+
"accountRef": "000050X",
|
21
|
+
"productId": 4,
|
22
|
+
"memberTypeId": "CDB",
|
23
|
+
"adviserCommissionRate": 50.55,
|
24
|
+
"employmentStartDate": "2050-12-16 00:00:00.000",
|
25
|
+
"drawings": 1234.50
|
26
|
+
},
|
27
|
+
"order_item__51": {
|
28
|
+
"id": 51,
|
29
|
+
"accountRef": "000051X",
|
30
|
+
"productId": 5,
|
31
|
+
"memberTypeId": "DA",
|
32
|
+
"adviserCommissionRate": 51.89,
|
33
|
+
"employmentStartDate": "2051-12-16 00:00:00.000",
|
34
|
+
"drawings": 1234.51
|
35
|
+
}
|
36
|
+
}
|
37
|
+
}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
{
|
2
|
+
"result_key": "order_item__49",
|
3
|
+
"results": {
|
4
|
+
"order_item__49": {
|
5
|
+
"id": 49,
|
6
|
+
"accountRef": "000049X",
|
7
|
+
"productId": 3,
|
8
|
+
"memberTypeId": "CA",
|
9
|
+
"adviserCommissionRate": 49.34,
|
10
|
+
"employmentStartDate": "2049-12-16 00:00:00.000",
|
11
|
+
"drawings": 1234.49
|
12
|
+
}
|
13
|
+
}
|
14
|
+
}
|
15
|
+
|
@@ -0,0 +1,15 @@
|
|
1
|
+
{
|
2
|
+
"result_key": "order_item__50",
|
3
|
+
"results": {
|
4
|
+
"order_item__50": {
|
5
|
+
"id": 50,
|
6
|
+
"accountRef": "000050X",
|
7
|
+
"productId": 4,
|
8
|
+
"memberTypeId": "CDB",
|
9
|
+
"adviserCommissionRate": 50.55,
|
10
|
+
"employmentStartDate": "2050-12-16 00:00:00.000",
|
11
|
+
"drawings": 1234.50
|
12
|
+
}
|
13
|
+
}
|
14
|
+
}
|
15
|
+
|
@@ -0,0 +1,15 @@
|
|
1
|
+
{
|
2
|
+
"result_key": "order_item__51",
|
3
|
+
"results": {
|
4
|
+
"order_item__51": {
|
5
|
+
"id": 51,
|
6
|
+
"accountRef": "000051X",
|
7
|
+
"productId": 5,
|
8
|
+
"memberTypeId": "DA",
|
9
|
+
"adviserCommissionRate": 51.89,
|
10
|
+
"employmentStartDate": "2051-12-16 00:00:00.000",
|
11
|
+
"drawings": 1234.51
|
12
|
+
}
|
13
|
+
}
|
14
|
+
}
|
15
|
+
|