@tomei/sso 0.64.0-staging.1 → 0.64.0-staging.2
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/.commitlintrc.json +22 -22
- package/.gitlab-ci.yml +16 -16
- package/.husky/commit-msg +9 -9
- package/.husky/pre-commit +7 -7
- package/.prettierrc +4 -4
- package/Jenkinsfile +57 -57
- package/README.md +23 -23
- package/__tests__/unit/components/group/group.spec.ts +79 -79
- package/__tests__/unit/components/group-object-privilege/group-object-privilege.spec.ts +88 -88
- package/__tests__/unit/components/group-privilege/group-privilege.spec.ts +68 -68
- package/__tests__/unit/components/group-reporting-user/group-reporting-user.spec.ts +66 -66
- package/__tests__/unit/components/group-system-access/group-system-access.spec.ts +83 -83
- package/__tests__/unit/components/login-user/l.spec.ts +746 -746
- package/__tests__/unit/components/login-user/login.spec.ts +1164 -1164
- package/__tests__/unit/components/password-hash/password-hash.service.spec.ts +31 -31
- package/__tests__/unit/components/system/system.spec.ts +254 -254
- package/__tests__/unit/components/system-privilege/system-privilege.spec.ts +83 -83
- package/__tests__/unit/components/user-group/user-group.spec.ts +86 -86
- package/__tests__/unit/components/user-object-privilege/user-object-privilege.spec.ts +78 -78
- package/__tests__/unit/components/user-privilege/user-privilege.spec.ts +72 -72
- package/__tests__/unit/components/user-system-access/user-system-access.spec.ts +89 -89
- package/__tests__/unit/redis-client/redis.service.spec.ts +23 -23
- package/__tests__/unit/session/session.service.spec.ts +47 -47
- package/__tests__/unit/system-privilege/system-privilage.spec.ts +91 -91
- package/create-sso-user.sql +39 -39
- package/dist/src/components/login-user/user.d.ts +22 -3
- package/dist/src/components/login-user/user.js +53 -14
- package/dist/src/components/login-user/user.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/eslint.config.mjs +58 -58
- package/jest.config.js +14 -14
- package/migrations/20240314080602-create-user-table.js +124 -124
- package/migrations/20240314080603-create-user-group-table.js +85 -85
- package/migrations/20240314080604-create-user-user-group-table.js +55 -55
- package/migrations/20240314080605-create-login-history-table.js +53 -53
- package/migrations/20240527064925-create-system-table.js +78 -78
- package/migrations/20240527064926-create-system-privilege-table.js +71 -71
- package/migrations/20240527065342-create-group-table.js +93 -93
- package/migrations/20240527065633-create-group-reporting-user-table.js +76 -76
- package/migrations/20240528011551-create-group-system-access-table.js +72 -72
- package/migrations/20240528023018-user-system-access-table.js +75 -75
- package/migrations/20240528032229-user-privilege-table.js +76 -76
- package/migrations/20240528063003-create-group-privilege-table.js +76 -76
- package/migrations/20240528063051-create-group-object-privilege-table.js +84 -84
- package/migrations/20240528063107-create-user-object-privilege-table.js +84 -84
- package/migrations/20240528063108-create-api-key-table.js +85 -85
- package/migrations/20241104104802-create-building-table.js +95 -95
- package/migrations/20250108091132-add-area-manager-user-id-to-building-table.js +14 -14
- package/migrations/20250108091133-add-passcode-to-user-table.js +36 -36
- package/migrations/20250210115636-create-user-reporting-hierarchy.js +76 -76
- package/migrations/20250326043818-crate-user-password-history.js +42 -42
- package/migrations/20250610070720-added-MFBypassYN-to-sso-user.js +30 -30
- package/package.json +87 -87
- package/sampledotenv +7 -7
- package/src/components/login-user/user.ts +53 -16
- package/tsconfig.build.json +5 -5
- package/tsconfig.json +23 -23
- package/dist/__tests__/unit/components/group-privilege/group-privilege.test.d.ts +0 -1
- package/dist/__tests__/unit/components/group-privilege/group-privilege.test.js +0 -71
- package/dist/__tests__/unit/components/group-privilege/group-privilege.test.js.map +0 -1
- package/dist/__tests__/unit/components/login-user/login-user.spec.d.ts +0 -0
- package/dist/__tests__/unit/components/login-user/login-user.spec.js +0 -6
- package/dist/__tests__/unit/components/login-user/login-user.spec.js.map +0 -1
package/package.json
CHANGED
@@ -1,87 +1,87 @@
|
|
1
|
-
{
|
2
|
-
"name": "@tomei/sso",
|
3
|
-
"version": "0.64.0-staging.
|
4
|
-
"description": "Tomei SSO Package",
|
5
|
-
"main": "dist/index.js",
|
6
|
-
"scripts": {
|
7
|
-
"start:dev": "tsc -w",
|
8
|
-
"build": "tsc",
|
9
|
-
"prepare": "husky",
|
10
|
-
"format": "prettier --write \"src/**/*.ts\"",
|
11
|
-
"lint": "npx eslint . --fix",
|
12
|
-
"test": "jest --forceExit --detectOpenHandles --coverage"
|
13
|
-
},
|
14
|
-
"repository": {
|
15
|
-
"type": "git",
|
16
|
-
"url": "git+ssh://git@gitlab.com/tomei-package/sso.git"
|
17
|
-
},
|
18
|
-
"keywords": [
|
19
|
-
"tomei",
|
20
|
-
"sso"
|
21
|
-
],
|
22
|
-
"author": "Tomei",
|
23
|
-
"license": "ISC",
|
24
|
-
"bugs": {
|
25
|
-
"url": "https://gitlab.com/tomei-package/sso/issues"
|
26
|
-
},
|
27
|
-
"homepage": "https://gitlab.com/tomei-package/sso#readme",
|
28
|
-
"devDependencies": {
|
29
|
-
"@commitlint/cli": "^19.8.1",
|
30
|
-
"@commitlint/config-conventional": "^19.8.1",
|
31
|
-
"@eslint/js": "^9.35.0",
|
32
|
-
"@tsconfig/node18": "^18.2.4",
|
33
|
-
"@types/bcrypt": "^6.0.0",
|
34
|
-
"@types/jest": "^30.0.0",
|
35
|
-
"@types/node": "^24.3.1",
|
36
|
-
"@types/validator": "^13.15.3",
|
37
|
-
"@typescript-eslint/eslint-plugin": "^8.43.0",
|
38
|
-
"@typescript-eslint/parser": "^8.43.0",
|
39
|
-
"cls-hooked": "^4.2.2",
|
40
|
-
"dotenv": "^17.2.2",
|
41
|
-
"eslint": "^9.35.0",
|
42
|
-
"eslint-config-prettier": "^10.1.8",
|
43
|
-
"eslint-plugin-import": "^2.32.0",
|
44
|
-
"eslint-plugin-prettier": "^5.5.4",
|
45
|
-
"globals": "^16.4.0",
|
46
|
-
"husky": "^9.1.7",
|
47
|
-
"jest": "^30.1.3",
|
48
|
-
"jest-mock-extended": "^4.0.0",
|
49
|
-
"jest-sonar-reporter": "^2.0.0",
|
50
|
-
"lint-staged": "^16.1.6",
|
51
|
-
"prettier": "^3.6.2",
|
52
|
-
"redis-mock": "^0.56.3",
|
53
|
-
"ts-jest": "^29.4.1",
|
54
|
-
"ts-node": "^10.9.2",
|
55
|
-
"tsc-watch": "^7.1.1",
|
56
|
-
"tsconfig-paths": "^4.2.0",
|
57
|
-
"typescript": "^5.9.2"
|
58
|
-
},
|
59
|
-
"publishConfig": {
|
60
|
-
"access": "public"
|
61
|
-
},
|
62
|
-
"peerDependencies": {
|
63
|
-
"@tomei/activity-history": "^0.4.4",
|
64
|
-
"@tomei/config": "^0.3.22",
|
65
|
-
"@tomei/general": "^0.21.9",
|
66
|
-
"@tomei/mailer": "^0.6.0",
|
67
|
-
"argon2": "^0.44.0",
|
68
|
-
"redis": "^5.8.2",
|
69
|
-
"reflect-metadata": "^0.2.2",
|
70
|
-
"sequelize": "^6.37.7",
|
71
|
-
"sequelize-cli": "^6.6.3",
|
72
|
-
"sequelize-typescript": "^2.1.6",
|
73
|
-
"speakeasy": "^2.0.0",
|
74
|
-
"uuid": "^11.1.0"
|
75
|
-
},
|
76
|
-
"lint-staged": {
|
77
|
-
"*/**/*.{js,ts,tsx}": [
|
78
|
-
"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
|
79
|
-
"eslint \"{src,apps,libs,test}/**/*.ts\" --fix"
|
80
|
-
]
|
81
|
-
},
|
82
|
-
"jestSonar": {
|
83
|
-
"reportPath": "coverage",
|
84
|
-
"reportFile": "test-report.xml",
|
85
|
-
"indent": 2
|
86
|
-
}
|
87
|
-
}
|
1
|
+
{
|
2
|
+
"name": "@tomei/sso",
|
3
|
+
"version": "0.64.0-staging.2",
|
4
|
+
"description": "Tomei SSO Package",
|
5
|
+
"main": "dist/index.js",
|
6
|
+
"scripts": {
|
7
|
+
"start:dev": "tsc -w",
|
8
|
+
"build": "tsc",
|
9
|
+
"prepare": "husky",
|
10
|
+
"format": "prettier --write \"src/**/*.ts\"",
|
11
|
+
"lint": "npx eslint . --fix",
|
12
|
+
"test": "jest --forceExit --detectOpenHandles --coverage"
|
13
|
+
},
|
14
|
+
"repository": {
|
15
|
+
"type": "git",
|
16
|
+
"url": "git+ssh://git@gitlab.com/tomei-package/sso.git"
|
17
|
+
},
|
18
|
+
"keywords": [
|
19
|
+
"tomei",
|
20
|
+
"sso"
|
21
|
+
],
|
22
|
+
"author": "Tomei",
|
23
|
+
"license": "ISC",
|
24
|
+
"bugs": {
|
25
|
+
"url": "https://gitlab.com/tomei-package/sso/issues"
|
26
|
+
},
|
27
|
+
"homepage": "https://gitlab.com/tomei-package/sso#readme",
|
28
|
+
"devDependencies": {
|
29
|
+
"@commitlint/cli": "^19.8.1",
|
30
|
+
"@commitlint/config-conventional": "^19.8.1",
|
31
|
+
"@eslint/js": "^9.35.0",
|
32
|
+
"@tsconfig/node18": "^18.2.4",
|
33
|
+
"@types/bcrypt": "^6.0.0",
|
34
|
+
"@types/jest": "^30.0.0",
|
35
|
+
"@types/node": "^24.3.1",
|
36
|
+
"@types/validator": "^13.15.3",
|
37
|
+
"@typescript-eslint/eslint-plugin": "^8.43.0",
|
38
|
+
"@typescript-eslint/parser": "^8.43.0",
|
39
|
+
"cls-hooked": "^4.2.2",
|
40
|
+
"dotenv": "^17.2.2",
|
41
|
+
"eslint": "^9.35.0",
|
42
|
+
"eslint-config-prettier": "^10.1.8",
|
43
|
+
"eslint-plugin-import": "^2.32.0",
|
44
|
+
"eslint-plugin-prettier": "^5.5.4",
|
45
|
+
"globals": "^16.4.0",
|
46
|
+
"husky": "^9.1.7",
|
47
|
+
"jest": "^30.1.3",
|
48
|
+
"jest-mock-extended": "^4.0.0",
|
49
|
+
"jest-sonar-reporter": "^2.0.0",
|
50
|
+
"lint-staged": "^16.1.6",
|
51
|
+
"prettier": "^3.6.2",
|
52
|
+
"redis-mock": "^0.56.3",
|
53
|
+
"ts-jest": "^29.4.1",
|
54
|
+
"ts-node": "^10.9.2",
|
55
|
+
"tsc-watch": "^7.1.1",
|
56
|
+
"tsconfig-paths": "^4.2.0",
|
57
|
+
"typescript": "^5.9.2"
|
58
|
+
},
|
59
|
+
"publishConfig": {
|
60
|
+
"access": "public"
|
61
|
+
},
|
62
|
+
"peerDependencies": {
|
63
|
+
"@tomei/activity-history": "^0.4.4",
|
64
|
+
"@tomei/config": "^0.3.22",
|
65
|
+
"@tomei/general": "^0.21.9",
|
66
|
+
"@tomei/mailer": "^0.6.0",
|
67
|
+
"argon2": "^0.44.0",
|
68
|
+
"redis": "^5.8.2",
|
69
|
+
"reflect-metadata": "^0.2.2",
|
70
|
+
"sequelize": "^6.37.7",
|
71
|
+
"sequelize-cli": "^6.6.3",
|
72
|
+
"sequelize-typescript": "^2.1.6",
|
73
|
+
"speakeasy": "^2.0.0",
|
74
|
+
"uuid": "^11.1.0"
|
75
|
+
},
|
76
|
+
"lint-staged": {
|
77
|
+
"*/**/*.{js,ts,tsx}": [
|
78
|
+
"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
|
79
|
+
"eslint \"{src,apps,libs,test}/**/*.ts\" --fix"
|
80
|
+
]
|
81
|
+
},
|
82
|
+
"jestSonar": {
|
83
|
+
"reportPath": "coverage",
|
84
|
+
"reportFile": "test-report.xml",
|
85
|
+
"indent": 2
|
86
|
+
}
|
87
|
+
}
|
package/sampledotenv
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
DATABASE_URL=
|
2
|
-
SHADOW_DATABASE_URL=
|
3
|
-
REDIS_URL=
|
4
|
-
REDIS_PASSWORD=
|
5
|
-
SMTP_HOST=
|
6
|
-
SMTP_PORT=
|
7
|
-
EMAIL_SENDER=
|
1
|
+
DATABASE_URL=
|
2
|
+
SHADOW_DATABASE_URL=
|
3
|
+
REDIS_URL=
|
4
|
+
REDIS_PASSWORD=
|
5
|
+
SMTP_HOST=
|
6
|
+
SMTP_PORT=
|
7
|
+
EMAIL_SENDER=
|
8
8
|
EMAIL_PASSWORD=
|
@@ -585,7 +585,7 @@ export class User extends UserBase {
|
|
585
585
|
},
|
586
586
|
});
|
587
587
|
if (!system) {
|
588
|
-
throw new Error('
|
588
|
+
throw new Error('Access denied: invalid or unauthorized system.');
|
589
589
|
}
|
590
590
|
|
591
591
|
// 1.5: Instantiate new PasswordHashService object and call PasswordHashService.verify method to check whether the param.Password is correct.
|
@@ -614,12 +614,14 @@ export class User extends UserBase {
|
|
614
614
|
await User.releaseLock(this.UserId, dbTransaction);
|
615
615
|
this.Status = UserStatus.ACTIVE;
|
616
616
|
} else {
|
617
|
-
throw new Error(
|
617
|
+
throw new Error(
|
618
|
+
'Your account has been locked. Please contact the administrator for assistance.',
|
619
|
+
);
|
618
620
|
}
|
619
621
|
}
|
620
622
|
} catch (error) {
|
621
623
|
await this.incrementFailedLoginAttemptCount(dbTransaction);
|
622
|
-
throw
|
624
|
+
throw error;
|
623
625
|
}
|
624
626
|
|
625
627
|
// 2.1: Call alertNewLogin to check whether the ip used is new ip and alert the user if it's new.
|
@@ -1732,7 +1734,7 @@ export class User extends UserBase {
|
|
1732
1734
|
throw new ClassError(
|
1733
1735
|
'LoginUser',
|
1734
1736
|
'LoginUserErrMsg0X',
|
1735
|
-
'
|
1737
|
+
'Your account has been locked due to too many failed login attempts, please contact IT Support for instructions on how to unlock your account.',
|
1736
1738
|
);
|
1737
1739
|
}
|
1738
1740
|
}
|
@@ -1818,7 +1820,7 @@ export class User extends UserBase {
|
|
1818
1820
|
|
1819
1821
|
// Part 2: Retrieve Parent Group System Access If Applicable
|
1820
1822
|
// 2.1 Check if Params.group.InheritParentSystemAccessYN is "Y" and Params.group.ParentGroupCode is not empty
|
1821
|
-
if (group.
|
1823
|
+
if (group.InheritParentSystemAccessYN === 'Y' && group.ParentGroupCode) {
|
1822
1824
|
const GroupCode = group.ParentGroupCode;
|
1823
1825
|
const parentGroup = await User._GroupRepo.findByPk(
|
1824
1826
|
GroupCode,
|
@@ -2003,15 +2005,31 @@ export class User extends UserBase {
|
|
2003
2005
|
}
|
2004
2006
|
|
2005
2007
|
// 3. Verify the mfaToken by calling speakeasy.totp.verify
|
2006
|
-
const
|
2008
|
+
const isCurrentValid = await speakeasy.totp.verify({
|
2007
2009
|
secret: userMFAConfig.totp.secret,
|
2008
2010
|
encoding: 'base32',
|
2009
2011
|
token: mfaToken,
|
2012
|
+
window: 0, // strict current time window
|
2010
2013
|
});
|
2014
|
+
if (!isCurrentValid) {
|
2015
|
+
const isExpired = await speakeasy.totp.verify({
|
2016
|
+
secret: userMFAConfig.totp.secret,
|
2017
|
+
encoding: 'base32',
|
2018
|
+
token: mfaToken,
|
2019
|
+
window: 2, // allow slight leeway: previous or next 2 time steps
|
2020
|
+
});
|
2011
2021
|
|
2012
|
-
|
2013
|
-
|
2014
|
-
|
2022
|
+
if (isExpired) {
|
2023
|
+
return {
|
2024
|
+
success: false,
|
2025
|
+
reason: 'MFA token has expired. Please try again.',
|
2026
|
+
};
|
2027
|
+
} else {
|
2028
|
+
return {
|
2029
|
+
success: false,
|
2030
|
+
reason: 'Invalid MFA token. Check your authenticator app.',
|
2031
|
+
};
|
2032
|
+
}
|
2015
2033
|
}
|
2016
2034
|
|
2017
2035
|
user.MFAEnabled = 1;
|
@@ -2040,7 +2058,7 @@ export class User extends UserBase {
|
|
2040
2058
|
const systemLogin = userSession.systemLogins.find(
|
2041
2059
|
(e) => e.code === systemCode,
|
2042
2060
|
);
|
2043
|
-
return `${userId}:${systemLogin.sessionId}
|
2061
|
+
return { success: true, sessionId: `${userId}:${systemLogin.sessionId}` };
|
2044
2062
|
}
|
2045
2063
|
|
2046
2064
|
// This method will verify 2FA codes
|
@@ -2078,15 +2096,31 @@ export class User extends UserBase {
|
|
2078
2096
|
}
|
2079
2097
|
|
2080
2098
|
// 3. Verify the mfaToken by calling speakeasy.totp.verify
|
2081
|
-
const
|
2099
|
+
const isCurrentValid = await speakeasy.totp.verify({
|
2082
2100
|
secret: userMFAConfig.totp.secret,
|
2083
2101
|
encoding: 'base32',
|
2084
2102
|
token: mfaToken,
|
2103
|
+
window: 0, // strict current time window
|
2085
2104
|
});
|
2105
|
+
if (!isCurrentValid) {
|
2106
|
+
const isExpired = await speakeasy.totp.verify({
|
2107
|
+
secret: userMFAConfig.totp.secret,
|
2108
|
+
encoding: 'base32',
|
2109
|
+
token: mfaToken,
|
2110
|
+
window: 2, // allow slight leeway: previous or next 2 time steps
|
2111
|
+
});
|
2086
2112
|
|
2087
|
-
|
2088
|
-
|
2089
|
-
|
2113
|
+
if (isExpired) {
|
2114
|
+
return {
|
2115
|
+
success: false,
|
2116
|
+
reason: 'MFA token has expired. Please try again.',
|
2117
|
+
};
|
2118
|
+
} else {
|
2119
|
+
return {
|
2120
|
+
success: false,
|
2121
|
+
reason: 'Invalid MFA token. Check your authenticator app.',
|
2122
|
+
};
|
2123
|
+
}
|
2090
2124
|
}
|
2091
2125
|
|
2092
2126
|
// 5. Retrieve Session
|
@@ -2109,7 +2143,7 @@ export class User extends UserBase {
|
|
2109
2143
|
const systemLogin = userSession.systemLogins.find(
|
2110
2144
|
(e) => e.code === systemCode,
|
2111
2145
|
);
|
2112
|
-
return `${userId}:${systemLogin.sessionId}
|
2146
|
+
return { success: true, sessionId: `${userId}:${systemLogin.sessionId}` };
|
2113
2147
|
}
|
2114
2148
|
|
2115
2149
|
public async bypass2FA(systemCode: string, dbTransaction: any) {
|
@@ -2152,7 +2186,10 @@ export class User extends UserBase {
|
|
2152
2186
|
const systemLogin = userSession.systemLogins.find(
|
2153
2187
|
(e) => e.code === systemCode,
|
2154
2188
|
);
|
2155
|
-
return
|
2189
|
+
return {
|
2190
|
+
success: true,
|
2191
|
+
sessionId: `${this.UserId}:${systemLogin.sessionId}`,
|
2192
|
+
};
|
2156
2193
|
} catch (error) {
|
2157
2194
|
throw error;
|
2158
2195
|
}
|
package/tsconfig.build.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
{
|
2
|
-
"extends": "./tsconfig.json",
|
3
|
-
"include": ["**/*.ts"],
|
4
|
-
"exclude": ["node_modules", "__tests__", "dist", "**/*spec.ts"]
|
5
|
-
}
|
1
|
+
{
|
2
|
+
"extends": "./tsconfig.json",
|
3
|
+
"include": ["**/*.ts"],
|
4
|
+
"exclude": ["node_modules", "__tests__", "dist", "**/*spec.ts"]
|
5
|
+
}
|
6
6
|
|
package/tsconfig.json
CHANGED
@@ -1,24 +1,24 @@
|
|
1
|
-
{
|
2
|
-
"compilerOptions": {
|
3
|
-
"module": "commonjs",
|
4
|
-
"declaration": true,
|
5
|
-
"removeComments": true,
|
6
|
-
"emitDecoratorMetadata": true,
|
7
|
-
"experimentalDecorators": true,
|
8
|
-
"allowSyntheticDefaultImports": true,
|
9
|
-
"moduleResolution": "node",
|
10
|
-
"target": "es6",
|
11
|
-
"sourceMap": true,
|
12
|
-
"outDir": "./dist",
|
13
|
-
"baseUrl": "./src",
|
14
|
-
"rootDir": "./",
|
15
|
-
"incremental": true,
|
16
|
-
"skipLibCheck": true,
|
17
|
-
"noImplicitAny": false,
|
18
|
-
"strictBindCallApply": false,
|
19
|
-
"forceConsistentCasingInFileNames": false,
|
20
|
-
"noFallthroughCasesInSwitch": false,
|
21
|
-
"strictNullChecks": false,
|
22
|
-
},
|
23
|
-
"exclude": ["node_modules", "dist"]
|
1
|
+
{
|
2
|
+
"compilerOptions": {
|
3
|
+
"module": "commonjs",
|
4
|
+
"declaration": true,
|
5
|
+
"removeComments": true,
|
6
|
+
"emitDecoratorMetadata": true,
|
7
|
+
"experimentalDecorators": true,
|
8
|
+
"allowSyntheticDefaultImports": true,
|
9
|
+
"moduleResolution": "node",
|
10
|
+
"target": "es6",
|
11
|
+
"sourceMap": true,
|
12
|
+
"outDir": "./dist",
|
13
|
+
"baseUrl": "./src",
|
14
|
+
"rootDir": "./",
|
15
|
+
"incremental": true,
|
16
|
+
"skipLibCheck": true,
|
17
|
+
"noImplicitAny": false,
|
18
|
+
"strictBindCallApply": false,
|
19
|
+
"forceConsistentCasingInFileNames": false,
|
20
|
+
"noFallthroughCasesInSwitch": false,
|
21
|
+
"strictNullChecks": false,
|
22
|
+
},
|
23
|
+
"exclude": ["node_modules", "dist"]
|
24
24
|
}
|
@@ -1 +0,0 @@
|
|
1
|
-
export {};
|
@@ -1,71 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
|
-
});
|
10
|
-
};
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
12
|
-
const group_privilege_1 = require("../../../../src/components/group-privilege/group-privilege");
|
13
|
-
const group_privilege_repository_1 = require("../../../../src/components/group-privilege/group-privilege.repository");
|
14
|
-
const general_1 = require("@tomei/general");
|
15
|
-
describe('GroupPrivilege', () => {
|
16
|
-
afterEach(() => {
|
17
|
-
jest.restoreAllMocks();
|
18
|
-
});
|
19
|
-
it('should initialize with GroupPrivilegeAttr', () => __awaiter(void 0, void 0, void 0, function* () {
|
20
|
-
const mockGroupPrivilegeAttr = {
|
21
|
-
GroupPrivilegeId: 1,
|
22
|
-
GroupCode: 'group1',
|
23
|
-
PrivilegeCode: 'privilege1',
|
24
|
-
Status: 'active',
|
25
|
-
CreatedAt: new Date(),
|
26
|
-
UpdatedAt: new Date(),
|
27
|
-
CreatedById: 1,
|
28
|
-
UpdatedById: 1,
|
29
|
-
};
|
30
|
-
const findOneMock = jest
|
31
|
-
.spyOn(group_privilege_repository_1.GroupPrivilegeRepository.prototype, 'findOne')
|
32
|
-
.mockResolvedValueOnce({ get: jest.fn().mockReturnValue(mockGroupPrivilegeAttr) });
|
33
|
-
const groupPrivilege = yield group_privilege_1.GroupPrivilege.init(null, 1);
|
34
|
-
expect(findOneMock).toBeCalledWith({
|
35
|
-
where: { GroupPrivilegeId: 1 },
|
36
|
-
transaction: null,
|
37
|
-
});
|
38
|
-
expect(groupPrivilege).toBeInstanceOf(group_privilege_1.GroupPrivilege);
|
39
|
-
expect(groupPrivilege.GroupPrivilegeId).toEqual(mockGroupPrivilegeAttr.GroupPrivilegeId);
|
40
|
-
expect(groupPrivilege.GroupCode).toEqual(mockGroupPrivilegeAttr.GroupCode);
|
41
|
-
expect(groupPrivilege.PrivilegeCode).toEqual(mockGroupPrivilegeAttr.PrivilegeCode);
|
42
|
-
expect(groupPrivilege.Status).toEqual(mockGroupPrivilegeAttr.Status);
|
43
|
-
expect(groupPrivilege.CreatedAt).toEqual(mockGroupPrivilegeAttr.CreatedAt);
|
44
|
-
expect(groupPrivilege.UpdatedAt).toEqual(mockGroupPrivilegeAttr.UpdatedAt);
|
45
|
-
expect(groupPrivilege.CreatedById).toEqual(mockGroupPrivilegeAttr.CreatedById);
|
46
|
-
expect(groupPrivilege.UpdatedById).toEqual(mockGroupPrivilegeAttr.UpdatedById);
|
47
|
-
}));
|
48
|
-
it('should throw ClassError when GroupPrivilegeAttr is not found', () => __awaiter(void 0, void 0, void 0, function* () {
|
49
|
-
const findOneMock = jest
|
50
|
-
.spyOn(group_privilege_repository_1.GroupPrivilegeRepository.prototype, 'findOne')
|
51
|
-
.mockResolvedValueOnce(null);
|
52
|
-
yield expect(group_privilege_1.GroupPrivilege.init(null, 1)).rejects.toThrow(general_1.ClassError);
|
53
|
-
expect(findOneMock).toBeCalledWith({
|
54
|
-
where: { GroupPrivilegeId: 1 },
|
55
|
-
transaction: null,
|
56
|
-
});
|
57
|
-
}));
|
58
|
-
it('should initialize with default values', () => __awaiter(void 0, void 0, void 0, function* () {
|
59
|
-
const groupPrivilege = yield group_privilege_1.GroupPrivilege.init();
|
60
|
-
expect(groupPrivilege).toBeInstanceOf(group_privilege_1.GroupPrivilege);
|
61
|
-
expect(groupPrivilege.GroupPrivilegeId).toBeUndefined();
|
62
|
-
expect(groupPrivilege.GroupCode).toBeUndefined();
|
63
|
-
expect(groupPrivilege.PrivilegeCode).toBeUndefined();
|
64
|
-
expect(groupPrivilege.Status).toBeUndefined();
|
65
|
-
expect(groupPrivilege.CreatedAt).toBeUndefined();
|
66
|
-
expect(groupPrivilege.UpdatedAt).toBeUndefined();
|
67
|
-
expect(groupPrivilege.CreatedById).toBeUndefined();
|
68
|
-
expect(groupPrivilege.UpdatedById).toBeUndefined();
|
69
|
-
}));
|
70
|
-
});
|
71
|
-
//# sourceMappingURL=group-privilege.test.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"group-privilege.test.js","sourceRoot":"","sources":["../../../../../__tests__/unit/components/group-privilege/group-privilege.test.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,gGAA4F;AAC5F,sHAAiH;AACjH,4CAA4C;AAE5C,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAS,EAAE;QACzD,MAAM,sBAAsB,GAAG;YAC7B,gBAAgB,EAAE,CAAC;YACnB,SAAS,EAAE,QAAQ;YACnB,aAAa,EAAE,YAAY;YAC3B,MAAM,EAAE,QAAQ;YAChB,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,WAAW,EAAE,CAAC;YACd,WAAW,EAAE,CAAC;SACf,CAAC;QAEF,MAAM,WAAW,GAAG,IAAI;aACrB,KAAK,CAAC,qDAAwB,CAAC,SAAS,EAAE,SAAS,CAAC;aACpD,qBAAqB,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,sBAAsB,CAAC,EAAS,CAAC,CAAC;QAE5F,MAAM,cAAc,GAAG,MAAM,gCAAc,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAE1D,MAAM,CAAC,WAAW,CAAC,CAAC,cAAc,CAAC;YACjC,KAAK,EAAE,EAAE,gBAAgB,EAAE,CAAC,EAAE;YAC9B,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;QACH,MAAM,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,gCAAc,CAAC,CAAC;QACtD,MAAM,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;QACzF,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;QAC3E,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC;QACnF,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;QACrE,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;QAC3E,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;QAC3E,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC;QAC/E,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC;IACjF,CAAC,CAAA,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAS,EAAE;QAC5E,MAAM,WAAW,GAAG,IAAI;aACrB,KAAK,CAAC,qDAAwB,CAAC,SAAS,EAAE,SAAS,CAAC;aACpD,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAE/B,MAAM,MAAM,CAAC,gCAAc,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,oBAAU,CAAC,CAAC;QAEvE,MAAM,CAAC,WAAW,CAAC,CAAC,cAAc,CAAC;YACjC,KAAK,EAAE,EAAE,gBAAgB,EAAE,CAAC,EAAE;YAC9B,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;IACL,CAAC,CAAA,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAS,EAAE;QACrD,MAAM,cAAc,GAAG,MAAM,gCAAc,CAAC,IAAI,EAAE,CAAC;QAEnD,MAAM,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,gCAAc,CAAC,CAAC;QACtD,MAAM,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,aAAa,EAAE,CAAC;QACxD,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,aAAa,EAAE,CAAC;QACjD,MAAM,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,aAAa,EAAE,CAAC;QACrD,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,CAAC;QAC9C,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,aAAa,EAAE,CAAC;QACjD,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,aAAa,EAAE,CAAC;QACjD,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,aAAa,EAAE,CAAC;QACnD,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,aAAa,EAAE,CAAC;IACrD,CAAC,CAAA,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
File without changes
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"login-user.spec.js","sourceRoot":"","sources":["../../../../../__tests__/unit/components/login-user/login-user.spec.ts"],"names":[],"mappings":"AAuuBA,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACvB,EAAE,CAAC,gBAAgB,EAAE,GAAG,EAAE;QACxB,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|