@loopback/repository-tests 0.20.1 → 0.21.1

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 (187) hide show
  1. package/LICENSE +2 -2
  2. package/dist/crud/create-retrieve.suite.js +9 -9
  3. package/dist/crud/create-retrieve.suite.js.map +1 -1
  4. package/dist/crud/freeform-properties.suite.js +8 -8
  5. package/dist/crud/freeform-properties.suite.js.map +1 -1
  6. package/dist/crud/nested-model-properties.suite.js +16 -16
  7. package/dist/crud/nested-model-properties.suite.js.map +1 -1
  8. package/dist/crud/relations/acceptance/belongs-to.inclusion-resolver.polymorphic.relation.acceptance.d.ts +2 -0
  9. package/dist/crud/relations/acceptance/belongs-to.inclusion-resolver.polymorphic.relation.acceptance.js +170 -0
  10. package/dist/crud/relations/acceptance/belongs-to.inclusion-resolver.polymorphic.relation.acceptance.js.map +1 -0
  11. package/dist/crud/relations/acceptance/belongs-to.inclusion-resolver.relation.acceptance.js +1 -1
  12. package/dist/crud/relations/acceptance/belongs-to.inclusion-resolver.relation.acceptance.js.map +1 -1
  13. package/dist/crud/relations/acceptance/belongs-to.polymorphic.relation.acceptance.d.ts +2 -0
  14. package/dist/crud/relations/acceptance/belongs-to.polymorphic.relation.acceptance.js +55 -0
  15. package/dist/crud/relations/acceptance/belongs-to.polymorphic.relation.acceptance.js.map +1 -0
  16. package/dist/crud/relations/acceptance/belongs-to.relation.acceptance.js +1 -1
  17. package/dist/crud/relations/acceptance/belongs-to.relation.acceptance.js.map +1 -1
  18. package/dist/crud/relations/acceptance/has-many-inclusion-resolver.relation.acceptance.js +1 -1
  19. package/dist/crud/relations/acceptance/has-many-inclusion-resolver.relation.acceptance.js.map +1 -1
  20. package/dist/crud/relations/acceptance/has-many-through-inclusion-resolver.acceptance.js +1 -1
  21. package/dist/crud/relations/acceptance/has-many-through-inclusion-resolver.acceptance.js.map +1 -1
  22. package/dist/crud/relations/acceptance/has-many-through-inclusion-resolver.polymorphic.acceptance.d.ts +2 -0
  23. package/dist/crud/relations/acceptance/has-many-through-inclusion-resolver.polymorphic.acceptance.js +170 -0
  24. package/dist/crud/relations/acceptance/has-many-through-inclusion-resolver.polymorphic.acceptance.js.map +1 -0
  25. package/dist/crud/relations/acceptance/has-many-through.relation.acceptance.js +1 -1
  26. package/dist/crud/relations/acceptance/has-many-through.relation.acceptance.js.map +1 -1
  27. package/dist/crud/relations/acceptance/has-many-through.relation.polymorphic.acceptance.d.ts +2 -0
  28. package/dist/crud/relations/acceptance/has-many-through.relation.polymorphic.acceptance.js +361 -0
  29. package/dist/crud/relations/acceptance/has-many-through.relation.polymorphic.acceptance.js.map +1 -0
  30. package/dist/crud/relations/acceptance/has-many.relation.acceptance.js +2 -2
  31. package/dist/crud/relations/acceptance/has-many.relation.acceptance.js.map +1 -1
  32. package/dist/crud/relations/acceptance/has-one.inclusion-resolver.acceptance.js +1 -1
  33. package/dist/crud/relations/acceptance/has-one.inclusion-resolver.acceptance.js.map +1 -1
  34. package/dist/crud/relations/acceptance/has-one.inclusion-resolver.polymorphic.acceptance.d.ts +2 -0
  35. package/dist/crud/relations/acceptance/has-one.inclusion-resolver.polymorphic.acceptance.js +161 -0
  36. package/dist/crud/relations/acceptance/has-one.inclusion-resolver.polymorphic.acceptance.js.map +1 -0
  37. package/dist/crud/relations/acceptance/has-one.relation.acceptance.js +1 -1
  38. package/dist/crud/relations/acceptance/has-one.relation.acceptance.js.map +1 -1
  39. package/dist/crud/relations/acceptance/has-one.relation.polymorphic.acceptance.d.ts +2 -0
  40. package/dist/crud/relations/acceptance/has-one.relation.polymorphic.acceptance.js +190 -0
  41. package/dist/crud/relations/acceptance/has-one.relation.polymorphic.acceptance.js.map +1 -0
  42. package/dist/crud/relations/acceptance/multi-relations-inclusion-resolver.relation.acceptance.js +1 -1
  43. package/dist/crud/relations/acceptance/multi-relations-inclusion-resolver.relation.acceptance.js.map +1 -1
  44. package/dist/crud/relations/fixtures/models/address.model.js +14 -14
  45. package/dist/crud/relations/fixtures/models/address.model.js.map +1 -1
  46. package/dist/crud/relations/fixtures/models/cart-item.model.js +8 -8
  47. package/dist/crud/relations/fixtures/models/cart-item.model.js.map +1 -1
  48. package/dist/crud/relations/fixtures/models/contact.model.d.ts +18 -0
  49. package/dist/crud/relations/fixtures/models/contact.model.js +49 -0
  50. package/dist/crud/relations/fixtures/models/contact.model.js.map +1 -0
  51. package/dist/crud/relations/fixtures/models/customer-cart-item-link.model.js +10 -10
  52. package/dist/crud/relations/fixtures/models/customer-cart-item-link.model.js.map +1 -1
  53. package/dist/crud/relations/fixtures/models/customer-promotion-link.model.d.ts +14 -0
  54. package/dist/crud/relations/fixtures/models/customer-promotion-link.model.js +46 -0
  55. package/dist/crud/relations/fixtures/models/customer-promotion-link.model.js.map +1 -0
  56. package/dist/crud/relations/fixtures/models/customer.model.d.ts +16 -3
  57. package/dist/crud/relations/fixtures/models/customer.model.js +41 -23
  58. package/dist/crud/relations/fixtures/models/customer.model.js.map +1 -1
  59. package/dist/crud/relations/fixtures/models/index.d.ts +6 -0
  60. package/dist/crud/relations/fixtures/models/index.js +15 -9
  61. package/dist/crud/relations/fixtures/models/index.js.map +1 -1
  62. package/dist/crud/relations/fixtures/models/order.model.js +12 -12
  63. package/dist/crud/relations/fixtures/models/order.model.js.map +1 -1
  64. package/dist/crud/relations/fixtures/models/payment-method.model.d.ts +47 -0
  65. package/dist/crud/relations/fixtures/models/payment-method.model.js +87 -0
  66. package/dist/crud/relations/fixtures/models/payment-method.model.js.map +1 -0
  67. package/dist/crud/relations/fixtures/models/promotion.model.d.ts +27 -0
  68. package/dist/crud/relations/fixtures/models/promotion.model.js +54 -0
  69. package/dist/crud/relations/fixtures/models/promotion.model.js.map +1 -0
  70. package/dist/crud/relations/fixtures/models/shipment.model.js +11 -11
  71. package/dist/crud/relations/fixtures/models/shipment.model.js.map +1 -1
  72. package/dist/crud/relations/fixtures/models/stakeholder.model.d.ts +7 -0
  73. package/dist/crud/relations/fixtures/models/stakeholder.model.js +38 -0
  74. package/dist/crud/relations/fixtures/models/stakeholder.model.js.map +1 -0
  75. package/dist/crud/relations/fixtures/models/supplier.model.d.ts +15 -0
  76. package/dist/crud/relations/fixtures/models/supplier.model.js +23 -0
  77. package/dist/crud/relations/fixtures/models/supplier.model.js.map +1 -0
  78. package/dist/crud/relations/fixtures/models/user-link.model.js +10 -10
  79. package/dist/crud/relations/fixtures/models/user-link.model.js.map +1 -1
  80. package/dist/crud/relations/fixtures/models/user.model.js +8 -8
  81. package/dist/crud/relations/fixtures/models/user.model.js.map +1 -1
  82. package/dist/crud/relations/fixtures/repositories/address.repository.js +1 -1
  83. package/dist/crud/relations/fixtures/repositories/address.repository.js.map +1 -1
  84. package/dist/crud/relations/fixtures/repositories/cart-item.repository.js +1 -1
  85. package/dist/crud/relations/fixtures/repositories/cart-item.repository.js.map +1 -1
  86. package/dist/crud/relations/fixtures/repositories/contact.repository.d.ts +30 -0
  87. package/dist/crud/relations/fixtures/repositories/contact.repository.js +21 -0
  88. package/dist/crud/relations/fixtures/repositories/contact.repository.js.map +1 -0
  89. package/dist/crud/relations/fixtures/repositories/customer-cart-item-link.repository.js +1 -1
  90. package/dist/crud/relations/fixtures/repositories/customer-cart-item-link.repository.js.map +1 -1
  91. package/dist/crud/relations/fixtures/repositories/customer-promotion-link.repository.d.ts +26 -0
  92. package/dist/crud/relations/fixtures/repositories/customer-promotion-link.repository.js +18 -0
  93. package/dist/crud/relations/fixtures/repositories/customer-promotion-link.repository.js.map +1 -0
  94. package/dist/crud/relations/fixtures/repositories/customer.repository.d.ts +9 -2
  95. package/dist/crud/relations/fixtures/repositories/customer.repository.js +8 -2
  96. package/dist/crud/relations/fixtures/repositories/customer.repository.js.map +1 -1
  97. package/dist/crud/relations/fixtures/repositories/index.d.ts +6 -1
  98. package/dist/crud/relations/fixtures/repositories/index.js +14 -9
  99. package/dist/crud/relations/fixtures/repositories/index.js.map +1 -1
  100. package/dist/crud/relations/fixtures/repositories/order.repository.js +1 -1
  101. package/dist/crud/relations/fixtures/repositories/order.repository.js.map +1 -1
  102. package/dist/crud/relations/fixtures/repositories/payment-method.repository.d.ts +77 -0
  103. package/dist/crud/relations/fixtures/repositories/payment-method.repository.js +45 -0
  104. package/dist/crud/relations/fixtures/repositories/payment-method.repository.js.map +1 -0
  105. package/dist/crud/relations/fixtures/repositories/promotion.repository.d.ts +49 -0
  106. package/dist/crud/relations/fixtures/repositories/promotion.repository.js +25 -0
  107. package/dist/crud/relations/fixtures/repositories/promotion.repository.js.map +1 -0
  108. package/dist/crud/relations/fixtures/repositories/shipment.repository.js +1 -1
  109. package/dist/crud/relations/fixtures/repositories/shipment.repository.js.map +1 -1
  110. package/dist/crud/relations/fixtures/repositories/supplier.repository.d.ts +28 -0
  111. package/dist/crud/relations/fixtures/repositories/supplier.repository.js +21 -0
  112. package/dist/crud/relations/fixtures/repositories/supplier.repository.js.map +1 -0
  113. package/dist/crud/relations/fixtures/repositories/user-link.repository.js +1 -1
  114. package/dist/crud/relations/fixtures/repositories/user-link.repository.js.map +1 -1
  115. package/dist/crud/relations/fixtures/repositories/user.repository.js +1 -1
  116. package/dist/crud/relations/fixtures/repositories/user.repository.js.map +1 -1
  117. package/dist/crud/relations/helpers.d.ts +9 -1
  118. package/dist/crud/relations/helpers.js +86 -11
  119. package/dist/crud/relations/helpers.js.map +1 -1
  120. package/dist/crud/replace-by-id.suite.js +11 -11
  121. package/dist/crud/replace-by-id.suite.js.map +1 -1
  122. package/dist/crud/transactions.suite.js +7 -7
  123. package/dist/crud/transactions.suite.js.map +1 -1
  124. package/dist/crud-test-suite.js +4 -4
  125. package/dist/crud-test-suite.js.map +1 -1
  126. package/dist/helpers.repository-tests.d.ts +1 -1
  127. package/dist/helpers.repository-tests.js +1 -1
  128. package/dist/helpers.repository-tests.js.map +1 -1
  129. package/dist/index.js +3 -3
  130. package/dist/index.js.map +1 -1
  131. package/dist/types.repository-tests.js +1 -1
  132. package/dist/types.repository-tests.js.map +1 -1
  133. package/package.json +15 -15
  134. package/src/crud/create-retrieve.suite.ts +1 -1
  135. package/src/crud/freeform-properties.suite.ts +10 -6
  136. package/src/crud/nested-model-properties.suite.ts +1 -1
  137. package/src/crud/relations/acceptance/belongs-to.inclusion-resolver.polymorphic.relation.acceptance.ts +221 -0
  138. package/src/crud/relations/acceptance/belongs-to.inclusion-resolver.relation.acceptance.ts +1 -1
  139. package/src/crud/relations/acceptance/belongs-to.polymorphic.relation.acceptance.ts +88 -0
  140. package/src/crud/relations/acceptance/belongs-to.relation.acceptance.ts +1 -1
  141. package/src/crud/relations/acceptance/has-many-inclusion-resolver.relation.acceptance.ts +1 -1
  142. package/src/crud/relations/acceptance/has-many-through-inclusion-resolver.acceptance.ts +1 -1
  143. package/src/crud/relations/acceptance/has-many-through-inclusion-resolver.polymorphic.acceptance.ts +255 -0
  144. package/src/crud/relations/acceptance/has-many-through.relation.acceptance.ts +2 -2
  145. package/src/crud/relations/acceptance/has-many-through.relation.polymorphic.acceptance.ts +494 -0
  146. package/src/crud/relations/acceptance/has-many.relation.acceptance.ts +1 -1
  147. package/src/crud/relations/acceptance/has-one.inclusion-resolver.acceptance.ts +1 -1
  148. package/src/crud/relations/acceptance/has-one.inclusion-resolver.polymorphic.acceptance.ts +208 -0
  149. package/src/crud/relations/acceptance/has-one.relation.acceptance.ts +1 -1
  150. package/src/crud/relations/acceptance/has-one.relation.polymorphic.acceptance.ts +328 -0
  151. package/src/crud/relations/acceptance/multi-relations-inclusion-resolver.relation.acceptance.ts +1 -1
  152. package/src/crud/relations/fixtures/models/address.model.ts +1 -1
  153. package/src/crud/relations/fixtures/models/cart-item.model.ts +1 -1
  154. package/src/crud/relations/fixtures/models/contact.model.ts +56 -0
  155. package/src/crud/relations/fixtures/models/customer-cart-item-link.model.ts +1 -1
  156. package/src/crud/relations/fixtures/models/customer-promotion-link.model.ts +52 -0
  157. package/src/crud/relations/fixtures/models/customer.model.ts +40 -10
  158. package/src/crud/relations/fixtures/models/index.ts +7 -1
  159. package/src/crud/relations/fixtures/models/order.model.ts +1 -1
  160. package/src/crud/relations/fixtures/models/payment-method.model.ts +118 -0
  161. package/src/crud/relations/fixtures/models/promotion.model.ts +67 -0
  162. package/src/crud/relations/fixtures/models/shipment.model.ts +1 -1
  163. package/src/crud/relations/fixtures/models/stakeholder.model.ts +33 -0
  164. package/src/crud/relations/fixtures/models/supplier.model.ts +35 -0
  165. package/src/crud/relations/fixtures/models/user-link.model.ts +1 -1
  166. package/src/crud/relations/fixtures/models/user.model.ts +1 -1
  167. package/src/crud/relations/fixtures/repositories/address.repository.ts +1 -1
  168. package/src/crud/relations/fixtures/repositories/cart-item.repository.ts +1 -1
  169. package/src/crud/relations/fixtures/repositories/contact.repository.ts +44 -0
  170. package/src/crud/relations/fixtures/repositories/customer-cart-item-link.repository.ts +1 -1
  171. package/src/crud/relations/fixtures/repositories/customer-promotion-link.repository.ts +20 -0
  172. package/src/crud/relations/fixtures/repositories/customer.repository.ts +48 -1
  173. package/src/crud/relations/fixtures/repositories/index.ts +7 -2
  174. package/src/crud/relations/fixtures/repositories/order.repository.ts +1 -1
  175. package/src/crud/relations/fixtures/repositories/payment-method.repository.ts +118 -0
  176. package/src/crud/relations/fixtures/repositories/promotion.repository.ts +37 -0
  177. package/src/crud/relations/fixtures/repositories/shipment.repository.ts +1 -1
  178. package/src/crud/relations/fixtures/repositories/supplier.repository.ts +40 -0
  179. package/src/crud/relations/fixtures/repositories/user-link.repository.ts +1 -1
  180. package/src/crud/relations/fixtures/repositories/user.repository.ts +1 -1
  181. package/src/crud/relations/helpers.ts +201 -31
  182. package/src/crud/replace-by-id.suite.ts +1 -1
  183. package/src/crud/transactions.suite.ts +1 -1
  184. package/src/crud-test-suite.ts +1 -1
  185. package/src/helpers.repository-tests.ts +2 -2
  186. package/src/index.ts +1 -1
  187. package/src/types.repository-tests.ts +1 -1
@@ -0,0 +1,255 @@
1
+ // Copyright IBM Corp. and LoopBack contributors 2020. All Rights Reserved.
2
+ // Node module: @loopback/repository-tests
3
+ // This file is licensed under the MIT License.
4
+ // License text available at https://opensource.org/licenses/MIT
5
+
6
+ import {expect, skipIf, toJSON} from '@loopback/testlab';
7
+ import {Suite} from 'mocha';
8
+ import {
9
+ CrudFeatures,
10
+ CrudRepositoryCtor,
11
+ CrudTestContext,
12
+ DataSourceOptions,
13
+ } from '../../..';
14
+ import {
15
+ deleteAllModelsInDefaultDataSource,
16
+ withCrudCtx,
17
+ } from '../../../helpers.repository-tests';
18
+ import {
19
+ Customer,
20
+ CustomerPromotionLink,
21
+ CustomerPromotionLinkRepository,
22
+ CustomerRepository,
23
+ FreeDelivery,
24
+ FreeDeliveryRepository,
25
+ HalfPrice,
26
+ HalfPriceRepository,
27
+ } from '../fixtures/models';
28
+ import {givenBoundCrudRepositories} from '../helpers';
29
+
30
+ export function hasManyThroughInclusionResolverPolymorphicAcceptance(
31
+ dataSourceOptions: DataSourceOptions,
32
+ repositoryClass: CrudRepositoryCtor,
33
+ features: CrudFeatures,
34
+ ) {
35
+ skipIf<[(this: Suite) => void], void>(
36
+ !features.supportsInclusionResolvers,
37
+ describe,
38
+ 'HasManyThrough inclusion resolvers - polymorphic - acceptance',
39
+ suite,
40
+ );
41
+ function suite() {
42
+ describe('HasManyThrough inclusion resolver', () => {
43
+ before(deleteAllModelsInDefaultDataSource);
44
+ let customerRepo: CustomerRepository;
45
+ let freeDeliveryRepo: FreeDeliveryRepository;
46
+ let halfPriceRepo: HalfPriceRepository;
47
+ let customerPromotionLinkRepo: CustomerPromotionLinkRepository;
48
+
49
+ before(
50
+ withCrudCtx(async function setupRepository(ctx: CrudTestContext) {
51
+ // this helper should create the inclusion resolvers and also
52
+ // register inclusion resolvers for us
53
+ ({
54
+ customerRepo,
55
+ freeDeliveryRepo,
56
+ halfPriceRepo,
57
+ customerPromotionLinkRepo,
58
+ } = givenBoundCrudRepositories(
59
+ ctx.dataSource,
60
+ repositoryClass,
61
+ features,
62
+ ));
63
+ expect(customerRepo.promotions.inclusionResolver).to.be.Function();
64
+
65
+ await ctx.dataSource.automigrate([
66
+ Customer.name,
67
+ FreeDelivery.name,
68
+ HalfPrice.name,
69
+ CustomerPromotionLink.name,
70
+ ]);
71
+ }),
72
+ );
73
+
74
+ beforeEach(async () => {
75
+ await customerRepo.deleteAll();
76
+ await freeDeliveryRepo.deleteAll();
77
+ await halfPriceRepo.deleteAll();
78
+ await customerPromotionLinkRepo.deleteAll();
79
+ });
80
+
81
+ it('throws an error if tries to query nonexistent relation names', async () => {
82
+ const customer = await customerRepo.create({name: 'customer'});
83
+ await customerRepo
84
+ .promotions(customer.id)
85
+ .create({description: 'crown'}, {polymorphicType: 'HalfPrice'});
86
+
87
+ await expect(
88
+ customerRepo.find({include: ['crown']}),
89
+ ).to.be.rejectedWith(`Invalid "filter.include" entries: "crown"`);
90
+ });
91
+
92
+ it('returns single model instance including single related instance', async () => {
93
+ const zelda = await customerRepo.create({name: 'Zelda'});
94
+ const freeDelivery = await customerRepo.promotions(zelda.id).create(
95
+ {description: 'crown'},
96
+ {
97
+ throughData: {promotiontype: 'FreeDelivery'},
98
+ polymorphicType: 'FreeDelivery',
99
+ },
100
+ );
101
+
102
+ const result = await customerRepo.find({
103
+ include: ['promotions'],
104
+ });
105
+
106
+ expect(toJSON(result)).to.deepEqual([
107
+ toJSON({
108
+ ...zelda,
109
+ parentId: features.emptyValue,
110
+ promotions: [freeDelivery],
111
+ }),
112
+ ]);
113
+ });
114
+
115
+ it('returns multiple model instances including related instances', async () => {
116
+ const link = await customerRepo.create({name: 'Link'});
117
+ const halfPrice = await customerRepo.promotions(link.id).create(
118
+ {description: 'halfPrice'},
119
+ {
120
+ throughData: {promotiontype: 'HalfPrice'},
121
+ polymorphicType: 'HalfPrice',
122
+ },
123
+ );
124
+ const freeDelivery = await customerRepo.promotions(link.id).create(
125
+ {description: 'freeDelivery'},
126
+ {
127
+ throughData: {promotiontype: 'FreeDelivery'},
128
+ polymorphicType: 'FreeDelivery',
129
+ },
130
+ );
131
+ const freeDelivery2 = await customerRepo.promotions(link.id).create(
132
+ {description: 'freeDelivery 2'},
133
+ {
134
+ throughData: {promotiontype: 'FreeDelivery'},
135
+ polymorphicType: 'FreeDelivery',
136
+ },
137
+ );
138
+
139
+ const result = await customerRepo.find({
140
+ include: ['promotions'],
141
+ });
142
+
143
+ const expected = [
144
+ {
145
+ ...link,
146
+ parentId: features.emptyValue,
147
+ promotions: [halfPrice, freeDelivery, freeDelivery2],
148
+ },
149
+ ];
150
+
151
+ expect(toJSON(result)).to.deepEqual(toJSON(expected));
152
+ });
153
+
154
+ it('returns a specified instance including its related model instances', async () => {
155
+ const link = await customerRepo.create({name: 'Link'});
156
+ const zelda = await customerRepo.create({name: 'Zelda'});
157
+
158
+ await customerRepo.promotions(link.id).create(
159
+ {description: 'crown'},
160
+ {
161
+ throughData: {promotiontype: 'HalfPrice'},
162
+ polymorphicType: 'HalfPrice',
163
+ },
164
+ );
165
+ const zeldaPromotion1 = await customerRepo.promotions(zelda.id).create(
166
+ {description: 'shield'},
167
+ {
168
+ throughData: {promotiontype: 'FreeDelivery'},
169
+ polymorphicType: 'FreeDelivery',
170
+ },
171
+ );
172
+ const zeldaPromotion2 = await customerRepo.promotions(zelda.id).create(
173
+ {description: 'green hat'},
174
+ {
175
+ throughData: {promotiontype: 'FreeDelivery'},
176
+ polymorphicType: 'FreeDelivery',
177
+ },
178
+ );
179
+
180
+ const result = await customerRepo.findById(zelda.id, {
181
+ include: ['promotions'],
182
+ });
183
+ const expected = {
184
+ ...zelda,
185
+ parentId: features.emptyValue,
186
+ promotions: [zeldaPromotion1, zeldaPromotion2],
187
+ };
188
+ expect(toJSON(result)).to.deepEqual(toJSON(expected));
189
+ });
190
+
191
+ it('honours field scope when returning a model', async () => {
192
+ const link = await customerRepo.create({name: 'Link'});
193
+ const zelda = await customerRepo.create({name: 'Zelda'});
194
+ const sword = await customerRepo.promotions(link.id).create(
195
+ {description: 'master sword'},
196
+ {
197
+ throughData: {promotiontype: 'HalfPrice'},
198
+ polymorphicType: 'HalfPrice',
199
+ },
200
+ );
201
+ const shield = await customerRepo.promotions(zelda.id).create(
202
+ {description: 'shield'},
203
+ {
204
+ throughData: {promotiontype: 'FreeDelivery'},
205
+ polymorphicType: 'FreeDelivery',
206
+ },
207
+ );
208
+ const hat = await customerRepo.promotions(zelda.id).create(
209
+ {description: 'hat'},
210
+ {
211
+ throughData: {promotiontype: 'HalfPrice'},
212
+ polymorphicType: 'HalfPrice',
213
+ },
214
+ );
215
+
216
+ const result = await customerRepo.find({
217
+ include: [{relation: 'promotions', scope: {fields: {id: false}}}],
218
+ });
219
+
220
+ const expected = [
221
+ {
222
+ ...link,
223
+ parentId: features.emptyValue,
224
+ promotions: [{description: sword.description}],
225
+ },
226
+ {
227
+ ...zelda,
228
+ parentId: features.emptyValue,
229
+ promotions: [
230
+ {description: shield.description},
231
+ {description: hat.description},
232
+ ],
233
+ },
234
+ ];
235
+
236
+ expect(toJSON(result)).to.deepEqual(toJSON(expected));
237
+ });
238
+
239
+ it('honours limit scope when returning a model', async () => {
240
+ const link = await customerRepo.create({name: 'Link'});
241
+ await customerRepo
242
+ .cartItems(link.id)
243
+ .create({description: 'master sword'});
244
+ await customerRepo.cartItems(link.id).create({description: 'shield'});
245
+
246
+ const result = await customerRepo.find({
247
+ include: [{relation: 'cartItems', scope: {limit: 1}}],
248
+ });
249
+
250
+ expect(result.length).to.eql(1);
251
+ expect(result[0].cartItems.length).to.eql(1);
252
+ });
253
+ });
254
+ }
255
+ }
@@ -1,4 +1,4 @@
1
- // Copyright IBM Corp. 2020. All Rights Reserved.
1
+ // Copyright IBM Corp. and LoopBack contributors 2020. All Rights Reserved.
2
2
  // Node module: @loopback/repository-tests
3
3
  // This file is licensed under the MIT License.
4
4
  // License text available at https://opensource.org/licenses/MIT
@@ -23,9 +23,9 @@ import {
23
23
  CustomerCartItemLinkRepository,
24
24
  CustomerRepository,
25
25
  User,
26
- UserRepository,
27
26
  UserLink,
28
27
  UserLinkRepository,
28
+ UserRepository,
29
29
  } from '../fixtures/models';
30
30
  import {givenBoundCrudRepositories} from '../helpers';
31
31