@goatlab/fluent 0.7.31 → 0.7.32

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 (262) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +0 -0
  3. package/package.json +34 -34
  4. package/dist/BaseConnector.d.ts +0 -43
  5. package/dist/BaseConnector.js +0 -257
  6. package/dist/Fluent.d.ts +0 -7
  7. package/dist/Fluent.js +0 -22
  8. package/dist/FluentConnectorInterface.d.ts +0 -17
  9. package/dist/FluentConnectorInterface.js +0 -2
  10. package/dist/FluentEntity.d.ts +0 -7
  11. package/dist/FluentEntity.js +0 -28
  12. package/dist/TypeOrmConnector/TypeOrmConnector.d.ts +0 -39
  13. package/dist/TypeOrmConnector/TypeOrmConnector.js +0 -392
  14. package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoBaseAggregations.d.ts +0 -7
  15. package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoBaseAggregations.js +0 -149
  16. package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoFindAggregatedQuery.d.ts +0 -6
  17. package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoFindAggregatedQuery.js +0 -46
  18. package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoOrderBy.d.ts +0 -4
  19. package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoOrderBy.js +0 -19
  20. package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoSelect.d.ts +0 -4
  21. package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoSelect.js +0 -12
  22. package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoWhere.d.ts +0 -6
  23. package/dist/TypeOrmConnector/queryBuilder/mongodb/getMongoWhere.js +0 -166
  24. package/dist/TypeOrmConnector/queryBuilder/sql/getQueryBuilderWhere.d.ts +0 -8
  25. package/dist/TypeOrmConnector/queryBuilder/sql/getQueryBuilderWhere.js +0 -200
  26. package/dist/TypeOrmConnector/queryBuilder/sql/getTypeOrmWhere.d.ts +0 -6
  27. package/dist/TypeOrmConnector/queryBuilder/sql/getTypeOrmWhere.js +0 -207
  28. package/dist/TypeOrmConnector/test/advanced/advancedTestSuite.d.ts +0 -1
  29. package/dist/TypeOrmConnector/test/advanced/advancedTestSuite.js +0 -256
  30. package/dist/TypeOrmConnector/test/advanced/typeOrm.entity.d.ts +0 -116
  31. package/dist/TypeOrmConnector/test/advanced/typeOrm.entity.js +0 -74
  32. package/dist/TypeOrmConnector/test/advanced/typeOrm.mongo.repository.d.ts +0 -5
  33. package/dist/TypeOrmConnector/test/advanced/typeOrm.mongo.repository.js +0 -17
  34. package/dist/TypeOrmConnector/test/advanced/typeOrm.mysql.repository.d.ts +0 -5
  35. package/dist/TypeOrmConnector/test/advanced/typeOrm.mysql.repository.js +0 -17
  36. package/dist/TypeOrmConnector/test/advanced/typeOrm.repository.d.ts +0 -5
  37. package/dist/TypeOrmConnector/test/advanced/typeOrm.repository.js +0 -17
  38. package/dist/TypeOrmConnector/test/basic/basicTestSuite.d.ts +0 -1
  39. package/dist/TypeOrmConnector/test/basic/basicTestSuite.js +0 -193
  40. package/dist/TypeOrmConnector/test/basic/goat.entity.d.ts +0 -53
  41. package/dist/TypeOrmConnector/test/basic/goat.entity.js +0 -53
  42. package/dist/TypeOrmConnector/test/basic/goat.mongo.repository.d.ts +0 -5
  43. package/dist/TypeOrmConnector/test/basic/goat.mongo.repository.js +0 -16
  44. package/dist/TypeOrmConnector/test/basic/goat.mysql.repository.d.ts +0 -5
  45. package/dist/TypeOrmConnector/test/basic/goat.mysql.repository.js +0 -16
  46. package/dist/TypeOrmConnector/test/basic/goat.repository.d.ts +0 -5
  47. package/dist/TypeOrmConnector/test/basic/goat.repository.js +0 -16
  48. package/dist/TypeOrmConnector/test/dbEntities.d.ts +0 -6
  49. package/dist/TypeOrmConnector/test/dbEntities.js +0 -17
  50. package/dist/TypeOrmConnector/test/docker/docker.d.ts +0 -35
  51. package/dist/TypeOrmConnector/test/docker/docker.js +0 -148
  52. package/dist/TypeOrmConnector/test/docker/mongo.d.ts +0 -16
  53. package/dist/TypeOrmConnector/test/docker/mongo.js +0 -93
  54. package/dist/TypeOrmConnector/test/docker/mysql.d.ts +0 -17
  55. package/dist/TypeOrmConnector/test/docker/mysql.js +0 -132
  56. package/dist/TypeOrmConnector/test/flock.d.ts +0 -4
  57. package/dist/TypeOrmConnector/test/flock.js +0 -25
  58. package/dist/TypeOrmConnector/test/mongo/car.mongo.repository.d.ts +0 -10
  59. package/dist/TypeOrmConnector/test/mongo/car.mongo.repository.js +0 -28
  60. package/dist/TypeOrmConnector/test/mongo/mongoDatasource.d.ts +0 -2
  61. package/dist/TypeOrmConnector/test/mongo/mongoDatasource.js +0 -12
  62. package/dist/TypeOrmConnector/test/mongo/roles.mongo.repository.d.ts +0 -9
  63. package/dist/TypeOrmConnector/test/mongo/roles.mongo.repository.js +0 -25
  64. package/dist/TypeOrmConnector/test/mongo/roles_user.mongo.repository.d.ts +0 -6
  65. package/dist/TypeOrmConnector/test/mongo/roles_user.mongo.repository.js +0 -17
  66. package/dist/TypeOrmConnector/test/mongo/user.mongo.repository.d.ts +0 -10
  67. package/dist/TypeOrmConnector/test/mongo/user.mongo.repository.js +0 -32
  68. package/dist/TypeOrmConnector/test/mysql/car.mysql.repository.d.ts +0 -10
  69. package/dist/TypeOrmConnector/test/mysql/car.mysql.repository.js +0 -26
  70. package/dist/TypeOrmConnector/test/mysql/mysqlDataSource.d.ts +0 -2
  71. package/dist/TypeOrmConnector/test/mysql/mysqlDataSource.js +0 -16
  72. package/dist/TypeOrmConnector/test/mysql/roles.mysql.repository.d.ts +0 -9
  73. package/dist/TypeOrmConnector/test/mysql/roles.mysql.repository.js +0 -25
  74. package/dist/TypeOrmConnector/test/mysql/roles_user.mysql.repository.d.ts +0 -6
  75. package/dist/TypeOrmConnector/test/mysql/roles_user.mysql.repository.js +0 -17
  76. package/dist/TypeOrmConnector/test/mysql/user.mysql.repository.d.ts +0 -10
  77. package/dist/TypeOrmConnector/test/mysql/user.mysql.repository.js +0 -33
  78. package/dist/TypeOrmConnector/test/relations/car/car.entity.d.ts +0 -7
  79. package/dist/TypeOrmConnector/test/relations/car/car.entity.js +0 -32
  80. package/dist/TypeOrmConnector/test/relations/car/car.output.schema.d.ts +0 -511
  81. package/dist/TypeOrmConnector/test/relations/car/car.output.schema.js +0 -8
  82. package/dist/TypeOrmConnector/test/relations/car/car.repositoryTypeOrm.d.ts +0 -10
  83. package/dist/TypeOrmConnector/test/relations/car/car.repositoryTypeOrm.js +0 -26
  84. package/dist/TypeOrmConnector/test/relations/car/car.schema.d.ts +0 -15
  85. package/dist/TypeOrmConnector/test/relations/car/car.schema.js +0 -9
  86. package/dist/TypeOrmConnector/test/relations/relationsTestsSuite.d.ts +0 -1
  87. package/dist/TypeOrmConnector/test/relations/relationsTestsSuite.js +0 -575
  88. package/dist/TypeOrmConnector/test/relations/roles/role.output.schema.d.ts +0 -152
  89. package/dist/TypeOrmConnector/test/relations/roles/role.output.schema.js +0 -14
  90. package/dist/TypeOrmConnector/test/relations/roles/role.schema.d.ts +0 -12
  91. package/dist/TypeOrmConnector/test/relations/roles/role.schema.js +0 -8
  92. package/dist/TypeOrmConnector/test/relations/roles/roles.entity.d.ts +0 -6
  93. package/dist/TypeOrmConnector/test/relations/roles/roles.entity.js +0 -29
  94. package/dist/TypeOrmConnector/test/relations/roles/roles.repositoryTypeOrm.d.ts +0 -9
  95. package/dist/TypeOrmConnector/test/relations/roles/roles.repositoryTypeOrm.js +0 -25
  96. package/dist/TypeOrmConnector/test/relations/roles/roles_user.entity.d.ts +0 -5
  97. package/dist/TypeOrmConnector/test/relations/roles/roles_user.entity.js +0 -23
  98. package/dist/TypeOrmConnector/test/relations/roles/roles_user.schema.d.ts +0 -15
  99. package/dist/TypeOrmConnector/test/relations/roles/roles_user.schema.js +0 -9
  100. package/dist/TypeOrmConnector/test/relations/roles/roles_users.repositoryTypeOrm.d.ts +0 -6
  101. package/dist/TypeOrmConnector/test/relations/roles/roles_users.repositoryTypeOrm.js +0 -17
  102. package/dist/TypeOrmConnector/test/relations/user/user.entity.d.ts +0 -14
  103. package/dist/TypeOrmConnector/test/relations/user/user.entity.js +0 -56
  104. package/dist/TypeOrmConnector/test/relations/user/user.repositoryTypeOrm.d.ts +0 -10
  105. package/dist/TypeOrmConnector/test/relations/user/user.repositoryTypeOrm.js +0 -30
  106. package/dist/TypeOrmConnector/test/relations/user/user.schema.d.ts +0 -546
  107. package/dist/TypeOrmConnector/test/relations/user/user.schema.js +0 -67
  108. package/dist/TypeOrmConnector/test/sqlite/memoryDataSource.d.ts +0 -2
  109. package/dist/TypeOrmConnector/test/sqlite/memoryDataSource.js +0 -12
  110. package/dist/TypeOrmConnector/util/clearEmpties.d.ts +0 -1
  111. package/dist/TypeOrmConnector/util/clearEmpties.js +0 -25
  112. package/dist/TypeOrmConnector/util/extractConditions.d.ts +0 -6
  113. package/dist/TypeOrmConnector/util/extractConditions.js +0 -80
  114. package/dist/TypeOrmConnector/util/extractInclude.d.ts +0 -2
  115. package/dist/TypeOrmConnector/util/extractInclude.js +0 -25
  116. package/dist/TypeOrmConnector/util/extractMetadataFromKeys.d.ts +0 -12
  117. package/dist/TypeOrmConnector/util/extractMetadataFromKeys.js +0 -42
  118. package/dist/TypeOrmConnector/util/extractOrderBy.d.ts +0 -4
  119. package/dist/TypeOrmConnector/util/extractOrderBy.js +0 -18
  120. package/dist/TypeOrmConnector/util/getRelationsFromModelGenerator.d.ts +0 -19
  121. package/dist/TypeOrmConnector/util/getRelationsFromModelGenerator.js +0 -26
  122. package/dist/TypeOrmConnector/util/getSelectedKeysFromRawSql.d.ts +0 -1
  123. package/dist/TypeOrmConnector/util/getSelectedKeysFromRawSql.js +0 -20
  124. package/dist/TypeOrmConnector/util/isAnyObject.d.ts +0 -1
  125. package/dist/TypeOrmConnector/util/isAnyObject.js +0 -7
  126. package/dist/TypeOrmConnector/util/nestQueryResults.d.ts +0 -2
  127. package/dist/TypeOrmConnector/util/nestQueryResults.js +0 -31
  128. package/dist/cache.d.ts +0 -9
  129. package/dist/cache.js +0 -43
  130. package/dist/core/Loopback/build-schema.d.ts +0 -31
  131. package/dist/core/Loopback/build-schema.js +0 -333
  132. package/dist/core/Loopback/common-types.d.ts +0 -36
  133. package/dist/core/Loopback/common-types.js +0 -13
  134. package/dist/core/Loopback/json-to-schema.d.ts +0 -6
  135. package/dist/core/Loopback/json-to-schema.js +0 -96
  136. package/dist/core/Loopback/mapValues.d.ts +0 -2
  137. package/dist/core/Loopback/mapValues.js +0 -835
  138. package/dist/core/Loopback/metadata.d.ts +0 -9
  139. package/dist/core/Loopback/metadata.js +0 -28
  140. package/dist/core/Loopback/model.d.ts +0 -87
  141. package/dist/core/Loopback/model.js +0 -244
  142. package/dist/core/Loopback/query.d.ts +0 -97
  143. package/dist/core/Loopback/query.js +0 -292
  144. package/dist/core/Loopback/relation.types.d.ts +0 -45
  145. package/dist/core/Loopback/relation.types.js +0 -13
  146. package/dist/core/Loopback/type-resolver.d.ts +0 -7
  147. package/dist/core/Loopback/type-resolver.js +0 -34
  148. package/dist/core/Loopback/type.d.ts +0 -9
  149. package/dist/core/Loopback/type.js +0 -2
  150. package/dist/core/Nestjs/applyDecorators.d.ts +0 -1
  151. package/dist/core/Nestjs/applyDecorators.js +0 -17
  152. package/dist/core/Nestjs/types/common.d.ts +0 -16
  153. package/dist/core/Nestjs/types/common.js +0 -37
  154. package/dist/core/Nestjs/types/decorators/api-hide-property.decorator.d.ts +0 -1
  155. package/dist/core/Nestjs/types/decorators/api-hide-property.decorator.js +0 -7
  156. package/dist/core/Nestjs/types/decorators/api-property.decorator.d.ts +0 -27
  157. package/dist/core/Nestjs/types/decorators/api-property.decorator.js +0 -65
  158. package/dist/core/Nestjs/types/decorators/apply-is-optional.decorator.d.ts +0 -5
  159. package/dist/core/Nestjs/types/decorators/apply-is-optional.decorator.js +0 -131
  160. package/dist/core/Nestjs/types/decorators/args-type.decorator.d.ts +0 -1
  161. package/dist/core/Nestjs/types/decorators/args-type.decorator.js +0 -19
  162. package/dist/core/Nestjs/types/decorators/create-property.decorator.d.ts +0 -2
  163. package/dist/core/Nestjs/types/decorators/create-property.decorator.js +0 -55
  164. package/dist/core/Nestjs/types/decorators/directive.decorator.d.ts +0 -1
  165. package/dist/core/Nestjs/types/decorators/directive.decorator.js +0 -36
  166. package/dist/core/Nestjs/types/decorators/extensions.decorator.d.ts +0 -1
  167. package/dist/core/Nestjs/types/decorators/extensions.decorator.js +0 -25
  168. package/dist/core/Nestjs/types/decorators/field.decorator.d.ts +0 -15
  169. package/dist/core/Nestjs/types/decorators/field.decorator.js +0 -56
  170. package/dist/core/Nestjs/types/decorators/input-type.decorator.d.ts +0 -7
  171. package/dist/core/Nestjs/types/decorators/input-type.decorator.js +0 -23
  172. package/dist/core/Nestjs/types/decorators/interface-type.decorator.d.ts +0 -9
  173. package/dist/core/Nestjs/types/decorators/interface-type.decorator.js +0 -27
  174. package/dist/core/Nestjs/types/decorators/partial-type.helper.d.ts +0 -3
  175. package/dist/core/Nestjs/types/decorators/partial-type.helper.js +0 -42
  176. package/dist/core/Nestjs/types/errors/cannot-determine-host-type.error.d.ts +0 -3
  177. package/dist/core/Nestjs/types/errors/cannot-determine-host-type.error.js +0 -9
  178. package/dist/core/Nestjs/types/errors/directive-parsing.error.d.ts +0 -3
  179. package/dist/core/Nestjs/types/errors/directive-parsing.error.js +0 -9
  180. package/dist/core/Nestjs/types/errors/unable-to-find-fields.error.d.ts +0 -3
  181. package/dist/core/Nestjs/types/errors/unable-to-find-fields.error.js +0 -9
  182. package/dist/core/Nestjs/types/errors/undefined-type.error.d.ts +0 -3
  183. package/dist/core/Nestjs/types/errors/undefined-type.error.js +0 -10
  184. package/dist/core/Nestjs/types/interfaces/add-class-type-metadata.util.d.ts +0 -3
  185. package/dist/core/Nestjs/types/interfaces/add-class-type-metadata.util.js +0 -10
  186. package/dist/core/Nestjs/types/interfaces/base-type-options.interface.d.ts +0 -5
  187. package/dist/core/Nestjs/types/interfaces/base-type-options.interface.js +0 -2
  188. package/dist/core/Nestjs/types/interfaces/class-decorator-factory.interface.d.ts +0 -5
  189. package/dist/core/Nestjs/types/interfaces/class-decorator-factory.interface.js +0 -2
  190. package/dist/core/Nestjs/types/interfaces/complexity.interface.d.ts +0 -11
  191. package/dist/core/Nestjs/types/interfaces/complexity.interface.js +0 -2
  192. package/dist/core/Nestjs/types/interfaces/field-middleware.interface.d.ts +0 -15
  193. package/dist/core/Nestjs/types/interfaces/field-middleware.interface.js +0 -2
  194. package/dist/core/Nestjs/types/interfaces/open-api-spec.interface.d.ts +0 -235
  195. package/dist/core/Nestjs/types/interfaces/open-api-spec.interface.js +0 -2
  196. package/dist/core/Nestjs/types/interfaces/resolve-type-fn.interface.d.ts +0 -2
  197. package/dist/core/Nestjs/types/interfaces/resolve-type-fn.interface.js +0 -2
  198. package/dist/core/Nestjs/types/interfaces/return-type-func.interface.d.ts +0 -5
  199. package/dist/core/Nestjs/types/interfaces/return-type-func.interface.js +0 -2
  200. package/dist/core/Nestjs/types/interfaces/schema-object-metadata.interface.d.ts +0 -9
  201. package/dist/core/Nestjs/types/interfaces/schema-object-metadata.interface.js +0 -2
  202. package/dist/core/Nestjs/types/interfaces/type-options.interface.d.ts +0 -5
  203. package/dist/core/Nestjs/types/interfaces/type-options.interface.js +0 -2
  204. package/dist/core/Nestjs/types/lazy-metadata.storage.d.ts +0 -15
  205. package/dist/core/Nestjs/types/lazy-metadata.storage.js +0 -67
  206. package/dist/core/Nestjs/types/metadata/class.metadata.d.ts +0 -11
  207. package/dist/core/Nestjs/types/metadata/class.metadata.js +0 -2
  208. package/dist/core/Nestjs/types/metadata/directive.metadata.d.ts +0 -8
  209. package/dist/core/Nestjs/types/metadata/directive.metadata.js +0 -2
  210. package/dist/core/Nestjs/types/metadata/enum.metadata.d.ts +0 -11
  211. package/dist/core/Nestjs/types/metadata/enum.metadata.js +0 -2
  212. package/dist/core/Nestjs/types/metadata/extensions.metadata.d.ts +0 -8
  213. package/dist/core/Nestjs/types/metadata/extensions.metadata.js +0 -2
  214. package/dist/core/Nestjs/types/metadata/index.d.ts +0 -8
  215. package/dist/core/Nestjs/types/metadata/index.js +0 -11
  216. package/dist/core/Nestjs/types/metadata/interface.metadata.d.ts +0 -6
  217. package/dist/core/Nestjs/types/metadata/interface.metadata.js +0 -2
  218. package/dist/core/Nestjs/types/metadata/object-type.metadata.d.ts +0 -4
  219. package/dist/core/Nestjs/types/metadata/object-type.metadata.js +0 -2
  220. package/dist/core/Nestjs/types/metadata/param.metadata.d.ts +0 -18
  221. package/dist/core/Nestjs/types/metadata/param.metadata.js +0 -2
  222. package/dist/core/Nestjs/types/metadata/property.metadata.d.ts +0 -20
  223. package/dist/core/Nestjs/types/metadata/property.metadata.js +0 -2
  224. package/dist/core/Nestjs/types/metadata/resolver.metadata.d.ts +0 -34
  225. package/dist/core/Nestjs/types/metadata/resolver.metadata.js +0 -2
  226. package/dist/core/Nestjs/types/metadata/union.metadata.d.ts +0 -9
  227. package/dist/core/Nestjs/types/metadata/union.metadata.js +0 -2
  228. package/dist/core/Nestjs/types/object-type.decorator.d.ts +0 -8
  229. package/dist/core/Nestjs/types/object-type.decorator.js +0 -25
  230. package/dist/core/Nestjs/types/omit-type.d.ts +0 -2
  231. package/dist/core/Nestjs/types/omit-type.js +0 -34
  232. package/dist/core/Nestjs/types/reflection.utils.d.ts +0 -15
  233. package/dist/core/Nestjs/types/reflection.utils.js +0 -65
  234. package/dist/core/Nestjs/types/set-metadata.decorator.d.ts +0 -4
  235. package/dist/core/Nestjs/types/set-metadata.decorator.js +0 -16
  236. package/dist/core/Nestjs/types/type-metadata.storage.d.ts +0 -69
  237. package/dist/core/Nestjs/types/type-metadata.storage.js +0 -342
  238. package/dist/core/Nestjs/types/utils/enum.utils.d.ts +0 -3
  239. package/dist/core/Nestjs/types/utils/enum.utils.js +0 -29
  240. package/dist/core/Nestjs/types/utils/get-fields-and-decorator.util.d.ts +0 -3
  241. package/dist/core/Nestjs/types/utils/get-fields-and-decorator.util.js +0 -72
  242. package/dist/core/Nestjs/types/utils/mapped-types.utils.d.ts +0 -2
  243. package/dist/core/Nestjs/types/utils/mapped-types.utils.js +0 -38
  244. package/dist/core/Nestjs/types/utils/model-properties-accessor.d.ts +0 -6
  245. package/dist/core/Nestjs/types/utils/model-properties-accessor.js +0 -36
  246. package/dist/core/Nestjs/types/utils/type-helpers.utils.d.ts +0 -2
  247. package/dist/core/Nestjs/types/utils/type-helpers.utils.js +0 -16
  248. package/dist/core/types.d.ts +0 -23
  249. package/dist/core/types.js +0 -29
  250. package/dist/decorators.d.ts +0 -47
  251. package/dist/decorators.js +0 -104
  252. package/dist/generatorDatasource.d.ts +0 -2
  253. package/dist/generatorDatasource.js +0 -12
  254. package/dist/index.d.ts +0 -30
  255. package/dist/index.js +0 -49
  256. package/dist/loadRelations.d.ts +0 -12
  257. package/dist/loadRelations.js +0 -133
  258. package/dist/outputKeys.d.ts +0 -2
  259. package/dist/outputKeys.js +0 -17
  260. package/dist/tsconfig.tsbuildinfo +0 -1
  261. package/dist/types.d.ts +0 -141
  262. package/dist/types.js +0 -22
@@ -1,575 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.relationsTestSuite = void 0;
4
- const js_utils_1 = require("@goatlab/js-utils");
5
- let User;
6
- let Car;
7
- let Role;
8
- const relationsTestSuite = (UserRepo, BelongsToModelF, ManyToManyModelF) => {
9
- beforeAll(() => {
10
- User = new UserRepo();
11
- Car = new BelongsToModelF();
12
- Role = new ManyToManyModelF();
13
- });
14
- const insertRelatedData = async () => {
15
- const insertedUser = await User.insert({
16
- name: 'testUser1',
17
- age: 20
18
- });
19
- await User.insert({
20
- name: 'anotherUser 2',
21
- age: 24
22
- });
23
- const adminRole = await Role.insert({
24
- name: 'Administrator'
25
- });
26
- const user = await User.loadById(insertedUser.id);
27
- const attachedRole = await user.roles().attach(adminRole.id);
28
- const associatedCar1 = await user.cars().associate({ name: 'My' });
29
- const associatedCar2 = await user.cars().associate({ name: 'My new car 2' });
30
- const associatedCar3 = await user.cars().associate({ name: 'My new car 4' });
31
- const associatedCar4 = await user.cars().associate({ name: 'My new car 4' });
32
- return { insertedUser, adminRole };
33
- };
34
- test('requireById - Should return valid Object', async () => {
35
- const insertedUser = await User.insert({
36
- name: 'testUser',
37
- age: 20
38
- });
39
- expect(typeof insertedUser.id).toBe('string');
40
- const findById = await User.requireById(insertedUser.id);
41
- expect(findById.id).toBe(insertedUser.id);
42
- });
43
- test('requireById - Should fail if not found', async () => {
44
- const insertedUser = await User.insert({
45
- name: 'testUser',
46
- age: 20
47
- });
48
- const [error, found] = await js_utils_1.Promises.try(User.requireById('62ed01e4219a6ab760ae5c50'));
49
- expect(error?.message).toBe('Object 62ed01e4219a6ab760ae5c50 not found');
50
- });
51
- test('loadFirst - Should return a cloned class', async () => {
52
- const insertedUser = await User.insert({
53
- name: 'testUser',
54
- age: 20
55
- });
56
- expect(typeof insertedUser.id).toBe('string');
57
- const user = User.loadFirst({
58
- where: {
59
- id: insertedUser.id
60
- }
61
- });
62
- expect(Array.isArray(user)).toBe(false);
63
- expect(typeof user).toBe('object');
64
- expect(user).toHaveProperty('associate');
65
- });
66
- test('Attach - Many to Many - Should relate Data', async () => {
67
- const insertedUser = await User.insert({
68
- name: 'testUser1',
69
- age: 20
70
- });
71
- const adminRole = await Role.insert({
72
- name: 'Administrator'
73
- });
74
- const user = await User.loadById(insertedUser.id);
75
- const attachedRoles = await user.roles().attach(adminRole.id);
76
- expect(attachedRoles[0].userId).toBe(insertedUser.id);
77
- expect(attachedRoles[0].roleId).toBe(adminRole.id);
78
- });
79
- test('Associate - OneToMany - Should insert data', async () => {
80
- const insertedUser = await User.insert({
81
- name: 'testUser',
82
- age: 20
83
- });
84
- expect(typeof insertedUser.id).toBe('string');
85
- const user = await User.loadById(insertedUser.id);
86
- const cars = await user.cars().associate({ name: 'Another new car' });
87
- expect(Array.isArray(cars)).toBe(true);
88
- expect(cars[0].name).toBe('Another new car');
89
- expect(cars[0].userId).toBe(insertedUser.id);
90
- });
91
- test('Associate - OneToMany - Should relate existing model', async () => {
92
- const insertedUser = await User.insert({
93
- name: 'testUser',
94
- age: 20
95
- });
96
- expect(typeof insertedUser.id).toBe('string');
97
- const user = await User.loadById(insertedUser.id);
98
- const createdCar = await Car.insert({ name: 'Another new car' });
99
- const cars = await user.cars().associate(createdCar);
100
- expect(Array.isArray(cars)).toBe(true);
101
- expect(cars[0].name).toBe('Another new car');
102
- expect(cars[0].userId).toBe(insertedUser.id);
103
- expect(createdCar.id).toBe(cars[0].id);
104
- });
105
- test('Query related model - OneToMany (belongsToMany)', async () => {
106
- const insertedUser = await User.insert({
107
- name: 'testUser',
108
- age: 20
109
- });
110
- expect(typeof insertedUser.id).toBe('string');
111
- const user1 = await User.loadById(insertedUser.id);
112
- const cars = await user1.cars().associate({ name: 'My new car' });
113
- expect(Array.isArray(cars)).toBe(true);
114
- const searchUserWithRelation = await User.findMany({
115
- where: { id: insertedUser.id },
116
- include: {
117
- cars: true
118
- }
119
- });
120
- const firstResult = searchUserWithRelation[0];
121
- expect(Array.isArray(searchUserWithRelation)).toBe(true);
122
- expect(Array.isArray(firstResult.cars)).toBe(true);
123
- expect(firstResult.cars.length > 0).toBe(true);
124
- expect(firstResult.cars[0].userId).toBe(insertedUser.id);
125
- const searchCar = await user1.cars().findMany({
126
- where: { name: 'My new car' },
127
- include: { user: true }
128
- });
129
- expect(Array.isArray(searchCar)).toBe(true);
130
- expect(searchCar.length > 0).toBe(true);
131
- expect(searchCar[0].user?.id).toBe(insertedUser.id);
132
- const searchCar2 = await user1
133
- .cars()
134
- .findMany({ where: { name: 'My.......' } });
135
- expect(Array.isArray(searchCar2)).toBe(true);
136
- expect(searchCar2.length === 0).toBe(true);
137
- });
138
- test('Query related model - ManyToOne (BelongsTo)', async () => {
139
- const insertedUser = await User.insert({
140
- name: 'testUser',
141
- age: 20
142
- });
143
- expect(typeof insertedUser.id).toBe('string');
144
- const user1 = await User.loadById(insertedUser.id);
145
- await user1.cars().associate({ name: 'My new car' });
146
- const results = await Car.findMany({
147
- where: {
148
- userId: insertedUser.id
149
- },
150
- include: {
151
- user: true
152
- }
153
- });
154
- expect(Array.isArray(results)).toBe(true);
155
- expect(results.length > 0).toBe(true);
156
- expect(typeof results[0].user?.name).toBe('string');
157
- expect(results[0].user['id']).toBe(insertedUser.id);
158
- });
159
- test('Include - can load cyclical relations', async () => {
160
- const { insertedUser } = await insertRelatedData();
161
- const searchUserWithRelations = await User.findMany({
162
- where: {
163
- id: insertedUser.id
164
- },
165
- include: {
166
- cars: {
167
- include: {
168
- user: {
169
- include: {
170
- cars: {
171
- include: {
172
- user: true
173
- }
174
- }
175
- }
176
- }
177
- }
178
- }
179
- }
180
- });
181
- expect(searchUserWithRelations.length).toBe(1);
182
- expect(searchUserWithRelations[0].cars?.length).toBe(4);
183
- expect(searchUserWithRelations[0].cars[0].user?.id).toBe(insertedUser.id);
184
- expect(searchUserWithRelations[0].cars[0].user?.name).toBe(insertedUser.name);
185
- expect(searchUserWithRelations[0].cars[0].user?.id).toBe(searchUserWithRelations[0].id);
186
- expect(searchUserWithRelations[0].cars[0].user?.name).toBe(searchUserWithRelations[0].name);
187
- expect(searchUserWithRelations[0].cars[0].user?.cars?.length).toBe(4);
188
- expect(searchUserWithRelations[0].cars[0].user?.cars[0].user?.id).toBe(searchUserWithRelations[0].id);
189
- });
190
- test('Include - can filter related models', async () => {
191
- const { insertedUser } = await insertRelatedData();
192
- const searchUserWithRelations = await User.findMany({
193
- where: {
194
- id: insertedUser.id
195
- },
196
- include: {
197
- cars: {
198
- select: {
199
- name: true,
200
- id: true
201
- },
202
- where: {
203
- name: 'My new car 4'
204
- },
205
- include: {
206
- user: {
207
- include: {
208
- cars: {
209
- where: {
210
- name: 'My new car XXXxX'
211
- },
212
- include: {
213
- user: true
214
- }
215
- }
216
- }
217
- }
218
- }
219
- }
220
- }
221
- });
222
- expect(searchUserWithRelations[0].cars?.length).toBe(2);
223
- expect(searchUserWithRelations[0].cars[0].name).toBe('My new car 4');
224
- expect(searchUserWithRelations[0].cars[0].user?.cars?.length).toBe(0);
225
- });
226
- test('Include - (One to Many) Should display [] if not found', async () => {
227
- const { insertedUser } = await insertRelatedData();
228
- const searchUserWithRelations = await User.findMany({
229
- where: {
230
- id: insertedUser.id
231
- },
232
- include: {
233
- cars: {
234
- where: {
235
- name: 'My new car XX'
236
- }
237
- }
238
- }
239
- });
240
- expect(Array.isArray(searchUserWithRelations[0].cars)).toBe(true);
241
- expect(searchUserWithRelations[0].cars?.length).toBe(0);
242
- });
243
- test('Include - (Many to One) Should display null if not found', async () => {
244
- const { insertedUser } = await insertRelatedData();
245
- const insertedCars = await Car.findMany({
246
- where: {
247
- userId: insertedUser.id
248
- },
249
- select: {
250
- id: true,
251
- name: true,
252
- userId: true,
253
- user: true
254
- },
255
- include: {
256
- user: {
257
- where: {
258
- name: 'JOHN'
259
- }
260
- }
261
- }
262
- });
263
- expect(insertedCars[0].user === null || insertedCars[0].user === undefined).toBe(true);
264
- expect(insertedCars.length).toBe(4);
265
- });
266
- test('Include - Should pull info from the main search object if no related data', async () => {
267
- const { insertedUser } = await insertRelatedData();
268
- const searchUserWithRelations = await User.findMany({
269
- select: {
270
- id: true,
271
- name: true,
272
- cars: {
273
- name: true,
274
- user: {
275
- id: true,
276
- name: true,
277
- cars: {
278
- id: true,
279
- user: true,
280
- name: true
281
- }
282
- }
283
- }
284
- },
285
- where: {
286
- id: insertedUser.id
287
- },
288
- include: {
289
- cars: {
290
- select: {
291
- name: true,
292
- id: true
293
- },
294
- where: {
295
- name: 'My new car XXX'
296
- },
297
- include: {
298
- user: {
299
- include: {
300
- cars: {
301
- where: {
302
- name: 'My new car XXXxX'
303
- },
304
- include: {
305
- user: true
306
- }
307
- }
308
- }
309
- }
310
- }
311
- }
312
- }
313
- });
314
- expect(searchUserWithRelations[0].id).toBe(insertedUser.id);
315
- expect(searchUserWithRelations[0].name).toBe(insertedUser.name);
316
- expect(searchUserWithRelations[0].cars?.length).toBe(0);
317
- });
318
- test('Include - Can filter and select specific keys', async () => {
319
- const { insertedUser } = await insertRelatedData();
320
- const searchUserWithRelations = await User.findMany({
321
- select: {
322
- id: true,
323
- name: true,
324
- age: true,
325
- cars: {
326
- name: true,
327
- user: {
328
- id: true,
329
- name: true,
330
- cars: {
331
- id: true,
332
- user: true,
333
- name: true
334
- }
335
- }
336
- }
337
- },
338
- where: {
339
- id: insertedUser.id
340
- },
341
- include: {
342
- cars: {
343
- select: {
344
- name: true,
345
- id: true
346
- },
347
- where: {
348
- name: 'My new car 4'
349
- },
350
- include: {
351
- user: {
352
- include: {
353
- cars: {
354
- where: {
355
- name: 'My new car XXXxX'
356
- },
357
- include: {
358
- user: true
359
- }
360
- }
361
- }
362
- }
363
- }
364
- }
365
- }
366
- });
367
- expect(searchUserWithRelations[0]).toHaveProperty('age');
368
- expect(searchUserWithRelations[0].age).toBe(insertedUser.age);
369
- expect(searchUserWithRelations[0]).not.toHaveProperty('breed');
370
- });
371
- test('Include - Should filter keys from nested objects', async () => {
372
- const { insertedUser } = await insertRelatedData();
373
- const searchUserWithRelations = await User.findMany({
374
- select: {
375
- id: true,
376
- name: true,
377
- cars: {
378
- name: true,
379
- user: {
380
- id: true,
381
- name: true,
382
- cars: {
383
- id: true,
384
- user: true,
385
- name: true
386
- }
387
- }
388
- }
389
- },
390
- where: {
391
- id: insertedUser.id
392
- },
393
- include: {
394
- cars: {
395
- select: {
396
- name: true
397
- },
398
- where: {
399
- name: 'My new car 4'
400
- },
401
- include: {
402
- user: {
403
- select: {
404
- id: true,
405
- name: true
406
- },
407
- include: {
408
- cars: {
409
- where: {
410
- name: 'My new car XXXxX'
411
- },
412
- include: {
413
- user: true
414
- }
415
- }
416
- }
417
- }
418
- }
419
- }
420
- }
421
- });
422
- expect(searchUserWithRelations[0].cars[0]).not.toHaveProperty('id');
423
- expect(searchUserWithRelations[0].cars[0]).not.toHaveProperty('userId');
424
- expect(searchUserWithRelations[0].cars[0]).toHaveProperty('user');
425
- expect(searchUserWithRelations[0].cars[0].name).toBe('My new car 4');
426
- expect(searchUserWithRelations[0].cars[0].user).not.toHaveProperty('age');
427
- expect(searchUserWithRelations[0].cars[0].user).not.toHaveProperty('breed');
428
- expect(searchUserWithRelations[0].cars[0].user?.id).toBe(insertedUser.id);
429
- });
430
- test('Include - Can select keys using main select or nested selects', async () => {
431
- const { insertedUser } = await insertRelatedData();
432
- await User.findMany({
433
- select: {
434
- id: true,
435
- name: true,
436
- cars: {
437
- name: true,
438
- user: {
439
- id: true,
440
- name: true,
441
- cars: {
442
- id: true,
443
- user: true,
444
- name: true
445
- }
446
- }
447
- }
448
- },
449
- where: {
450
- id: insertedUser.id
451
- },
452
- include: {
453
- cars: {
454
- select: {
455
- name: true,
456
- id: true
457
- },
458
- where: {
459
- name: 'My new car 4'
460
- },
461
- include: {
462
- user: {
463
- include: {
464
- cars: {
465
- where: {
466
- name: 'My new car XXXxX'
467
- },
468
- include: {
469
- user: true
470
- }
471
- }
472
- }
473
- }
474
- }
475
- }
476
- }
477
- });
478
- });
479
- test('Include - (Many to Many) should display [] if not found', async () => {
480
- const { insertedUser } = await insertRelatedData();
481
- await User.findMany({
482
- select: {
483
- id: true,
484
- name: true,
485
- cars: {
486
- name: true,
487
- user: {
488
- id: true,
489
- name: true,
490
- cars: {
491
- id: true,
492
- user: true,
493
- name: true
494
- }
495
- }
496
- }
497
- },
498
- where: {
499
- id: insertedUser.id
500
- },
501
- include: {
502
- cars: {
503
- select: {
504
- name: true,
505
- id: true
506
- },
507
- where: {
508
- name: 'My new car 4'
509
- },
510
- include: {
511
- user: {
512
- include: {
513
- cars: {
514
- where: {
515
- name: 'My new car XXXxX'
516
- },
517
- include: {
518
- user: true
519
- }
520
- }
521
- }
522
- }
523
- }
524
- }
525
- }
526
- });
527
- });
528
- test('Query related model - ManyToMany', async () => {
529
- const insertedUser = await User.insert({
530
- name: 'testUser',
531
- age: 20
532
- });
533
- expect(typeof insertedUser.id).toBe('string');
534
- const adminRole = await Role.insert({
535
- name: 'Administrator'
536
- });
537
- const user = await User.loadById(insertedUser.id);
538
- const attached = await user.roles().attach(adminRole.id);
539
- expect(attached[0].userId).toBe(insertedUser.id);
540
- expect(attached[0].roleId).toBe(adminRole.id);
541
- const searchUserWithRelation = await User.findMany({
542
- where: {
543
- id: insertedUser.id
544
- },
545
- include: {
546
- roles: {
547
- withPivot: true
548
- }
549
- }
550
- });
551
- expect(Array.isArray(searchUserWithRelation[0].roles)).toBe(true);
552
- expect(searchUserWithRelation[0].roles.length > 0).toBe(true);
553
- expect(typeof searchUserWithRelation[0].roles[0].name).toBe('string');
554
- expect(searchUserWithRelation[0].roles[0].id).toBe(adminRole.id);
555
- expect(searchUserWithRelation[0].roles[0].pivot.id).toBe(attached[0].id);
556
- const roles = await Role.findMany({
557
- where: {
558
- name: 'Administrator'
559
- },
560
- include: {
561
- users: { withPivot: true }
562
- }
563
- });
564
- expect(Array.isArray(roles)).toBe(true);
565
- expect(roles.length > 0).toBe(true);
566
- expect(typeof roles[0].users[0].name).toBe('string');
567
- expect(typeof roles[0].users[0].age).toBe('number');
568
- expect(roles[0].users[0].pivot).toBeDefined();
569
- expect(roles[0].users[0].id).toBe(roles[0].users[0].pivot.userId);
570
- expect(roles.some(r => {
571
- return r.users.some(u => u.id === insertedUser.id);
572
- })).toBe(true);
573
- });
574
- };
575
- exports.relationsTestSuite = relationsTestSuite;