@drax/identity-back 0.0.9 → 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.
- package/dist/errors/BadCredentialsError.js +10 -0
- package/dist/errors/UnauthorizedError.js +10 -0
- package/dist/factory/RoleServiceFactory.js +16 -3
- package/dist/factory/UserServiceFactory.js +17 -3
- package/dist/graphql/resolvers/role.resolvers.js +98 -11
- package/dist/graphql/resolvers/user.resolvers.js +134 -15
- package/dist/graphql/types/role.graphql +6 -4
- package/dist/graphql/types/user.graphql +36 -9
- package/dist/i18n/messages/validation-i18n.js +21 -0
- package/dist/index.js +22 -7
- package/dist/interfaces/IID.js +1 -0
- package/dist/interfaces/IJwtUser.js +1 -0
- package/dist/middleware/jwtMiddleware.js +19 -0
- package/dist/middleware/rbacMiddleware.js +36 -0
- package/dist/models/RoleModel.js +0 -8
- package/dist/models/UserModel.js +1 -2
- package/dist/permissions/IdentityPermissions.js +16 -0
- package/dist/rbac/Rbac.js +20 -0
- package/dist/repository/mongo/RoleMongoRepository.js +41 -0
- package/dist/repository/mongo/UserMongoRepository.js +82 -0
- package/dist/repository/sqlite/RoleSqliteRepository.js +115 -0
- package/dist/repository/sqlite/UserSqliteRepository.js +157 -0
- package/dist/routes/RoleRoutes.js +145 -0
- package/dist/routes/UserRoutes.js +199 -0
- package/dist/routes/authRoutes.js +12 -4
- package/dist/services/AuthService.js +0 -15
- package/dist/services/PermissionService.js +19 -0
- package/dist/services/RoleService.js +48 -16
- package/dist/services/UserService.js +82 -23
- package/dist/utils/AuthUtils.js +20 -6
- package/dist/utils/DbSetupUtils.js +28 -0
- package/dist/zod/RoleZod.js +8 -0
- package/dist/zod/UserZod.js +18 -0
- package/package.json +17 -10
- package/src/errors/BadCredentialsError.ts +13 -0
- package/src/errors/UnauthorizedError.ts +13 -0
- package/src/factory/RoleServiceFactory.ts +20 -3
- package/src/factory/UserServiceFactory.ts +20 -3
- package/src/graphql/resolvers/role.resolvers.ts +92 -11
- package/src/graphql/resolvers/user.resolvers.ts +128 -15
- package/src/graphql/types/role.graphql +6 -4
- package/src/graphql/types/user.graphql +36 -9
- package/src/index.ts +50 -10
- package/src/interfaces/IID.ts +5 -0
- package/src/interfaces/IJwtUser.ts +7 -0
- package/src/interfaces/IRole.ts +15 -5
- package/src/interfaces/IRoleRepository.ts +8 -5
- package/src/interfaces/IUser.ts +30 -6
- package/src/interfaces/IUserGroup.ts +2 -1
- package/src/interfaces/IUserRepository.ts +11 -6
- package/src/middleware/jwtMiddleware.ts +22 -0
- package/src/middleware/rbacMiddleware.ts +40 -0
- package/src/models/RoleModel.ts +0 -9
- package/src/models/UserModel.ts +1 -2
- package/src/permissions/IdentityPermissions.ts +20 -0
- package/src/rbac/Rbac.ts +31 -0
- package/src/repository/mongo/RoleMongoRepository.ts +57 -0
- package/src/repository/mongo/UserMongoRepository.ts +104 -0
- package/src/repository/sqlite/RoleSqliteRepository.ts +151 -0
- package/src/repository/sqlite/UserSqliteRepository.ts +194 -0
- package/src/routes/RoleRoutes.ts +141 -0
- package/src/routes/UserRoutes.ts +198 -0
- package/src/services/PermissionService.ts +26 -0
- package/src/services/RoleService.ts +46 -21
- package/src/services/UserService.ts +86 -28
- package/src/utils/AuthUtils.ts +22 -7
- package/src/utils/DbSetupUtils.ts +39 -0
- package/src/zod/RoleZod.ts +14 -0
- package/src/zod/UserZod.ts +26 -0
- package/test/data-json/roles/admin-role.json +1 -1
- package/test/data-obj/roles/{admin-role.ts → admin-mongo-role.ts} +2 -1
- package/test/data-obj/roles/admin-sqlite-role.ts +9 -0
- package/test/data-obj/roles/operator-sqlite-role.ts +9 -0
- package/test/data-obj/users/root-mongo-user.ts +15 -0
- package/test/data-obj/users/root-sqlite-user.ts +16 -0
- package/test/{initializers → db}/MongoInMemory.ts +2 -1
- package/test/initializers/RoleMongoInitializer.ts +15 -0
- package/test/initializers/RoleSqliteInitializer.ts +18 -0
- package/test/repository/{role-repository.test.ts → mongo/role-mongo-repository.test.ts} +14 -24
- package/test/repository/mongo/user-mongo-repository.test.ts +121 -0
- package/test/repository/sqlite/role-sqlite-repository.test.ts +70 -0
- package/test/repository/sqlite/user-sqlite-repository.test.ts +126 -0
- package/test/service/mock-service.test.ts +3 -3
- package/test/service/role-service.test.ts +5 -5
- package/test/service/user-service.test.ts +42 -15
- package/test.db +0 -0
- package/tsconfig.json +16 -3
- package/tsconfig.tsbuildinfo +1 -1
- package/types/errors/BadCredentialsError.d.ts +6 -0
- package/types/errors/BadCredentialsError.d.ts.map +1 -0
- package/types/errors/UnauthorizedError.d.ts +6 -0
- package/types/errors/UnauthorizedError.d.ts.map +1 -0
- package/types/factory/RoleServiceFactory.d.ts +2 -2
- package/types/factory/RoleServiceFactory.d.ts.map +1 -1
- package/types/factory/UserServiceFactory.d.ts +2 -2
- package/types/factory/UserServiceFactory.d.ts.map +1 -1
- package/types/graphql/resolvers/role.resolvers.d.ts +24 -7
- package/types/graphql/resolvers/role.resolvers.d.ts.map +1 -1
- package/types/graphql/resolvers/user.resolvers.d.ts +38 -7
- package/types/graphql/resolvers/user.resolvers.d.ts.map +1 -1
- package/types/i18n/messages/validation-i18n.d.ts +4 -0
- package/types/i18n/messages/validation-i18n.d.ts.map +1 -0
- package/types/index.d.ts +21 -5
- package/types/index.d.ts.map +1 -1
- package/types/interfaces/IID.d.ts +6 -0
- package/types/interfaces/IID.d.ts.map +1 -0
- package/types/interfaces/IJwtUser.d.ts +7 -0
- package/types/interfaces/IJwtUser.d.ts.map +1 -0
- package/types/interfaces/IRole.d.ts +13 -6
- package/types/interfaces/IRole.d.ts.map +1 -1
- package/types/interfaces/IRoleRepository.d.ts +8 -4
- package/types/interfaces/IRoleRepository.d.ts.map +1 -1
- package/types/interfaces/IUser.d.ts +29 -8
- package/types/interfaces/IUser.d.ts.map +1 -1
- package/types/interfaces/IUserGroup.d.ts +3 -2
- package/types/interfaces/IUserGroup.d.ts.map +1 -1
- package/types/interfaces/IUserRepository.d.ts +10 -6
- package/types/interfaces/IUserRepository.d.ts.map +1 -1
- package/types/middleware/jwtMiddleware.d.ts +4 -0
- package/types/middleware/jwtMiddleware.d.ts.map +1 -0
- package/types/middleware/rbacMiddleware.d.ts +4 -0
- package/types/middleware/rbacMiddleware.d.ts.map +1 -0
- package/types/models/RoleModel.d.ts +8 -8
- package/types/models/RoleModel.d.ts.map +1 -1
- package/types/models/UserGroupModel.d.ts +8 -8
- package/types/models/UserGroupModel.d.ts.map +1 -1
- package/types/models/UserModel.d.ts +8 -8
- package/types/models/UserModel.d.ts.map +1 -1
- package/types/permissions/IdentityPermissions.d.ts +16 -0
- package/types/permissions/IdentityPermissions.d.ts.map +1 -0
- package/types/rbac/Rbac.d.ts +12 -0
- package/types/rbac/Rbac.d.ts.map +1 -0
- package/types/repository/mongo/RoleMongoRepository.d.ts +14 -0
- package/types/repository/mongo/RoleMongoRepository.d.ts.map +1 -0
- package/types/repository/mongo/UserMongoRepository.d.ts +18 -0
- package/types/repository/mongo/UserMongoRepository.d.ts.map +1 -0
- package/types/repository/sqlite/RoleSqliteRepository.d.ts +19 -0
- package/types/repository/sqlite/RoleSqliteRepository.d.ts.map +1 -0
- package/types/repository/sqlite/UserSqliteRepository.d.ts +24 -0
- package/types/repository/sqlite/UserSqliteRepository.d.ts.map +1 -0
- package/types/routes/RoleRoutes.d.ts +4 -0
- package/types/routes/RoleRoutes.d.ts.map +1 -0
- package/types/routes/UserRoutes.d.ts +4 -0
- package/types/routes/UserRoutes.d.ts.map +1 -0
- package/types/routes/authRoutes.d.ts.map +1 -1
- package/types/services/AuthService.d.ts +0 -3
- package/types/services/AuthService.d.ts.map +1 -1
- package/types/services/PermissionService.d.ts +9 -0
- package/types/services/PermissionService.d.ts.map +1 -0
- package/types/services/RoleService.d.ts +6 -8
- package/types/services/RoleService.d.ts.map +1 -1
- package/types/services/UserService.d.ts +13 -11
- package/types/services/UserService.d.ts.map +1 -1
- package/types/utils/AuthUtils.d.ts +5 -2
- package/types/utils/AuthUtils.d.ts.map +1 -1
- package/types/utils/DbSetupUtils.d.ts +10 -0
- package/types/utils/DbSetupUtils.d.ts.map +1 -0
- package/types/zod/RoleZod.d.ts +10 -0
- package/types/zod/RoleZod.d.ts.map +1 -0
- package/types/zod/UserZod.d.ts +53 -0
- package/types/zod/UserZod.d.ts.map +1 -0
- package/dist/factory/AuthServiceFactory.js +0 -8
- package/dist/graphql/resolvers/auth.resolvers.js +0 -16
- package/dist/graphql/types/auth.graphql +0 -12
- package/dist/repository/RoleRepository.js +0 -29
- package/dist/repository/UserRepository.js +0 -33
- package/src/factory/AuthServiceFactory.ts +0 -10
- package/src/graphql/resolvers/auth.resolvers.ts +0 -20
- package/src/graphql/types/auth.graphql +0 -12
- package/src/repository/RoleRepository.ts +0 -42
- package/src/repository/UserRepository.ts +0 -47
- package/src/routes/authRoutes.ts +0 -22
- package/src/services/AuthService.ts +0 -29
- package/test/data-obj/users/root-user.ts +0 -15
- package/test/initializers/MongoInMemory.mjs +0 -34
- package/test/initializers/RoleInitializer.mjs +0 -11
- package/test/initializers/RoleInitializer.ts +0 -15
- package/test/repository/user-repository.test.ts +0 -54
- package/types/factory/AuthServiceFactory.d.ts +0 -4
- package/types/factory/AuthServiceFactory.d.ts.map +0 -1
- package/types/graphql/resolvers/auth.resolvers.d.ts +0 -12
- package/types/graphql/resolvers/auth.resolvers.d.ts.map +0 -1
- package/types/repository/RoleRepository.d.ts +0 -41
- package/types/repository/RoleRepository.d.ts.map +0 -1
- package/types/repository/UserRepository.d.ts +0 -40
- package/types/repository/UserRepository.d.ts.map +0 -1
- package/types/routes/AuthRoutes.d.ts +0 -3
- 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
|
+
|
|
@@ -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
|
-
|
|
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
|
|
4
|
-
import MongoInMemory from "
|
|
5
|
-
import {IRole} from "
|
|
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
|
|
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("
|
|
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("
|
|
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("
|
|
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.
|
|
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:
|
|
53
|
-
equal(paginateRoles.
|
|
54
|
-
equal(paginateRoles.
|
|
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("
|
|
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 "../
|
|
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
|
|
22
|
-
console.log("should
|
|
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 "../
|
|
4
|
+
import MongoInMemory from "../db/MongoInMemory";
|
|
5
5
|
import {IRole} from "../../src/interfaces/IRole";
|
|
6
|
-
import
|
|
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
|
|
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
|
|
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)
|