vsn 0.1.26 → 0.1.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (191) hide show
  1. package/dist/AST.js +2197 -0
  2. package/dist/AST.js.map +1 -0
  3. package/dist/Attribute.d.ts +1 -1
  4. package/dist/Attribute.js +187 -0
  5. package/dist/Attribute.js.map +1 -0
  6. package/dist/Bencmark.js +179 -0
  7. package/dist/Bencmark.js.map +1 -0
  8. package/dist/Configuration.d.ts +1 -1
  9. package/dist/Configuration.js +64 -0
  10. package/dist/Configuration.js.map +1 -0
  11. package/dist/Controller.d.ts +1 -1
  12. package/dist/Controller.js +54 -0
  13. package/dist/Controller.js.map +1 -0
  14. package/dist/DOM/DOMObject.d.ts +1 -1
  15. package/dist/DOM/DOMObject.js +47 -0
  16. package/dist/DOM/DOMObject.js.map +1 -0
  17. package/dist/DOM/WrappedDocument.js +34 -0
  18. package/dist/DOM/WrappedDocument.js.map +1 -0
  19. package/dist/DOM/WrappedWindow.js +45 -0
  20. package/dist/DOM/WrappedWindow.js.map +1 -0
  21. package/dist/DOM.d.ts +1 -1
  22. package/dist/DOM.js +547 -0
  23. package/dist/DOM.js.map +1 -0
  24. package/dist/EventDispatcher.d.ts +26 -0
  25. package/dist/EventDispatcher.js +117 -0
  26. package/dist/EventDispatcher.js.map +1 -0
  27. package/dist/Formats.js +44 -0
  28. package/dist/Formats.js.map +1 -0
  29. package/dist/MessageList.d.ts +14 -0
  30. package/dist/MessageList.js +88 -0
  31. package/dist/MessageList.js.map +1 -0
  32. package/dist/Model/Collection.d.ts +5 -0
  33. package/dist/Model/Collection.js +37 -0
  34. package/dist/Model/Collection.js.map +1 -0
  35. package/dist/Model/DataModel.d.ts +6 -0
  36. package/dist/Model/DataModel.js +54 -0
  37. package/dist/Model/DataModel.js.map +1 -0
  38. package/dist/Model/ModelAbstract.d.ts +20 -0
  39. package/dist/Model/ModelAbstract.js +122 -0
  40. package/dist/Model/ModelAbstract.js.map +1 -0
  41. package/dist/Model/fields/BooleanField.d.ts +5 -0
  42. package/dist/Model/fields/BooleanField.js +43 -0
  43. package/dist/Model/fields/BooleanField.js.map +1 -0
  44. package/dist/Model/fields/EmailField.d.ts +5 -0
  45. package/dist/Model/fields/EmailField.js +36 -0
  46. package/dist/Model/fields/EmailField.js.map +1 -0
  47. package/dist/Model/fields/Field.d.ts +13 -0
  48. package/dist/Model/fields/Field.js +79 -0
  49. package/dist/Model/fields/Field.js.map +1 -0
  50. package/dist/Model/fields/FloatField.d.ts +5 -0
  51. package/dist/Model/fields/FloatField.js +47 -0
  52. package/dist/Model/fields/FloatField.js.map +1 -0
  53. package/dist/Model/fields/PositiveNumberField.d.ts +5 -0
  54. package/dist/Model/fields/PositiveNumberField.js +51 -0
  55. package/dist/Model/fields/PositiveNumberField.js.map +1 -0
  56. package/dist/Model/fields/StringField.d.ts +5 -0
  57. package/dist/Model/fields/StringField.js +43 -0
  58. package/dist/Model/fields/StringField.js.map +1 -0
  59. package/dist/Model.d.ts +11 -0
  60. package/dist/Model.js +72 -0
  61. package/dist/Model.js.map +1 -0
  62. package/dist/Query.js +66 -0
  63. package/dist/Query.js.map +1 -0
  64. package/dist/Registry.d.ts +2 -2
  65. package/dist/Registry.js +128 -0
  66. package/dist/Registry.js.map +1 -0
  67. package/dist/Scope.d.ts +7 -10
  68. package/dist/Scope.js +462 -0
  69. package/dist/Scope.js.map +1 -0
  70. package/dist/SimplePromise.d.ts +42 -0
  71. package/dist/SimplePromise.js +217 -0
  72. package/dist/SimplePromise.js.map +1 -0
  73. package/dist/Tag/List.js +85 -0
  74. package/dist/Tag/List.js.map +1 -0
  75. package/dist/Tag.js +770 -0
  76. package/dist/Tag.js.map +1 -0
  77. package/dist/Types.js +48 -0
  78. package/dist/Types.js.map +1 -0
  79. package/dist/attributes/AddClassIf.js +93 -0
  80. package/dist/attributes/AddClassIf.js.map +1 -0
  81. package/dist/attributes/Bind.js +272 -0
  82. package/dist/attributes/Bind.js.map +1 -0
  83. package/dist/attributes/ClassConstructor.js +104 -0
  84. package/dist/attributes/ClassConstructor.js.map +1 -0
  85. package/dist/attributes/ClickRemoveClass.js +114 -0
  86. package/dist/attributes/ClickRemoveClass.js.map +1 -0
  87. package/dist/attributes/ClickToggleClass.js +114 -0
  88. package/dist/attributes/ClickToggleClass.js.map +1 -0
  89. package/dist/attributes/ControllerAttribute.js +28 -0
  90. package/dist/attributes/ControllerAttribute.js.map +1 -0
  91. package/dist/attributes/DisableIf.js +94 -0
  92. package/dist/attributes/DisableIf.js.map +1 -0
  93. package/dist/attributes/Exec.js +108 -0
  94. package/dist/attributes/Exec.js.map +1 -0
  95. package/dist/attributes/Format.js +99 -0
  96. package/dist/attributes/Format.js.map +1 -0
  97. package/dist/attributes/If.js +159 -0
  98. package/dist/attributes/If.js.map +1 -0
  99. package/dist/attributes/JSONAttribute.js +118 -0
  100. package/dist/attributes/JSONAttribute.js.map +1 -0
  101. package/dist/attributes/KeyAbstract.js +117 -0
  102. package/dist/attributes/KeyAbstract.js.map +1 -0
  103. package/dist/attributes/KeyDown.js +88 -0
  104. package/dist/attributes/KeyDown.js.map +1 -0
  105. package/dist/attributes/KeyUp.js +88 -0
  106. package/dist/attributes/KeyUp.js.map +1 -0
  107. package/dist/attributes/List.js +282 -0
  108. package/dist/attributes/List.js.map +1 -0
  109. package/dist/attributes/ListItem.js +138 -0
  110. package/dist/attributes/ListItem.js.map +1 -0
  111. package/dist/attributes/ListItemModel.js +39 -0
  112. package/dist/attributes/ListItemModel.js.map +1 -0
  113. package/dist/attributes/ModelAttribute.js +29 -0
  114. package/dist/attributes/ModelAttribute.js.map +1 -0
  115. package/dist/attributes/Name.js +88 -0
  116. package/dist/attributes/Name.js.map +1 -0
  117. package/dist/attributes/On.js +135 -0
  118. package/dist/attributes/On.js.map +1 -0
  119. package/dist/attributes/Radio.js +174 -0
  120. package/dist/attributes/Radio.js.map +1 -0
  121. package/dist/attributes/Referenced.js +38 -0
  122. package/dist/attributes/Referenced.js.map +1 -0
  123. package/dist/attributes/RootAttribute.js +91 -0
  124. package/dist/attributes/RootAttribute.js.map +1 -0
  125. package/dist/attributes/ScopeAttribute.js +40 -0
  126. package/dist/attributes/ScopeAttribute.js.map +1 -0
  127. package/dist/attributes/ScopeChange.js +130 -0
  128. package/dist/attributes/ScopeChange.js.map +1 -0
  129. package/dist/attributes/SetAttribute.js +133 -0
  130. package/dist/attributes/SetAttribute.js.map +1 -0
  131. package/dist/attributes/StandardAttribute.js +186 -0
  132. package/dist/attributes/StandardAttribute.js.map +1 -0
  133. package/dist/attributes/StyleAttribute.js +183 -0
  134. package/dist/attributes/StyleAttribute.js.map +1 -0
  135. package/dist/attributes/Template.js +39 -0
  136. package/dist/attributes/Template.js.map +1 -0
  137. package/dist/attributes/TypeAttribute.js +104 -0
  138. package/dist/attributes/TypeAttribute.js.map +1 -0
  139. package/dist/attributes/_imports.js +60 -0
  140. package/dist/attributes/_imports.js.map +1 -0
  141. package/dist/helpers/DOMHelper.js +81 -0
  142. package/dist/helpers/DOMHelper.js.map +1 -0
  143. package/dist/helpers/ElementHelper.js +25 -0
  144. package/dist/helpers/ElementHelper.js.map +1 -0
  145. package/dist/helpers/VisionHelper.js +71 -0
  146. package/dist/helpers/VisionHelper.js.map +1 -0
  147. package/dist/helpers/decorators.js +38 -0
  148. package/dist/helpers/decorators.js.map +1 -0
  149. package/dist/vsn.d.ts +2 -1
  150. package/dist/vsn.js +166 -0
  151. package/dist/vsn.js.map +1 -0
  152. package/package.json +2 -6
  153. package/src/AST.ts +2 -2
  154. package/src/Attribute.ts +2 -2
  155. package/src/Configuration.ts +3 -3
  156. package/src/Controller.ts +1 -1
  157. package/src/DOM/DOMObject.ts +1 -1
  158. package/src/DOM.ts +3 -3
  159. package/src/EventDispatcher.ts +117 -0
  160. package/src/Formats.ts +2 -2
  161. package/src/MessageList.ts +81 -0
  162. package/src/Model/Collection.ts +13 -0
  163. package/src/Model/DataModel.ts +29 -0
  164. package/src/Model/ModelAbstract.ts +114 -0
  165. package/src/Model/fields/BooleanField.ts +16 -0
  166. package/src/Model/fields/EmailField.ts +12 -0
  167. package/src/Model/fields/Field.ts +65 -0
  168. package/src/Model/fields/FloatField.ts +22 -0
  169. package/src/Model/fields/PositiveNumberField.ts +24 -0
  170. package/src/Model/fields/StringField.ts +16 -0
  171. package/src/Model.ts +57 -0
  172. package/src/Registry.ts +3 -3
  173. package/src/Scope.ts +33 -89
  174. package/src/SimplePromise.ts +219 -0
  175. package/src/Tag.ts +2 -2
  176. package/src/attributes/Bind.ts +1 -1
  177. package/src/attributes/List.ts +3 -3
  178. package/src/attributes/Radio.ts +1 -1
  179. package/src/attributes/ScopeChange.ts +1 -1
  180. package/src/attributes/StandardAttribute.ts +1 -1
  181. package/src/attributes/StyleAttribute.ts +1 -1
  182. package/src/vsn.ts +3 -2
  183. package/test/AST.spec.ts +2 -1
  184. package/test/MessageList.spec.ts +101 -0
  185. package/test/Model/DataModel.spec.ts +141 -0
  186. package/test/Model.spec.ts +306 -0
  187. package/test/Scope.spec.ts +2 -2
  188. package/test/SimplePromise.spec.ts +271 -0
  189. package/test/attributes/Bind.spec.ts +5 -5
  190. package/test/attributes/ListItem.spec.ts +1 -1
  191. package/dist/vsn.min.js +0 -1
@@ -0,0 +1,141 @@
1
+ import {DataModel} from "../../src/Model/DataModel";
2
+
3
+
4
+ describe('Model', () => {
5
+ it("Should trigger a change event when any field is changed", () => {
6
+ const m = new DataModel(['foo']);
7
+ let value = null,
8
+ field = null;
9
+
10
+ m.on('change', (_field, values) => {
11
+ field = _field;
12
+ value = values.value;
13
+ });
14
+
15
+ m.foo = 'testing';
16
+
17
+ expect<string | null>(field).toBe('foo');
18
+ expect(value).toBe(m.foo);
19
+ });
20
+
21
+ it("Should create the given fields from an object", () => {
22
+ const m = new DataModel({
23
+ field_1: 1,
24
+ field_2: 'yes',
25
+ field_3: true
26
+ });
27
+ expect(m.getFields().length).toBe(3);
28
+
29
+ m.setData({field_4: 4, field_5: 5});
30
+ expect(m.getFields().length).toBe(5);
31
+ const data = m.getData();
32
+ expect(data['field_1']).toBe(1);
33
+ expect(data['field_2']).toBe('yes');
34
+ expect(data['field_3']).toBe(true);
35
+ expect(data['field_4']).toBe(4);
36
+ expect(data['field_5']).toBe(5);
37
+ });
38
+
39
+ it("Should create the given fields from an array", () => {
40
+ const m = new DataModel([
41
+ 'field_1',
42
+ 'field_2',
43
+ 'field_3'
44
+ ]);
45
+ expect(m.getFields().length).toBe(3);
46
+ });
47
+
48
+ it("Should trigger a change event when a field is changed", () => {
49
+ const m = new DataModel({
50
+ field_1: 1,
51
+ field_2: 'yes',
52
+ field_3: true
53
+ });
54
+
55
+ let oldValue = null,
56
+ oldValueCheck = null,
57
+ value = null;
58
+
59
+ m.bindToFields('change', [
60
+ 'field_2',
61
+ 'field_1'
62
+ ], (values) => {
63
+ oldValue = values.oldValue;
64
+ value = values.value;
65
+ });
66
+
67
+ // Test to make sure field_1 change event is being called
68
+ oldValueCheck = m.field_1;
69
+ m.field_1 = 2;
70
+ expect(value).toBe(m.field_1);
71
+ expect(oldValue).toBe(oldValueCheck);
72
+
73
+ // Test to make sure field_2 change event is being called
74
+ oldValueCheck = m.field_2;
75
+ m.field_2 = 'no';
76
+ expect(value).toBe(m.field_2);
77
+ expect(oldValue).toBe(oldValueCheck);
78
+
79
+ // Test to make sure fields that aren't being listened to aren't
80
+ // triggering the event
81
+ oldValueCheck = m.foo;
82
+ m.foo = false;
83
+ expect(value).not.toBe(m.foo);
84
+ expect(oldValue).not.toBe(oldValueCheck);
85
+ });
86
+
87
+ it("Should trigger a change:field event when any field is changed", () => {
88
+ const m = new DataModel(['field_1']);
89
+ let value = null;
90
+
91
+ m.on('change:field_1', (values) => {
92
+ value = values.value;
93
+ });
94
+
95
+ m.field_1 = 'testing';
96
+
97
+ expect(value).toBe(m.field_1);
98
+ });
99
+
100
+ it("should save last data and return true with is modfied if something is modified", () => {
101
+ const m = new DataModel({
102
+ field_1: 1,
103
+ field_2: 'foo'
104
+ });
105
+ m.setLastData();
106
+ expect(m.isModified()).toBe(false);
107
+ m.field_1 = 2;
108
+ m.field_2 = null;
109
+ expect(m.isModified()).toBe(true);
110
+ m.setLastData();
111
+ expect(m.isModified()).toBe(false);
112
+ m.field_2 = 'bar';
113
+ expect(m.isModified()).toBe(true);
114
+ });
115
+
116
+ it("should revert to last data correctly", () => {
117
+ const m = new DataModel({
118
+ field_1: 1,
119
+ field_2: 'bar'
120
+ });
121
+ m.setLastData();
122
+ expect(m.isModified()).toBe(false);
123
+ m.field_1 = 2;
124
+ m.field_2 = null;
125
+ expect(m.isModified()).toBe(true);
126
+ m.revert();
127
+ expect(m.isModified()).toBe(false);
128
+ expect(m.field_1).toBe(1);
129
+ expect(m.field_2).toBe('bar');
130
+ });
131
+
132
+ it("should return the field object", () => {
133
+ const m = new DataModel({
134
+ field_1: 1,
135
+ field_2: 'string field!'
136
+ }),
137
+ field = m.getField('field_2');
138
+ expect(field.value).toBe('string field!');
139
+
140
+ });
141
+ });
@@ -0,0 +1,306 @@
1
+ import {field, Field} from "../src/Model/fields/Field";
2
+ import {Model} from "../src/Model";
3
+ import {Collection} from "../src/Model/Collection";
4
+ import {EmailField} from "../src/Model/fields/EmailField";
5
+ import {FloatField} from "../src/Model/fields/FloatField";
6
+ import {PositiveIntegerField} from "../src/Model/fields/PositiveNumberField";
7
+ import {StringField} from "../src/Model/fields/StringField";
8
+ import {BooleanField} from "../src/Model/fields/BooleanField";
9
+
10
+ class TestCollection extends Collection<TestModel> {
11
+ getDefault: () => any = (): any => {
12
+ for(const i of this) {
13
+ if(i.is_default)
14
+ return i;
15
+ }
16
+ };
17
+ }
18
+
19
+ class AbstractTestModel extends Model {
20
+ @field()
21
+ id!: number;
22
+
23
+ @field(Field, {
24
+ required:true
25
+ })
26
+ required_field!: string | null;
27
+ }
28
+
29
+ class TestModel extends AbstractTestModel {
30
+ static collectionClass = TestCollection;
31
+
32
+ @field()
33
+ foo!: boolean;
34
+
35
+ @field()
36
+ name!: string;
37
+
38
+ @field()
39
+ is_default!: boolean;
40
+
41
+ @field(Field, null)
42
+ invalid_field!: string;
43
+
44
+ @field(EmailField)
45
+ email!: string;
46
+
47
+ @field(FloatField, {
48
+ toFixed: 3
49
+ })
50
+ float_field!: number;
51
+
52
+ @field(PositiveIntegerField)
53
+ positive_integer_field!: number;
54
+
55
+ @field(StringField)
56
+ string_field!: string;
57
+
58
+ @field(BooleanField)
59
+ boolean_field!: boolean;
60
+ }
61
+
62
+ class TestModel2 extends AbstractTestModel {
63
+ @field()
64
+ shouldnt_exist!: boolean;
65
+ }
66
+
67
+
68
+ describe('Model', () => {
69
+ it("should throw an error when a field is required and the value is null", function() {
70
+ const m = new TestModel();
71
+ expect(m.validate()['required_field'].length).toBe(1);
72
+ });
73
+
74
+ it("should be invalid when a field validation fails", function() {
75
+ const m = new TestModel({
76
+ required_field: true,
77
+ email: 'testing'
78
+ });
79
+ expect(m.validate()['email'].length).toBe(1);
80
+ });
81
+
82
+ it("should not throw an error when a field that is required value is not null", function() {
83
+ const m = new TestModel();
84
+ m.required_field = 'yes';
85
+ expect(m.validate()['required_field']).toBe(undefined);
86
+ expect(m.hasErrors()).toBe(false);
87
+ expect(m.errors.length).toBe(0);
88
+ m.required_field = null;
89
+ m.validate();
90
+ expect(m.hasErrors()).toBe(true);
91
+ expect(m.errors.length).toBe(1);
92
+ });
93
+
94
+ it("Should trigger a change event when any field is changed", () => {
95
+ const m = new TestModel();
96
+ let value: string | null = null,
97
+ field: string | null = null;
98
+
99
+ m.on('change', (_field, values) => {
100
+ field = _field;
101
+ value = values.value;
102
+ });
103
+
104
+ m.required_field = 'testing';
105
+
106
+ expect<string | null>(field).toBe('required_field');
107
+ expect<string | null>(value).toBe(m.required_field);
108
+ });
109
+
110
+ it("Should trigger a change event when a field is changed", () => {
111
+ const m = new TestModel({
112
+ id: 1,
113
+ required_field: 'yes',
114
+ foo: true,
115
+ positive_integer_field: 1
116
+ });
117
+
118
+ let oldValue = null,
119
+ oldValueCheck: number | null = null,
120
+ value: number | null = null;
121
+
122
+ m.bindToFields('change', [
123
+ 'required_field',
124
+ 'id',
125
+ 'shouldnt_exist',
126
+ 'positive_integer_field'
127
+ ], (values) => {
128
+ oldValue = values.oldValue;
129
+ value = values.value;
130
+ });
131
+
132
+ // Test to make sure id change event is being called
133
+ oldValueCheck = m.id;
134
+ m.id = 2;
135
+ expect(value).toBe(m.id);
136
+ expect(oldValue).toBe(oldValueCheck);
137
+
138
+ // Test to make sure required_field change event is being called
139
+ const stringValueCheck: string | null = m.required_field;
140
+ m.required_field = 'no';
141
+ expect(value).toBe(m.required_field as any);
142
+ expect(oldValue).toBe(stringValueCheck);
143
+
144
+ // Test to make sure positive_integer_field change event is being called
145
+ oldValueCheck = m.positive_integer_field;
146
+ m.positive_integer_field = 15;
147
+ expect(value).toBe(m.positive_integer_field);
148
+ expect(oldValue).toBe(oldValueCheck);
149
+
150
+ // Test to make sure fields that aren't being listened to aren't
151
+ // triggering the event
152
+ const boolValueCheck: boolean = m.foo;
153
+ m.foo = false;
154
+ expect(value).not.toBe(m.foo as any);
155
+ expect(oldValue).not.toBe(boolValueCheck);
156
+
157
+ // Test to make sure fields that aren't being listened to aren't
158
+ // triggering the event
159
+ oldValueCheck = m.shouldnt_exist;
160
+ m.foo = true;
161
+ expect(value).not.toBe(m.foo as any);
162
+ expect(oldValue).not.toBe(oldValueCheck);
163
+ });
164
+
165
+ it("Should trigger a change:field event when any field is changed", () => {
166
+ const m = new TestModel();
167
+ let value: string | null = null;
168
+
169
+ m.on('change:required_field', (values) => {
170
+ value = values.value;
171
+ });
172
+
173
+ m.required_field = 'testing';
174
+
175
+ expect<string | null>(value).toBe(m.required_field);
176
+ });
177
+
178
+ it("should save last data and return true with is modfied if something is modified", () => {
179
+ const m = new TestModel({
180
+ id: 1,
181
+ required_field: 'required!'
182
+ });
183
+ m.setLastData();
184
+ expect(m.isModified()).toBe(false);
185
+ m.id = 2;
186
+ expect(m.isModified()).toBe(true);
187
+ m.setLastData();
188
+ expect(m.isModified()).toBe(false);
189
+ m.required_field = 'still required';
190
+ expect(m.isModified()).toBe(true);
191
+ });
192
+
193
+ it("should revert to last data correctly", () => {
194
+ const m = new TestModel({
195
+ id: 1,
196
+ required_field: 'required!'
197
+ });
198
+ m.setLastData();
199
+ expect(m.isModified()).toBe(false);
200
+ m.id = 2;
201
+ m.required_field = null;
202
+ expect(m.isModified()).toBe(true);
203
+ m.revert();
204
+ expect(m.isModified()).toBe(false);
205
+ expect(m.id).toBe(1);
206
+ expect<string | null>(m.required_field).toBe('required!');
207
+ });
208
+
209
+ it("should return the field object", () => {
210
+ const m = new TestModel({
211
+ id: 1,
212
+ required_field: 'required!'
213
+ }),
214
+ field = m.getField('required_field');
215
+ expect(field.value).toBe('required!');
216
+
217
+ });
218
+
219
+ it("should ignore data that does not match a field", () => {
220
+ const m = new TestModel({
221
+ id: 1,
222
+ required_field: 'required!'
223
+ });
224
+ m.setLastData();
225
+ m.setData({
226
+ spam: 1,
227
+ bar: 'Baz!'
228
+ });
229
+ expect(m.isModified()).toBe(false);
230
+ });
231
+
232
+ it("should cast values to field types", () => {
233
+ const m = new TestModel({
234
+ float_field: '1.5111',
235
+ positive_integer_field: '-1',
236
+ string_field: 1,
237
+ boolean_field: 'true'
238
+ });
239
+ expect(m.float_field).toBe(1.511);
240
+ expect(m.positive_integer_field).toBe(0);
241
+ expect(m.string_field).toBe('1');
242
+ expect(m.boolean_field).toBe(true);
243
+ });
244
+ });
245
+
246
+ describe('Collection', () => {
247
+ it("should be able to use methods defined in TestCollection", function() {
248
+ const collection = new TestCollection();
249
+
250
+ collection.push(new TestModel({
251
+ name: 'Model 1',
252
+ is_default: false
253
+ }));
254
+
255
+ collection.push(new TestModel({
256
+ name: 'Model 2',
257
+ is_default: true
258
+ }));
259
+
260
+ collection.push(new TestModel({
261
+ name: 'Model 3',
262
+ is_default: false
263
+ }));
264
+
265
+ collection.push(new TestModel({
266
+ name: 'Model 4',
267
+ is_default: false
268
+ }));
269
+
270
+ expect(collection.getDefault().name).toBe('Model 2');
271
+ });
272
+
273
+ it("should return data from all models in the collection", function() {
274
+ const collection = new TestCollection();
275
+
276
+ collection.push(new TestModel({
277
+ name: 'Model 1',
278
+ is_default: false
279
+ }));
280
+
281
+ collection.push(new TestModel({
282
+ name: 'Model 2',
283
+ is_default: true
284
+ }));
285
+
286
+ collection.push(new TestModel({
287
+ name: 'Model 3',
288
+ is_default: false
289
+ }));
290
+
291
+ collection.push(new TestModel({
292
+ name: 'Model 4',
293
+ is_default: false
294
+ }));
295
+ const collectionData = collection.getData();
296
+
297
+ expect(collectionData[0].name).toBe('Model 1');
298
+ expect(collectionData[0].is_default).toBe(false);
299
+ expect(collectionData[1].name).toBe('Model 2');
300
+ expect(collectionData[1].is_default).toBe(true);
301
+ expect(collectionData[2].name).toBe('Model 3');
302
+ expect(collectionData[2].is_default).toBe(false);
303
+ expect(collectionData[3].name).toBe('Model 4');
304
+ expect(collectionData[3].is_default).toBe(false);
305
+ });
306
+ });
@@ -30,7 +30,7 @@ describe('WrappedArray', () => {
30
30
  it("should behave like an array", async () => {
31
31
  const a = new WrappedArray();
32
32
  let removes: number = 0;
33
- a.bind('remove', (e) => {
33
+ a.on('remove', (e) => {
34
34
  removes += 1;
35
35
  });
36
36
  a.push(1);
@@ -44,7 +44,7 @@ describe('WrappedArray', () => {
44
44
  it("should trigger change events", async () => {
45
45
  const a = new WrappedArray();
46
46
  let changes: number = 0;
47
- a.bind('change', (e) => {
47
+ a.on('change', (e) => {
48
48
  changes += 1;
49
49
  });
50
50
  a.push(1);