@drax/identity-back 0.0.8 → 0.0.10

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 (188) hide show
  1. package/dist/errors/BadCredentialsError.js +10 -0
  2. package/dist/errors/UnauthorizedError.js +10 -0
  3. package/dist/factory/RoleServiceFactory.js +16 -3
  4. package/dist/factory/UserServiceFactory.js +17 -3
  5. package/dist/graphql/resolvers/role.resolvers.js +98 -11
  6. package/dist/graphql/resolvers/user.resolvers.js +134 -15
  7. package/dist/graphql/types/role.graphql +6 -4
  8. package/dist/graphql/types/user.graphql +36 -9
  9. package/dist/i18n/messages/validation-i18n.js +21 -0
  10. package/dist/index.js +22 -7
  11. package/dist/interfaces/IID.js +1 -0
  12. package/dist/interfaces/IJwtUser.js +1 -0
  13. package/dist/middleware/jwtMiddleware.js +19 -0
  14. package/dist/middleware/rbacMiddleware.js +36 -0
  15. package/dist/models/RoleModel.js +0 -8
  16. package/dist/models/UserModel.js +1 -2
  17. package/dist/permissions/IdentityPermissions.js +16 -0
  18. package/dist/rbac/Rbac.js +20 -0
  19. package/dist/repository/mongo/RoleMongoRepository.js +41 -0
  20. package/dist/repository/mongo/UserMongoRepository.js +82 -0
  21. package/dist/repository/sqlite/RoleSqliteRepository.js +115 -0
  22. package/dist/repository/sqlite/UserSqliteRepository.js +157 -0
  23. package/dist/routes/RoleRoutes.js +145 -0
  24. package/dist/routes/UserRoutes.js +199 -0
  25. package/dist/routes/authRoutes.js +12 -4
  26. package/dist/services/AuthService.js +0 -15
  27. package/dist/services/PermissionService.js +19 -0
  28. package/dist/services/RoleService.js +48 -16
  29. package/dist/services/UserService.js +82 -23
  30. package/dist/utils/AuthUtils.js +20 -6
  31. package/dist/utils/DbSetupUtils.js +28 -0
  32. package/dist/zod/RoleZod.js +8 -0
  33. package/dist/zod/UserZod.js +18 -0
  34. package/package.json +17 -10
  35. package/src/errors/BadCredentialsError.ts +13 -0
  36. package/src/errors/UnauthorizedError.ts +13 -0
  37. package/src/factory/RoleServiceFactory.ts +20 -3
  38. package/src/factory/UserServiceFactory.ts +20 -3
  39. package/src/graphql/resolvers/role.resolvers.ts +92 -11
  40. package/src/graphql/resolvers/user.resolvers.ts +128 -15
  41. package/src/graphql/types/role.graphql +6 -4
  42. package/src/graphql/types/user.graphql +36 -9
  43. package/src/index.ts +50 -10
  44. package/src/interfaces/IID.ts +5 -0
  45. package/src/interfaces/IJwtUser.ts +7 -0
  46. package/src/interfaces/IRole.ts +15 -5
  47. package/src/interfaces/IRoleRepository.ts +8 -5
  48. package/src/interfaces/IUser.ts +30 -6
  49. package/src/interfaces/IUserGroup.ts +2 -1
  50. package/src/interfaces/IUserRepository.ts +11 -6
  51. package/src/middleware/jwtMiddleware.ts +22 -0
  52. package/src/middleware/rbacMiddleware.ts +40 -0
  53. package/src/models/RoleModel.ts +0 -9
  54. package/src/models/UserModel.ts +1 -2
  55. package/src/permissions/IdentityPermissions.ts +20 -0
  56. package/src/rbac/Rbac.ts +31 -0
  57. package/src/repository/mongo/RoleMongoRepository.ts +57 -0
  58. package/src/repository/mongo/UserMongoRepository.ts +104 -0
  59. package/src/repository/sqlite/RoleSqliteRepository.ts +151 -0
  60. package/src/repository/sqlite/UserSqliteRepository.ts +194 -0
  61. package/src/routes/RoleRoutes.ts +141 -0
  62. package/src/routes/UserRoutes.ts +198 -0
  63. package/src/services/PermissionService.ts +26 -0
  64. package/src/services/RoleService.ts +46 -21
  65. package/src/services/UserService.ts +86 -28
  66. package/src/utils/AuthUtils.ts +22 -7
  67. package/src/utils/DbSetupUtils.ts +39 -0
  68. package/src/zod/RoleZod.ts +14 -0
  69. package/src/zod/UserZod.ts +26 -0
  70. package/test/data-json/roles/admin-role.json +1 -1
  71. package/test/data-obj/roles/{admin-role.ts → admin-mongo-role.ts} +2 -1
  72. package/test/data-obj/roles/admin-sqlite-role.ts +9 -0
  73. package/test/data-obj/roles/operator-sqlite-role.ts +9 -0
  74. package/test/data-obj/users/root-mongo-user.ts +15 -0
  75. package/test/data-obj/users/root-sqlite-user.ts +16 -0
  76. package/test/{initializers → db}/MongoInMemory.ts +2 -1
  77. package/test/initializers/RoleMongoInitializer.ts +15 -0
  78. package/test/initializers/RoleSqliteInitializer.ts +18 -0
  79. package/test/repository/{role-repository.test.ts → mongo/role-mongo-repository.test.ts} +14 -24
  80. package/test/repository/mongo/user-mongo-repository.test.ts +121 -0
  81. package/test/repository/sqlite/role-sqlite-repository.test.ts +70 -0
  82. package/test/repository/sqlite/user-sqlite-repository.test.ts +126 -0
  83. package/test/service/mock-service.test.ts +3 -3
  84. package/test/service/role-service.test.ts +5 -5
  85. package/test/service/user-service.test.ts +42 -15
  86. package/test.db +0 -0
  87. package/tsconfig.json +16 -3
  88. package/tsconfig.tsbuildinfo +1 -1
  89. package/types/errors/BadCredentialsError.d.ts +6 -0
  90. package/types/errors/BadCredentialsError.d.ts.map +1 -0
  91. package/types/errors/UnauthorizedError.d.ts +6 -0
  92. package/types/errors/UnauthorizedError.d.ts.map +1 -0
  93. package/types/factory/RoleServiceFactory.d.ts +2 -2
  94. package/types/factory/RoleServiceFactory.d.ts.map +1 -1
  95. package/types/factory/UserServiceFactory.d.ts +2 -2
  96. package/types/factory/UserServiceFactory.d.ts.map +1 -1
  97. package/types/graphql/resolvers/role.resolvers.d.ts +24 -7
  98. package/types/graphql/resolvers/role.resolvers.d.ts.map +1 -1
  99. package/types/graphql/resolvers/user.resolvers.d.ts +38 -7
  100. package/types/graphql/resolvers/user.resolvers.d.ts.map +1 -1
  101. package/types/i18n/messages/validation-i18n.d.ts +4 -0
  102. package/types/i18n/messages/validation-i18n.d.ts.map +1 -0
  103. package/types/index.d.ts +21 -5
  104. package/types/index.d.ts.map +1 -1
  105. package/types/interfaces/IID.d.ts +6 -0
  106. package/types/interfaces/IID.d.ts.map +1 -0
  107. package/types/interfaces/IJwtUser.d.ts +7 -0
  108. package/types/interfaces/IJwtUser.d.ts.map +1 -0
  109. package/types/interfaces/IRole.d.ts +13 -6
  110. package/types/interfaces/IRole.d.ts.map +1 -1
  111. package/types/interfaces/IRoleRepository.d.ts +8 -4
  112. package/types/interfaces/IRoleRepository.d.ts.map +1 -1
  113. package/types/interfaces/IUser.d.ts +29 -8
  114. package/types/interfaces/IUser.d.ts.map +1 -1
  115. package/types/interfaces/IUserGroup.d.ts +3 -2
  116. package/types/interfaces/IUserGroup.d.ts.map +1 -1
  117. package/types/interfaces/IUserRepository.d.ts +10 -6
  118. package/types/interfaces/IUserRepository.d.ts.map +1 -1
  119. package/types/middleware/jwtMiddleware.d.ts +4 -0
  120. package/types/middleware/jwtMiddleware.d.ts.map +1 -0
  121. package/types/middleware/rbacMiddleware.d.ts +4 -0
  122. package/types/middleware/rbacMiddleware.d.ts.map +1 -0
  123. package/types/models/RoleModel.d.ts +8 -8
  124. package/types/models/RoleModel.d.ts.map +1 -1
  125. package/types/models/UserGroupModel.d.ts +8 -8
  126. package/types/models/UserGroupModel.d.ts.map +1 -1
  127. package/types/models/UserModel.d.ts +8 -8
  128. package/types/models/UserModel.d.ts.map +1 -1
  129. package/types/permissions/IdentityPermissions.d.ts +16 -0
  130. package/types/permissions/IdentityPermissions.d.ts.map +1 -0
  131. package/types/rbac/Rbac.d.ts +12 -0
  132. package/types/rbac/Rbac.d.ts.map +1 -0
  133. package/types/repository/mongo/RoleMongoRepository.d.ts +14 -0
  134. package/types/repository/mongo/RoleMongoRepository.d.ts.map +1 -0
  135. package/types/repository/mongo/UserMongoRepository.d.ts +18 -0
  136. package/types/repository/mongo/UserMongoRepository.d.ts.map +1 -0
  137. package/types/repository/sqlite/RoleSqliteRepository.d.ts +19 -0
  138. package/types/repository/sqlite/RoleSqliteRepository.d.ts.map +1 -0
  139. package/types/repository/sqlite/UserSqliteRepository.d.ts +24 -0
  140. package/types/repository/sqlite/UserSqliteRepository.d.ts.map +1 -0
  141. package/types/routes/RoleRoutes.d.ts +4 -0
  142. package/types/routes/RoleRoutes.d.ts.map +1 -0
  143. package/types/routes/UserRoutes.d.ts +4 -0
  144. package/types/routes/UserRoutes.d.ts.map +1 -0
  145. package/types/routes/authRoutes.d.ts.map +1 -1
  146. package/types/services/AuthService.d.ts +0 -3
  147. package/types/services/AuthService.d.ts.map +1 -1
  148. package/types/services/PermissionService.d.ts +9 -0
  149. package/types/services/PermissionService.d.ts.map +1 -0
  150. package/types/services/RoleService.d.ts +6 -8
  151. package/types/services/RoleService.d.ts.map +1 -1
  152. package/types/services/UserService.d.ts +13 -11
  153. package/types/services/UserService.d.ts.map +1 -1
  154. package/types/utils/AuthUtils.d.ts +5 -2
  155. package/types/utils/AuthUtils.d.ts.map +1 -1
  156. package/types/utils/DbSetupUtils.d.ts +10 -0
  157. package/types/utils/DbSetupUtils.d.ts.map +1 -0
  158. package/types/zod/RoleZod.d.ts +10 -0
  159. package/types/zod/RoleZod.d.ts.map +1 -0
  160. package/types/zod/UserZod.d.ts +53 -0
  161. package/types/zod/UserZod.d.ts.map +1 -0
  162. package/dist/factory/AuthServiceFactory.js +0 -8
  163. package/dist/graphql/resolvers/auth.resolvers.js +0 -16
  164. package/dist/graphql/types/auth.graphql +0 -12
  165. package/dist/repository/RoleRepository.js +0 -29
  166. package/dist/repository/UserRepository.js +0 -33
  167. package/src/factory/AuthServiceFactory.ts +0 -10
  168. package/src/graphql/resolvers/auth.resolvers.ts +0 -20
  169. package/src/graphql/types/auth.graphql +0 -12
  170. package/src/repository/RoleRepository.ts +0 -42
  171. package/src/repository/UserRepository.ts +0 -47
  172. package/src/routes/authRoutes.ts +0 -22
  173. package/src/services/AuthService.ts +0 -29
  174. package/test/data-obj/users/root-user.ts +0 -15
  175. package/test/initializers/MongoInMemory.mjs +0 -34
  176. package/test/initializers/RoleInitializer.mjs +0 -11
  177. package/test/initializers/RoleInitializer.ts +0 -15
  178. package/test/repository/user-repository.test.ts +0 -54
  179. package/types/factory/AuthServiceFactory.d.ts +0 -4
  180. package/types/factory/AuthServiceFactory.d.ts.map +0 -1
  181. package/types/graphql/resolvers/auth.resolvers.d.ts +0 -12
  182. package/types/graphql/resolvers/auth.resolvers.d.ts.map +0 -1
  183. package/types/repository/RoleRepository.d.ts +0 -41
  184. package/types/repository/RoleRepository.d.ts.map +0 -1
  185. package/types/repository/UserRepository.d.ts +0 -40
  186. package/types/repository/UserRepository.d.ts.map +0 -1
  187. package/types/routes/AuthRoutes.d.ts +0 -3
  188. package/types/routes/AuthRoutes.d.ts.map +0 -1
@@ -0,0 +1,39 @@
1
+
2
+ enum DbEngine{
3
+ Sqlite = "sqlite",
4
+ Mongo = "mongo",
5
+ }
6
+
7
+
8
+ class DbSetupUtils{
9
+
10
+
11
+ static getDbEngine() {
12
+ if (!process.env.DB_ENGINE) {
13
+ throw new Error("process.env.DB_ENGINE is not defined");
14
+ }
15
+ const dbEngine = process.env.DB_ENGINE as DbEngine;
16
+ if (!Object.values(DbEngine).includes(dbEngine)) {
17
+ throw new Error("process.env.DB_ENGINE must be one of " + Object.values(DbEngine).join(", "));
18
+ }
19
+ return dbEngine;
20
+ }
21
+
22
+ static getDbUri(){
23
+ switch (DbSetupUtils.getDbEngine()) {
24
+ case DbEngine.Mongo:
25
+ return process.env.MONGO_URI;
26
+ case DbEngine.Sqlite:
27
+ return process.env.SQLITE_DATABASE;
28
+ default:
29
+ throw new Error("process.env.DB_ENGINE must be one of " + Object.values(DbEngine).join(", "));
30
+ }
31
+ }
32
+
33
+ }
34
+
35
+
36
+ export {
37
+ DbEngine,
38
+ DbSetupUtils
39
+ }
@@ -0,0 +1,14 @@
1
+ import { object, string } from "zod"
2
+
3
+ const roleSchema = object({
4
+ name: string({ required_error: "validation.required" })
5
+ .min(1, "validation.required")
6
+ .regex(/^[A-Z]/, "validation.startWithUpperCase"),
7
+
8
+
9
+ })
10
+
11
+
12
+ export default roleSchema
13
+
14
+ export {roleSchema}
@@ -0,0 +1,26 @@
1
+ import { object, string } from "zod"
2
+
3
+ export const userBaseSchema = object({
4
+ name: string({ required_error: "validation.required" })
5
+ .min(1, "validation.required"),
6
+ username: string({ required_error: "validation.required" })
7
+ .min(1, "validation.required"),
8
+ email: string({ required_error: "validation.required" })
9
+ .email("validation.email.invalid"),
10
+ role: string({ required_error: "validation.required" })
11
+ .min(1, "validation.required")
12
+
13
+ })
14
+
15
+ export const createUserSchema = userBaseSchema.extend({
16
+ password: string({ required_error: "validation.required" })
17
+ .min(1, "validation.required")
18
+ .min(8, "validation.password.min8")
19
+ .max(32, "validation.password.max32"),
20
+ });
21
+
22
+
23
+ export const editUserSchema = userBaseSchema.extend({
24
+
25
+ });
26
+
@@ -1,5 +1,5 @@
1
1
  {
2
- "_id": "646a661e44c93567c23d8d62",
2
+ "id": "646a661e44c93567c23d8d62",
3
3
  "name": "admin",
4
4
  "permissions": []
5
5
  }
@@ -1,7 +1,8 @@
1
1
  import {mongoose} from "@drax/common-back"
2
2
  import {IRole} from "../../../src/interfaces/IRole"
3
3
 
4
- const role: IRole = {
4
+
5
+ const role = {
5
6
  _id: new mongoose.Types.ObjectId("646a661e44c93567c23d8d62"),
6
7
  name: "Admin",
7
8
  permissions: [],
@@ -0,0 +1,9 @@
1
+ const role = {
2
+ id: 'b0465ce9-60f8-4ff2-bdcb-214b4bee9135',
3
+ name: "Admin",
4
+ permissions: [],
5
+ childRoles: [],
6
+ readonly: false
7
+ }
8
+
9
+ export default role
@@ -0,0 +1,9 @@
1
+ const role = {
2
+ id: 'b0465ce9-60f8-4ff2-bdcb-214b4bee8545',
3
+ name: "Operator",
4
+ permissions: [],
5
+ childRoles: [],
6
+ readonly: false
7
+ }
8
+
9
+ export default role
@@ -0,0 +1,15 @@
1
+ import {mongoose} from "@drax/common-back"
2
+
3
+ const user = {
4
+ _id: "646a661e44c93567c23d8d61",
5
+ active: true,
6
+ groups: [],
7
+ username: "root",
8
+ email: "root@example.com",
9
+ password: "12345678",
10
+ name: "root",
11
+ phone: "123456789",
12
+ role: "646a661e44c93567c23d8d62",
13
+ };
14
+
15
+ export default user
@@ -0,0 +1,16 @@
1
+ import role from "../roles/admin-sqlite-role";
2
+
3
+ const user = {
4
+ id: '539f51a6-5d40-4ef2-85c4-c580f042f422',
5
+ active: false,
6
+ groups: [],
7
+ username: "root",
8
+ email: "root@example.com",
9
+ password: "123",
10
+ name: "root",
11
+ phone: "123456789",
12
+ avatar: "asd",
13
+ role: role.id
14
+ };
15
+
16
+ export default user
@@ -1,11 +1,12 @@
1
1
  import {mongoose} from '@drax/common-back';
2
2
  import { MongoMemoryServer } from 'mongodb-memory-server';
3
3
 
4
- const mongoServer = await MongoMemoryServer.create();
4
+ let mongoServer
5
5
 
6
6
  class MongoInMemory{
7
7
 
8
8
  static async connect(){
9
+ mongoServer = await MongoMemoryServer.create();
9
10
  if(mongoServer.state == "new"){
10
11
  await mongoServer.start()
11
12
  }
@@ -0,0 +1,15 @@
1
+ import RoleService from "../../src/services/RoleService";
2
+ import {IRole} from "../../src/interfaces/IRole";
3
+ import RoleMongoRepository from "../../src/repository/mongo/RoleMongoRepository";
4
+
5
+ class RoleMongoInitializer {
6
+
7
+ static async initAdminRole(): Promise<IRole>{
8
+ const roleService = new RoleService(new RoleMongoRepository())
9
+ let roleData = (await import("../data-obj/roles/admin-mongo-role")).default
10
+ let roleCreated = await roleService.create(roleData)
11
+ return roleCreated
12
+ }
13
+ }
14
+
15
+ export default RoleMongoInitializer
@@ -0,0 +1,18 @@
1
+ import RoleService from "../../src/services/RoleService";
2
+ import {IRole} from "../../src/interfaces/IRole";
3
+ import RoleSqliteRepository from "../../src/repository/sqlite/RoleSqliteRepository";
4
+ import {UUID} from "crypto";
5
+
6
+
7
+ async function RoleSqliteInitializer(): Promise<IRole> {
8
+ const roleRespository = new RoleSqliteRepository('test.db', true)
9
+ let roleData = (await import("../data-obj/roles/admin-sqlite-role")).default
10
+
11
+ let role = await roleRespository.findById(roleData.id as UUID)
12
+ if (!role) {
13
+ role = await roleRespository.create(roleData)
14
+ }
15
+ return role
16
+ }
17
+
18
+ export default RoleSqliteInitializer
@@ -1,13 +1,14 @@
1
1
  import {describe,it, before, after} from "node:test"
2
2
  import {equal} from "assert";
3
- import RoleRepository from "../../src/repository/RoleRepository";
4
- import MongoInMemory from "../initializers/MongoInMemory";
5
- import {IRole} from "../../src/interfaces/IRole";
3
+ import RoleMongoRepository from "../../../src/repository/mongo/RoleMongoRepository";
4
+ import MongoInMemory from "../../db/MongoInMemory";
5
+ import {IRole} from "../../../src/interfaces/IRole";
6
6
  import {PaginateResult} from "mongoose";
7
+ import {IPaginateResult} from "@drax/common-back";
7
8
 
8
9
  describe("RoleRepositoryTest", function() {
9
10
 
10
- const roleReposirory = new RoleRepository()
11
+ const roleReposirory = new RoleMongoRepository()
11
12
 
12
13
  before(async () => {
13
14
  await MongoInMemory.connect()
@@ -22,54 +23,43 @@ describe("RoleRepositoryTest", function() {
22
23
  })
23
24
 
24
25
  it("Create a role successfully.", async function() {
25
- let roleData = (await import("../data-obj/roles/admin-role")).default
26
+ let roleData = (await import("../../data-obj/roles/admin-mongo-role")).default
26
27
  let roleCreated: IRole = await roleReposirory.create(roleData)
27
28
  equal(roleCreated.name,roleData.name)
28
29
  })
29
30
 
30
31
  it("Update a role successfully.", async function() {
31
- let roleData = (await import("../data-obj/roles/admin-role")).default
32
+ let roleData = (await import("../../data-obj/roles/admin-mongo-role")).default
32
33
  roleData.name = "AdminUpdated"
33
34
  let roleUpdated: IRole = await roleReposirory.update(roleData._id, roleData)
34
35
  equal(roleUpdated.name,roleData.name)
35
36
  })
36
37
 
37
38
 
38
-
39
-
40
39
  it("Find role by ID successfully.", async function() {
41
- let roleData = (await import("../data-obj/roles/admin-role")).default
40
+ let roleData = (await import("../../data-obj/roles/admin-mongo-role")).default
42
41
  let role: IRole = await roleReposirory.findById(roleData._id)
43
42
  equal(role.name,roleData.name)
44
43
  })
45
44
 
46
45
  it("Retrieving all roles successfully.", async function() {
47
- let roles: IRole[] = await roleReposirory.fetch()
46
+ let roles: IRole[] = await roleReposirory.fetchAll()
48
47
  equal(roles.length,1)
49
48
  })
50
49
 
51
50
  it("Paginate roles successfully.", async function() {
52
- let paginateRoles: PaginateResult<IRole> = await roleReposirory.paginate()
53
- equal(paginateRoles.docs.length,1)
54
- equal(paginateRoles.totalDocs,1)
51
+ let paginateRoles: IPaginateResult = await roleReposirory.paginate(1,5)
52
+ equal(paginateRoles.items.length,1)
53
+ equal(paginateRoles.total,1)
55
54
  equal(paginateRoles.page,1)
55
+ equal(paginateRoles.limit,5)
56
56
  })
57
57
 
58
58
  it("Delete a role successfully.", async function() {
59
- let roleData = (await import("../data-obj/roles/admin-role")).default
59
+ let roleData = (await import("../../data-obj/roles/admin-mongo-role")).default
60
60
  let roleDeleted: Boolean = await roleReposirory.delete(roleData._id)
61
61
  equal(roleDeleted,true)
62
62
  })
63
63
 
64
- it("Fail create role when name has two spaces", async function() {
65
- let roleData = (await import("../data-obj/roles/admin-role")).default
66
- roleData.name = "Admin Role"
67
- try{
68
- let roleCreated: IRole = await roleReposirory.create(roleData)
69
- equal("Not error throw it","Error expected")
70
- }catch (e) {
71
- equal(e.errors['name'].message,"Role name cant contain two spaces")
72
- }
73
64
 
74
- })
75
65
  })
@@ -0,0 +1,121 @@
1
+ import {before, after, describe, it, test} from "node:test"
2
+ import assert, {equal} from "assert";
3
+ import UserMongoRepository from "../../../src/repository/mongo/UserMongoRepository";
4
+ import MongoInMemory from "../../db/MongoInMemory";
5
+ import RoleMongoInitializer from "../../initializers/RoleMongoInitializer";
6
+ import {IUser} from "../../../src/interfaces/IUser";
7
+ import type {IPaginateResult} from "@drax/common-back";
8
+ import {mongoose, ValidationError} from "@drax/common-back";
9
+
10
+
11
+ test.describe("UserRepositoryTest", function () {
12
+
13
+ let userRepository = new UserMongoRepository()
14
+ let adminRole
15
+ let userAdminData
16
+
17
+ before(async () => {
18
+ await MongoInMemory.connect()
19
+ adminRole = await RoleMongoInitializer.initAdminRole()
20
+
21
+ //console.log("BEFORE USER", MongoInMemory.mongooseStatus, MongoInMemory.serverStatus)
22
+ return
23
+ })
24
+
25
+ after(async () => {
26
+ await MongoInMemory.DropAndClose()
27
+ //console.log("AFTER USER", MongoInMemory.status, MongoInMemory.serverStatus)
28
+ return
29
+ })
30
+
31
+ test("Create mongo user successfully", async function () {
32
+ userAdminData = (await import("../../data-obj/users/root-mongo-user")).default
33
+ let userCreated = await userRepository.create(userAdminData)
34
+ equal(userCreated.username, userAdminData.username)
35
+ })
36
+
37
+ test("Create mongo user fail same id", async function () {
38
+ userAdminData = (await import("../../data-obj/users/root-mongo-user")).default
39
+ let userData = {...userAdminData, email: "asd123@asd123.com", username: "asd123"}
40
+
41
+
42
+ await assert.rejects(
43
+ async () => {
44
+ await userRepository.create(userData)
45
+ },
46
+ (error) => {
47
+ assert(error instanceof ValidationError, 'Expected error to be instance of ValidationError');
48
+ assert.strictEqual(error.errors[0].field, '_id');
49
+ return true;
50
+ },
51
+ );
52
+ })
53
+
54
+ test("Create mongo user fail same username", async function () {
55
+ userAdminData = (await import("../../data-obj/users/root-mongo-user")).default
56
+ let userData = {...userAdminData, _id: new mongoose.Types.ObjectId("646a661e44c93567c23d8d69"),email: "asd123@asd123.com" }
57
+
58
+
59
+ await assert.rejects(
60
+ async () => {
61
+ await userRepository.create(userData)
62
+ },
63
+ (error) => {
64
+ assert(error instanceof ValidationError, 'Expected error to be instance of ValidationError');
65
+ assert.strictEqual(error.errors[0].field, 'username');
66
+ assert.strictEqual(error.errors[0].reason, 'validation.unique');
67
+ return true;
68
+ },
69
+ );
70
+ })
71
+
72
+ test("Create mongo user fail if role doesnt exist", async function () {
73
+ userAdminData = (await import("../../data-obj/users/root-mongo-user")).default
74
+ let userData = {...userAdminData,
75
+ _id: '646a661e44c93567c23d8d56',
76
+ email: "a456@asd567.com",
77
+ username: "rolenotexist",
78
+ role: "646a661e44c93567c23d8d89"
79
+ }
80
+
81
+ await assert.rejects(
82
+ async () => {
83
+ await userRepository.create(userData)
84
+ },
85
+ (err) => {
86
+ //console.log("error",err)
87
+ assert(err instanceof ValidationError, 'Expected error to be instance of ValidationError');
88
+ assert.strictEqual(err.errors[0].field, 'role');
89
+ assert.strictEqual(err.errors[0].reason, 'validation.notfound');
90
+ return true;
91
+ },
92
+ );
93
+ })
94
+
95
+ test("Update mongo user successfully.", async function() {
96
+ let adminData = (await import("../../data-obj/users/root-mongo-user")).default
97
+ adminData.name = "AdminUpdated"
98
+ let userUpdated: IUser = await userRepository.update(adminData._id, adminData)
99
+ equal(userUpdated.name,userUpdated.name)
100
+ })
101
+
102
+ test("Find mongo user by ID successfully", async function () {
103
+ let adminData = (await import("../../data-obj/users/root-mongo-user")).default
104
+ let userFound = await userRepository.findById(adminData._id)
105
+ equal(userFound.username, userAdminData.username)
106
+ })
107
+
108
+ test("Find mongo user by username successfully", async function () {
109
+ let adminData = (await import("../../data-obj/users/root-mongo-user")).default
110
+ let userFound = await userRepository.findByUsername(adminData.username)
111
+ equal(userFound.username, userAdminData.username)
112
+ })
113
+
114
+
115
+ test("Paginate mongo users successfully.", async function() {
116
+ let paginateUsers: IPaginateResult = await userRepository.paginate()
117
+ equal(paginateUsers.items.length,1)
118
+ equal(paginateUsers.total,1)
119
+ equal(paginateUsers.page,1)
120
+ })
121
+ })
@@ -0,0 +1,70 @@
1
+ import {describe,it, before, after} from "node:test"
2
+ import {equal} from "assert";
3
+ import {IRole} from "../../../src/interfaces/IRole";
4
+ import {IPaginateResult} from "@drax/common-back";
5
+ import RoleSqliteRepository from "../../../src/repository/sqlite/RoleSqliteRepository";
6
+ import {UUID} from "crypto";
7
+
8
+ describe("RoleRepositoryTest", function() {
9
+
10
+ const roleReposirory = new RoleSqliteRepository("test.db", false)
11
+
12
+ before(async () => {
13
+ roleReposirory.table()
14
+ return
15
+ })
16
+
17
+ after(async () => {
18
+ await roleReposirory.deleteAll()
19
+ return
20
+ })
21
+
22
+ it("Create a role successfully.", async function() {
23
+ let roleData = (await import("../../data-obj/roles/admin-sqlite-role")).default
24
+ let roleCreated: IRole = await roleReposirory.create(roleData)
25
+ equal(roleCreated.name,roleData.name)
26
+ })
27
+
28
+ it("Create a second role successfully.", async function() {
29
+ let roleData = (await import("../../data-obj/roles/operator-sqlite-role")).default
30
+ let roleCreated: IRole = await roleReposirory.create(roleData)
31
+ equal(roleCreated.name,roleData.name)
32
+ })
33
+
34
+ it("Find role by ID successfully.", async function() {
35
+ let roleData = (await import("../../data-obj/roles/admin-sqlite-role")).default
36
+ let role: IRole = await roleReposirory.findById(roleData.id as UUID)
37
+ equal(role.name,roleData.name)
38
+ })
39
+
40
+
41
+
42
+ it("Retrieving all roles successfully.", async function() {
43
+ let roles: IRole[] = await roleReposirory.fetchAll()
44
+ equal(roles.length,2)
45
+ })
46
+
47
+ it("Paginate roles successfully.", async function() {
48
+ let paginateRoles: IPaginateResult = await roleReposirory.paginate(1,5)
49
+ console.log(paginateRoles)
50
+ equal(paginateRoles.items.length,2)
51
+ equal(paginateRoles.total,2)
52
+ equal(paginateRoles.page,1)
53
+ equal(paginateRoles.limit,5)
54
+ })
55
+
56
+ it("Update a role successfully.", async function() {
57
+ let roleData = (await import("../../data-obj/roles/admin-sqlite-role")).default
58
+ roleData.name = "AdminUpdated"
59
+ let roleUpdated: IRole = await roleReposirory.update(roleData.id as UUID, roleData)
60
+ equal(roleUpdated.name,roleData.name)
61
+ })
62
+
63
+ it("Delete a role successfully.", async function() {
64
+ let roleData = (await import("../../data-obj/roles/admin-sqlite-role")).default
65
+ let roleDeleted: Boolean = await roleReposirory.delete(roleData.id as UUID)
66
+ equal(roleDeleted,true)
67
+ })
68
+
69
+
70
+ })
@@ -0,0 +1,126 @@
1
+ import {before, after, describe, it, test} from "node:test"
2
+ import assert, {equal} from "assert";
3
+ import UserSqliteRepository from "../../../src/repository/sqlite/UserSqliteRepository";
4
+ import {IUser} from "../../../src/interfaces/IUser";
5
+ import {IRole} from "../../../src/interfaces/IRole";
6
+
7
+ import {ValidationError} from "@drax/common-back";
8
+ import {UUID} from "crypto";
9
+ import RoleSqliteInitializer from "../../initializers/RoleSqliteInitializer";
10
+
11
+ test.describe("UserRepositoryTest", function () {
12
+
13
+ let userRepository = new UserSqliteRepository("test.db", false)
14
+ let userAdminData: any
15
+ let adminRole: IRole
16
+
17
+ before(async () => {
18
+ userRepository.table()
19
+ adminRole = (await import("../../data-obj/roles/admin-sqlite-role")).default
20
+ adminRole = await RoleSqliteInitializer()
21
+ return
22
+ })
23
+
24
+ after(async () => {
25
+ await userRepository.deleteAll()
26
+ return
27
+ })
28
+
29
+ test("Create sqlite user successfully", async function () {
30
+ userAdminData = (await import("../../data-obj/users/root-sqlite-user")).default
31
+ let userCreated:IUser = await userRepository.create(userAdminData)
32
+ equal(userCreated.username, userAdminData.username)
33
+ })
34
+
35
+ test("Find user by ID successfully", async function () {
36
+ userAdminData = (await import("../../data-obj/users/root-sqlite-user")).default
37
+ let userFound = await userRepository.findById(userAdminData.id as UUID)
38
+ equal(userFound.username, userAdminData.username)
39
+ //ROLE POPULATED
40
+ let rolefound = userFound.role as IRole
41
+ equal(rolefound.name, adminRole.name)
42
+ })
43
+
44
+ test("Create sqlite user fail same id", async function () {
45
+ userAdminData = (await import("../../data-obj/users/root-sqlite-user")).default
46
+ let userData = {...userAdminData, email: "asd123@asd123.com", username: "asd123"}
47
+
48
+ await assert.rejects(
49
+ async () => {
50
+ await userRepository.create(userData)
51
+ },
52
+ (err) => {
53
+ assert(err instanceof ValidationError, 'Expected error to be instance of ValidationError');
54
+ assert.strictEqual(err.errors[0].field, 'id');
55
+ assert.strictEqual(err.errors[0].reason, 'validation.unique');
56
+ return true;
57
+ },
58
+ );
59
+ })
60
+
61
+ test("Create sqlite user fail same username", async function () {
62
+ userAdminData = (await import("../../data-obj/users/root-sqlite-user")).default
63
+ let userData = {...userAdminData, id: '539f51a6-5d40-4ef2-85c4-f480f042f422', email: "asd123@asd123.com" }
64
+
65
+ await assert.rejects(
66
+ async () => {
67
+ await userRepository.create(userData)
68
+ },
69
+ (err) => {
70
+ assert(err instanceof ValidationError, 'Expected error to be instance of ValidationError');
71
+ assert.strictEqual(err.errors[0].field, 'username');
72
+ assert.strictEqual(err.errors[0].reason, 'validation.unique');
73
+ return true;
74
+ },
75
+ );
76
+ })
77
+
78
+ test("Create sqlite user fail if role doesnt exist", async function () {
79
+ userAdminData = (await import("../../data-obj/users/root-sqlite-user")).default
80
+ let userData = {...userAdminData,
81
+ id: '539f51a6-5d40-4ef2-85c4-f480f042f422',
82
+ email: "a456@asd567.com",
83
+ username: "rolenotexist",
84
+ role: "notexist"
85
+ }
86
+
87
+ await assert.rejects(
88
+ async () => {
89
+ await userRepository.create(userData)
90
+ },
91
+ (err) => {
92
+ assert(err instanceof ValidationError, 'Expected error to be instance of ValidationError');
93
+ assert.strictEqual(err.errors[0].field, 'role');
94
+ assert.strictEqual(err.errors[0].reason, 'validation.notfound');
95
+ return true;
96
+ },
97
+ );
98
+ })
99
+
100
+ test("Update a user successfully.", async function() {
101
+ userAdminData = (await import("../../data-obj/users/root-sqlite-user")).default
102
+ let userAdminDataUpdated = {...userAdminData, phone: "66666666"}
103
+ let userUpdated: IUser = await userRepository.update(userAdminDataUpdated.id as UUID, userAdminDataUpdated)
104
+ equal(userUpdated.phone,userUpdated.phone)
105
+ })
106
+
107
+
108
+
109
+ test("Find user by username successfully", async function () {
110
+ userAdminData = (await import("../../data-obj/users/root-sqlite-user")).default
111
+ let userFound = await userRepository.findByUsername(userAdminData.username)
112
+ equal(userFound.username, userAdminData.username)
113
+ equal(userFound.id, userAdminData.id)
114
+ })
115
+
116
+ test("Paginate users successfully.", async function() {
117
+ let paginateUsers = await userRepository.paginate()
118
+
119
+ equal(paginateUsers.total,1)
120
+ equal(paginateUsers.page,1)
121
+ equal(paginateUsers.limit,5)
122
+ equal(paginateUsers.items.length,1)
123
+ equal(paginateUsers.items[0].role.name,adminRole.name)
124
+ })
125
+
126
+ })
@@ -1,5 +1,5 @@
1
1
  import {describe, it, before, after} from "node:test"
2
- import MongoInMemory from "../initializers/MongoInMemory";
2
+ import MongoInMemory from "../db/MongoInMemory";
3
3
 
4
4
 
5
5
 
@@ -18,8 +18,8 @@ describe("MockTest", function () {
18
18
  })
19
19
 
20
20
 
21
- it("should create MOCK", function () {
22
- console.log("should create mock")
21
+ it("should createUser MOCK", function () {
22
+ console.log("should createUser mock")
23
23
 
24
24
  })
25
25
  })
@@ -1,13 +1,13 @@
1
1
  import {describe,it, before, after} from "node:test"
2
2
  import assert from "assert";
3
3
  import RoleService from "../../src/services/RoleService";
4
- import MongoInMemory from "../initializers/MongoInMemory";
4
+ import MongoInMemory from "../db/MongoInMemory";
5
5
  import {IRole} from "../../src/interfaces/IRole";
6
- import RoleRepository from "../../src/repository/RoleRepository";
6
+ import RoleMongoRepository from "../../src/repository/mongo/RoleMongoRepository";
7
7
  import {IRoleRepository} from "../../src/interfaces/IRoleRepository";
8
8
 
9
9
  describe("RoleServiceTest", function() {
10
- let roleRepository: IRoleRepository = new RoleRepository()
10
+ let roleRepository: IRoleRepository = new RoleMongoRepository()
11
11
  let roleService = new RoleService(roleRepository)
12
12
  before(async () => {
13
13
  await MongoInMemory.connect()
@@ -21,8 +21,8 @@ describe("RoleServiceTest", function() {
21
21
  return
22
22
  })
23
23
 
24
- it("should create role", async function() {
25
- let roleData = (await import("../data-obj/roles/admin-role")).default
24
+ it("should createUser role", async function() {
25
+ let roleData = (await import("../data-obj/roles/admin-mongo-role")).default
26
26
  let roleCreated: IRole = await roleService.create(roleData)
27
27
 
28
28
  assert.equal(roleCreated.name,roleData.name)