@tomei/sso 0.64.0 → 0.65.0
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 +15 -15
 - 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.js +1 -1
 - 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 +1 -1
 - 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/sonar-project.properties +0 -23
 
    
        package/.commitlintrc.json
    CHANGED
    
    | 
         @@ -1,22 +1,22 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {
         
     | 
| 
       2 
     | 
    
         
            -
              "extends": [
         
     | 
| 
       3 
     | 
    
         
            -
                "@commitlint/config-conventional"
         
     | 
| 
       4 
     | 
    
         
            -
              ],
         
     | 
| 
       5 
     | 
    
         
            -
              "rules": {
         
     | 
| 
       6 
     | 
    
         
            -
                "header-max-length": [ 2, "always", 120 ],
         
     | 
| 
       7 
     | 
    
         
            -
                "type-enum": [
         
     | 
| 
       8 
     | 
    
         
            -
                  2,
         
     | 
| 
       9 
     | 
    
         
            -
                  "always",
         
     | 
| 
       10 
     | 
    
         
            -
                  [
         
     | 
| 
       11 
     | 
    
         
            -
                    "breaking",
         
     | 
| 
       12 
     | 
    
         
            -
                    "feat",
         
     | 
| 
       13 
     | 
    
         
            -
                    "fix",
         
     | 
| 
       14 
     | 
    
         
            -
                    "refactor",
         
     | 
| 
       15 
     | 
    
         
            -
                    "config",
         
     | 
| 
       16 
     | 
    
         
            -
                    "test",
         
     | 
| 
       17 
     | 
    
         
            -
                    "docs",
         
     | 
| 
       18 
     | 
    
         
            -
                    "chore"
         
     | 
| 
       19 
     | 
    
         
            -
                  ]
         
     | 
| 
       20 
     | 
    
         
            -
                ]
         
     | 
| 
       21 
     | 
    
         
            -
              }
         
     | 
| 
       22 
     | 
    
         
            -
            }
         
     | 
| 
      
 1 
     | 
    
         
            +
            {
         
     | 
| 
      
 2 
     | 
    
         
            +
              "extends": [
         
     | 
| 
      
 3 
     | 
    
         
            +
                "@commitlint/config-conventional"
         
     | 
| 
      
 4 
     | 
    
         
            +
              ],
         
     | 
| 
      
 5 
     | 
    
         
            +
              "rules": {
         
     | 
| 
      
 6 
     | 
    
         
            +
                "header-max-length": [ 2, "always", 120 ],
         
     | 
| 
      
 7 
     | 
    
         
            +
                "type-enum": [
         
     | 
| 
      
 8 
     | 
    
         
            +
                  2,
         
     | 
| 
      
 9 
     | 
    
         
            +
                  "always",
         
     | 
| 
      
 10 
     | 
    
         
            +
                  [
         
     | 
| 
      
 11 
     | 
    
         
            +
                    "breaking",
         
     | 
| 
      
 12 
     | 
    
         
            +
                    "feat",
         
     | 
| 
      
 13 
     | 
    
         
            +
                    "fix",
         
     | 
| 
      
 14 
     | 
    
         
            +
                    "refactor",
         
     | 
| 
      
 15 
     | 
    
         
            +
                    "config",
         
     | 
| 
      
 16 
     | 
    
         
            +
                    "test",
         
     | 
| 
      
 17 
     | 
    
         
            +
                    "docs",
         
     | 
| 
      
 18 
     | 
    
         
            +
                    "chore"
         
     | 
| 
      
 19 
     | 
    
         
            +
                  ]
         
     | 
| 
      
 20 
     | 
    
         
            +
                ]
         
     | 
| 
      
 21 
     | 
    
         
            +
              }
         
     | 
| 
      
 22 
     | 
    
         
            +
            }
         
     | 
    
        package/.gitlab-ci.yml
    CHANGED
    
    | 
         @@ -1,16 +1,16 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            variables:
         
     | 
| 
       2 
     | 
    
         
            -
              SONAR_USER_HOME: "${CI_PROJECT_DIR}/.sonar"  # Defines the location of the analysis task cache
         
     | 
| 
       3 
     | 
    
         
            -
              GIT_DEPTH: "0"  # Tells git to fetch all the branches of the project, required by the analysis task
         
     | 
| 
       4 
     | 
    
         
            -
            sonarcloud-check:
         
     | 
| 
       5 
     | 
    
         
            -
              image:
         
     | 
| 
       6 
     | 
    
         
            -
                name: sonarsource/sonar-scanner-cli:latest
         
     | 
| 
       7 
     | 
    
         
            -
                entrypoint: [""]
         
     | 
| 
       8 
     | 
    
         
            -
              cache:
         
     | 
| 
       9 
     | 
    
         
            -
                key: "${CI_JOB_NAME}"
         
     | 
| 
       10 
     | 
    
         
            -
                paths:
         
     | 
| 
       11 
     | 
    
         
            -
                  - .sonar/cache
         
     | 
| 
       12 
     | 
    
         
            -
              script:
         
     | 
| 
       13 
     | 
    
         
            -
                - sonar-scanner
         
     | 
| 
       14 
     | 
    
         
            -
              only:
         
     | 
| 
       15 
     | 
    
         
            -
                - merge_requests
         
     | 
| 
       16 
     | 
    
         
            -
                - main
         
     | 
| 
      
 1 
     | 
    
         
            +
            variables:
         
     | 
| 
      
 2 
     | 
    
         
            +
              SONAR_USER_HOME: "${CI_PROJECT_DIR}/.sonar"  # Defines the location of the analysis task cache
         
     | 
| 
      
 3 
     | 
    
         
            +
              GIT_DEPTH: "0"  # Tells git to fetch all the branches of the project, required by the analysis task
         
     | 
| 
      
 4 
     | 
    
         
            +
            sonarcloud-check:
         
     | 
| 
      
 5 
     | 
    
         
            +
              image:
         
     | 
| 
      
 6 
     | 
    
         
            +
                name: sonarsource/sonar-scanner-cli:latest
         
     | 
| 
      
 7 
     | 
    
         
            +
                entrypoint: [""]
         
     | 
| 
      
 8 
     | 
    
         
            +
              cache:
         
     | 
| 
      
 9 
     | 
    
         
            +
                key: "${CI_JOB_NAME}"
         
     | 
| 
      
 10 
     | 
    
         
            +
                paths:
         
     | 
| 
      
 11 
     | 
    
         
            +
                  - .sonar/cache
         
     | 
| 
      
 12 
     | 
    
         
            +
              script:
         
     | 
| 
      
 13 
     | 
    
         
            +
                - sonar-scanner
         
     | 
| 
      
 14 
     | 
    
         
            +
              only:
         
     | 
| 
      
 15 
     | 
    
         
            +
                - merge_requests
         
     | 
| 
      
 16 
     | 
    
         
            +
                - main
         
     | 
    
        package/.husky/commit-msg
    CHANGED
    
    | 
         @@ -1,16 +1,16 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            #!/usr/bin/env sh
         
     | 
| 
       2 
     | 
    
         
            -
            . "$(dirname -- "$0")/_/husky.sh"
         
     | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
       4 
     | 
    
         
            -
            npx commitlint --edit $1
         
     | 
| 
       5 
     | 
    
         
            -
            message="$(cat $1)"
         
     | 
| 
       6 
     | 
    
         
            -
            echo "$message"
         
     | 
| 
       7 
     | 
    
         
            -
            a=($(echo "$message" | tr ':' '\n'))
         
     | 
| 
       8 
     | 
    
         
            -
            echo "${a[0]}"
         
     | 
| 
       9 
     | 
    
         
            -
            # if [ "${a[0]}" = "feat" ];
         
     | 
| 
       10 
     | 
    
         
            -
            # then
         
     | 
| 
       11 
     | 
    
         
            -
            #     npm version --commit-hooks false --no-git-tag-version minor
         
     | 
| 
       12 
     | 
    
         
            -
            # else
         
     | 
| 
       13 
     | 
    
         
            -
            #     npm version --commit-hooks false --no-git-tag-version patch
         
     | 
| 
       14 
     | 
    
         
            -
            # fi
         
     | 
| 
       15 
     | 
    
         
            -
            git add .
         
     | 
| 
      
 1 
     | 
    
         
            +
            #!/usr/bin/env sh
         
     | 
| 
      
 2 
     | 
    
         
            +
            . "$(dirname -- "$0")/_/husky.sh"
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            npx commitlint --edit $1
         
     | 
| 
      
 5 
     | 
    
         
            +
            message="$(cat $1)"
         
     | 
| 
      
 6 
     | 
    
         
            +
            echo "$message"
         
     | 
| 
      
 7 
     | 
    
         
            +
            a=($(echo "$message" | tr ':' '\n'))
         
     | 
| 
      
 8 
     | 
    
         
            +
            echo "${a[0]}"
         
     | 
| 
      
 9 
     | 
    
         
            +
            # if [ "${a[0]}" = "feat" ];
         
     | 
| 
      
 10 
     | 
    
         
            +
            # then
         
     | 
| 
      
 11 
     | 
    
         
            +
            #     npm version --commit-hooks false --no-git-tag-version minor
         
     | 
| 
      
 12 
     | 
    
         
            +
            # else
         
     | 
| 
      
 13 
     | 
    
         
            +
            #     npm version --commit-hooks false --no-git-tag-version patch
         
     | 
| 
      
 14 
     | 
    
         
            +
            # fi
         
     | 
| 
      
 15 
     | 
    
         
            +
            git add .
         
     | 
| 
       16 
16 
     | 
    
         
             
            git commit -m "$message" --no-verify
         
     | 
    
        package/.husky/pre-commit
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            #!/usr/bin/env sh
         
     | 
| 
       2 
     | 
    
         
            -
            . "$(dirname -- "$0")/_/husky.sh"
         
     | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
       4 
     | 
    
         
            -
            npm run lint
         
     | 
| 
       5 
     | 
    
         
            -
            npm run format
         
     | 
| 
       6 
     | 
    
         
            -
            npm run build
         
     | 
| 
       7 
     | 
    
         
            -
            git add .
         
     | 
| 
      
 1 
     | 
    
         
            +
            #!/usr/bin/env sh
         
     | 
| 
      
 2 
     | 
    
         
            +
            . "$(dirname -- "$0")/_/husky.sh"
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            npm run lint
         
     | 
| 
      
 5 
     | 
    
         
            +
            npm run format
         
     | 
| 
      
 6 
     | 
    
         
            +
            npm run build
         
     | 
| 
      
 7 
     | 
    
         
            +
            git add .
         
     | 
    
        package/.prettierrc
    CHANGED
    
    | 
         @@ -1,4 +1,4 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {
         
     | 
| 
       2 
     | 
    
         
            -
              "singleQuote": true,
         
     | 
| 
       3 
     | 
    
         
            -
              "trailingComma": "all"
         
     | 
| 
       4 
     | 
    
         
            -
            }
         
     | 
| 
      
 1 
     | 
    
         
            +
            {
         
     | 
| 
      
 2 
     | 
    
         
            +
              "singleQuote": true,
         
     | 
| 
      
 3 
     | 
    
         
            +
              "trailingComma": "all"
         
     | 
| 
      
 4 
     | 
    
         
            +
            }
         
     | 
    
        package/Jenkinsfile
    CHANGED
    
    | 
         @@ -1,57 +1,57 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            pipeline {
         
     | 
| 
       2 
     | 
    
         
            -
                agent {
         
     | 
| 
       3 
     | 
    
         
            -
                    kubernetes {
         
     | 
| 
       4 
     | 
    
         
            -
                        label 'jenkins-agent'
         
     | 
| 
       5 
     | 
    
         
            -
                        namespace 'devops-tools'
         
     | 
| 
       6 
     | 
    
         
            -
                    }
         
     | 
| 
       7 
     | 
    
         
            -
                }
         
     | 
| 
       8 
     | 
    
         
            -
                tools {nodejs "node18"}
         
     | 
| 
       9 
     | 
    
         
            -
                stages {
         
     | 
| 
       10 
     | 
    
         
            -
                    stage('Install') {
         
     | 
| 
       11 
     | 
    
         
            -
                        steps {
         
     | 
| 
       12 
     | 
    
         
            -
                            echo 'Install Dependencies..'
         
     | 
| 
       13 
     | 
    
         
            -
                            sh 'npm install'
         
     | 
| 
       14 
     | 
    
         
            -
                        }
         
     | 
| 
       15 
     | 
    
         
            -
                    }
         
     | 
| 
       16 
     | 
    
         
            -
                    stage('Test') {
         
     | 
| 
       17 
     | 
    
         
            -
                        steps {
         
     | 
| 
       18 
     | 
    
         
            -
                            echo 'Testing..'
         
     | 
| 
       19 
     | 
    
         
            -
                            sh 'npm run test'
         
     | 
| 
       20 
     | 
    
         
            -
                        }
         
     | 
| 
       21 
     | 
    
         
            -
                    }
         
     | 
| 
       22 
     | 
    
         
            -
                    stage('Build') {
         
     | 
| 
       23 
     | 
    
         
            -
                        steps {
         
     | 
| 
       24 
     | 
    
         
            -
                            echo 'Building..'
         
     | 
| 
       25 
     | 
    
         
            -
                            sh 'npm run build'
         
     | 
| 
       26 
     | 
    
         
            -
                        }
         
     | 
| 
       27 
     | 
    
         
            -
                    }
         
     | 
| 
       28 
     | 
    
         
            -
                    stage('Publish') {
         
     | 
| 
       29 
     | 
    
         
            -
                        steps {
         
     | 
| 
       30 
     | 
    
         
            -
                            echo 'Publish..'
         
     | 
| 
       31 
     | 
    
         
            -
                            withCredentials([
         
     | 
| 
       32 
     | 
    
         
            -
                                usernamePassword(credentialsId: 'npm-auth-token', usernameVariable: 'NPM_USERNAME', passwordVariable: 'AUTH_TOKEN')
         
     | 
| 
       33 
     | 
    
         
            -
                            ]) {
         
     | 
| 
       34 
     | 
    
         
            -
                            sh "npm set //registry.npmjs.org/:_authToken=$AUTH_TOKEN"
         
     | 
| 
       35 
     | 
    
         
            -
                            sh "npm publish"
         
     | 
| 
       36 
     | 
    
         
            -
                        }
         
     | 
| 
       37 
     | 
    
         
            -
                    }
         
     | 
| 
       38 
     | 
    
         
            -
            }
         
     | 
| 
       39 
     | 
    
         
            -
                }
         
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
                post {
         
     | 
| 
       42 
     | 
    
         
            -
                    success {
         
     | 
| 
       43 
     | 
    
         
            -
                        script {
         
     | 
| 
       44 
     | 
    
         
            -
                            def gitAuthor = sh(returnStdout: true, script: 'git log -1 --pretty=format:%an').trim()
         
     | 
| 
       45 
     | 
    
         
            -
                            discordSend description: "Git Commit: ${env.GIT_COMMIT}\nGit Branch: ${env.GIT_BRANCH}\nGit URL: ${env.GIT_URL}\nGit Author: ${gitAuthor}", footer: '', image: '', link: env.BUILD_URL, result: 'SUCCESS', scmWebUrl: '', thumbnail: '', title: "${env.JOB_NAME} Build #${env.BUILD_NUMBER} Success", webhookURL: 'https://discord.com/api/webhooks/1117705705466642434/UWgw32kQerM5HOr-fcCYD2aQxE1koeN_4CSCEzDZz1EAI3vNaysAw0YU7YUrb4TozOw0'
         
     | 
| 
       46 
     | 
    
         
            -
                        }
         
     | 
| 
       47 
     | 
    
         
            -
                    }
         
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
                    failure {
         
     | 
| 
       50 
     | 
    
         
            -
                        script {
         
     | 
| 
       51 
     | 
    
         
            -
                            def gitAuthor = sh(returnStdout: true, script: 'git log -1 --pretty=format:%an').trim()
         
     | 
| 
       52 
     | 
    
         
            -
                            discordSend description: "Git Commit: ${env.GIT_COMMIT}\nGit Branch: ${env.GIT_BRANCH}\nGit URL: ${env.GIT_URL}\nGit Author: ${gitAuthor}", footer: '', image: '', link: env.BUILD_URL, result: 'FAILURE', scmWebUrl: '', thumbnail: '', title: "${env.JOB_NAME} Build #${env.BUILD_NUMBER} Failed", webhookURL: 'https://discord.com/api/webhooks/1117705705466642434/UWgw32kQerM5HOr-fcCYD2aQxE1koeN_4CSCEzDZz1EAI3vNaysAw0YU7YUrb4TozOw0'
         
     | 
| 
       53 
     | 
    
         
            -
                        }
         
     | 
| 
       54 
     | 
    
         
            -
                    }
         
     | 
| 
       55 
     | 
    
         
            -
                } 
         
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
     | 
    
         
            -
            }
         
     | 
| 
      
 1 
     | 
    
         
            +
            pipeline {
         
     | 
| 
      
 2 
     | 
    
         
            +
                agent {
         
     | 
| 
      
 3 
     | 
    
         
            +
                    kubernetes {
         
     | 
| 
      
 4 
     | 
    
         
            +
                        label 'jenkins-agent'
         
     | 
| 
      
 5 
     | 
    
         
            +
                        namespace 'devops-tools'
         
     | 
| 
      
 6 
     | 
    
         
            +
                    }
         
     | 
| 
      
 7 
     | 
    
         
            +
                }
         
     | 
| 
      
 8 
     | 
    
         
            +
                tools {nodejs "node18"}
         
     | 
| 
      
 9 
     | 
    
         
            +
                stages {
         
     | 
| 
      
 10 
     | 
    
         
            +
                    stage('Install') {
         
     | 
| 
      
 11 
     | 
    
         
            +
                        steps {
         
     | 
| 
      
 12 
     | 
    
         
            +
                            echo 'Install Dependencies..'
         
     | 
| 
      
 13 
     | 
    
         
            +
                            sh 'npm install'
         
     | 
| 
      
 14 
     | 
    
         
            +
                        }
         
     | 
| 
      
 15 
     | 
    
         
            +
                    }
         
     | 
| 
      
 16 
     | 
    
         
            +
                    stage('Test') {
         
     | 
| 
      
 17 
     | 
    
         
            +
                        steps {
         
     | 
| 
      
 18 
     | 
    
         
            +
                            echo 'Testing..'
         
     | 
| 
      
 19 
     | 
    
         
            +
                            sh 'npm run test'
         
     | 
| 
      
 20 
     | 
    
         
            +
                        }
         
     | 
| 
      
 21 
     | 
    
         
            +
                    }
         
     | 
| 
      
 22 
     | 
    
         
            +
                    stage('Build') {
         
     | 
| 
      
 23 
     | 
    
         
            +
                        steps {
         
     | 
| 
      
 24 
     | 
    
         
            +
                            echo 'Building..'
         
     | 
| 
      
 25 
     | 
    
         
            +
                            sh 'npm run build'
         
     | 
| 
      
 26 
     | 
    
         
            +
                        }
         
     | 
| 
      
 27 
     | 
    
         
            +
                    }
         
     | 
| 
      
 28 
     | 
    
         
            +
                    stage('Publish') {
         
     | 
| 
      
 29 
     | 
    
         
            +
                        steps {
         
     | 
| 
      
 30 
     | 
    
         
            +
                            echo 'Publish..'
         
     | 
| 
      
 31 
     | 
    
         
            +
                            withCredentials([
         
     | 
| 
      
 32 
     | 
    
         
            +
                                usernamePassword(credentialsId: 'npm-auth-token', usernameVariable: 'NPM_USERNAME', passwordVariable: 'AUTH_TOKEN')
         
     | 
| 
      
 33 
     | 
    
         
            +
                            ]) {
         
     | 
| 
      
 34 
     | 
    
         
            +
                            sh "npm set //registry.npmjs.org/:_authToken=$AUTH_TOKEN"
         
     | 
| 
      
 35 
     | 
    
         
            +
                            sh "npm publish"
         
     | 
| 
      
 36 
     | 
    
         
            +
                        }
         
     | 
| 
      
 37 
     | 
    
         
            +
                    }
         
     | 
| 
      
 38 
     | 
    
         
            +
            }
         
     | 
| 
      
 39 
     | 
    
         
            +
                }
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                post {
         
     | 
| 
      
 42 
     | 
    
         
            +
                    success {
         
     | 
| 
      
 43 
     | 
    
         
            +
                        script {
         
     | 
| 
      
 44 
     | 
    
         
            +
                            def gitAuthor = sh(returnStdout: true, script: 'git log -1 --pretty=format:%an').trim()
         
     | 
| 
      
 45 
     | 
    
         
            +
                            discordSend description: "Git Commit: ${env.GIT_COMMIT}\nGit Branch: ${env.GIT_BRANCH}\nGit URL: ${env.GIT_URL}\nGit Author: ${gitAuthor}", footer: '', image: '', link: env.BUILD_URL, result: 'SUCCESS', scmWebUrl: '', thumbnail: '', title: "${env.JOB_NAME} Build #${env.BUILD_NUMBER} Success", webhookURL: 'https://discord.com/api/webhooks/1117705705466642434/UWgw32kQerM5HOr-fcCYD2aQxE1koeN_4CSCEzDZz1EAI3vNaysAw0YU7YUrb4TozOw0'
         
     | 
| 
      
 46 
     | 
    
         
            +
                        }
         
     | 
| 
      
 47 
     | 
    
         
            +
                    }
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                    failure {
         
     | 
| 
      
 50 
     | 
    
         
            +
                        script {
         
     | 
| 
      
 51 
     | 
    
         
            +
                            def gitAuthor = sh(returnStdout: true, script: 'git log -1 --pretty=format:%an').trim()
         
     | 
| 
      
 52 
     | 
    
         
            +
                            discordSend description: "Git Commit: ${env.GIT_COMMIT}\nGit Branch: ${env.GIT_BRANCH}\nGit URL: ${env.GIT_URL}\nGit Author: ${gitAuthor}", footer: '', image: '', link: env.BUILD_URL, result: 'FAILURE', scmWebUrl: '', thumbnail: '', title: "${env.JOB_NAME} Build #${env.BUILD_NUMBER} Failed", webhookURL: 'https://discord.com/api/webhooks/1117705705466642434/UWgw32kQerM5HOr-fcCYD2aQxE1koeN_4CSCEzDZz1EAI3vNaysAw0YU7YUrb4TozOw0'
         
     | 
| 
      
 53 
     | 
    
         
            +
                        }
         
     | 
| 
      
 54 
     | 
    
         
            +
                    }
         
     | 
| 
      
 55 
     | 
    
         
            +
                } 
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
            }
         
     | 
    
        package/README.md
    CHANGED
    
    | 
         @@ -1,23 +1,23 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            ## SSO Package
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            ### How to use
         
     | 
| 
       4 
     | 
    
         
            -
            - run `npm i`
         
     | 
| 
       5 
     | 
    
         
            -
            - Make sure you set the environment in .sampledotenv in your project `.env` file
         
     | 
| 
       6 
     | 
    
         
            -
            - run `npm run start:dev`
         
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
            ### How create a new migration
         
     | 
| 
       9 
     | 
    
         
            -
            - Make sure you have `DATABASE_URL` and `SHADOW_DATABASE_URL` in your project `.env` file
         
     | 
| 
       10 
     | 
    
         
            -
            - create a new empty database. dont do migration on it and set the `SHADOW_DATABASE_URL` to it
         
     | 
| 
       11 
     | 
    
         
            -
            - Create a database user 
         
     | 
| 
       12 
     | 
    
         
            -
            - Grant the above user privileges to alter sso tables and shadow database. The user should have access to the sso table and shadow database only. Use `create-sso-user.sql` as an example to create the user and grant privileges
         
     | 
| 
       13 
     | 
    
         
            -
            - Make changes to the `schema.prisma` file 
         
     | 
| 
       14 
     | 
    
         
            -
            - Run `npx prisma migrate dev --name <migration-name> --preview-feature --create-only` to create the migration. The migration will be created in the `migrations` folder.
         
     | 
| 
       15 
     | 
    
         
            -
            - open the newly created migration. review the migration and make changes if necessary.
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
            notes:
         
     | 
| 
       18 
     | 
    
         
            -
            - if you create a new table, after migration has been created, change the default character set to `latin1` from `utf8mb4` and remove COLLATE phrase.please also add it to the `create-sso-user.sql` file for references
         
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
            ### How to run migration
         
     | 
| 
       21 
     | 
    
         
            -
            - run `npx prisma migrate deploy` to run the migration
         
     | 
| 
       22 
     | 
    
         
            -
            - run `npx prisma generate` to generate the prisma client
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
      
 1 
     | 
    
         
            +
            ## SSO Package
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            ### How to use
         
     | 
| 
      
 4 
     | 
    
         
            +
            - run `npm i`
         
     | 
| 
      
 5 
     | 
    
         
            +
            - Make sure you set the environment in .sampledotenv in your project `.env` file
         
     | 
| 
      
 6 
     | 
    
         
            +
            - run `npm run start:dev`
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            ### How create a new migration
         
     | 
| 
      
 9 
     | 
    
         
            +
            - Make sure you have `DATABASE_URL` and `SHADOW_DATABASE_URL` in your project `.env` file
         
     | 
| 
      
 10 
     | 
    
         
            +
            - create a new empty database. dont do migration on it and set the `SHADOW_DATABASE_URL` to it
         
     | 
| 
      
 11 
     | 
    
         
            +
            - Create a database user 
         
     | 
| 
      
 12 
     | 
    
         
            +
            - Grant the above user privileges to alter sso tables and shadow database. The user should have access to the sso table and shadow database only. Use `create-sso-user.sql` as an example to create the user and grant privileges
         
     | 
| 
      
 13 
     | 
    
         
            +
            - Make changes to the `schema.prisma` file 
         
     | 
| 
      
 14 
     | 
    
         
            +
            - Run `npx prisma migrate dev --name <migration-name> --preview-feature --create-only` to create the migration. The migration will be created in the `migrations` folder.
         
     | 
| 
      
 15 
     | 
    
         
            +
            - open the newly created migration. review the migration and make changes if necessary.
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            notes:
         
     | 
| 
      
 18 
     | 
    
         
            +
            - if you create a new table, after migration has been created, change the default character set to `latin1` from `utf8mb4` and remove COLLATE phrase.please also add it to the `create-sso-user.sql` file for references
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
            ### How to run migration
         
     | 
| 
      
 21 
     | 
    
         
            +
            - run `npx prisma migrate deploy` to run the migration
         
     | 
| 
      
 22 
     | 
    
         
            +
            - run `npx prisma generate` to generate the prisma client
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
         @@ -1,80 +1,80 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            import { Group } from '../../../../src/components/group/group';
         
     | 
| 
       2 
     | 
    
         
            -
            import { GroupRepository } from '../../../../src/components/group/group.repository';
         
     | 
| 
       3 
     | 
    
         
            -
            import { ClassError } from '@tomei/general';
         
     | 
| 
       4 
     | 
    
         
            -
            import { GroupTypeEnum } from '../../../../src/enum/group-type.enum';
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
            describe('Group', () => {
         
     | 
| 
       8 
     | 
    
         
            -
              afterEach(() => {
         
     | 
| 
       9 
     | 
    
         
            -
                jest.clearAllMocks();
         
     | 
| 
       10 
     | 
    
         
            -
              });
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
              it('should initialize a group with valid GroupCode', async () => {
         
     | 
| 
       13 
     | 
    
         
            -
                const groupAttr = {
         
     | 
| 
       14 
     | 
    
         
            -
                  GroupCode: 'group1',
         
     | 
| 
       15 
     | 
    
         
            -
                  Name: 'Group 1',
         
     | 
| 
       16 
     | 
    
         
            -
                  Description: 'This is Group 1',
         
     | 
| 
       17 
     | 
    
         
            -
                  Type: GroupTypeEnum.ROLE,
         
     | 
| 
       18 
     | 
    
         
            -
                  ParentGroupCode: 'parentGroup1',
         
     | 
| 
       19 
     | 
    
         
            -
                  InheritParentPrivilegeYN: 'Y',
         
     | 
| 
       20 
     | 
    
         
            -
                  InheritParentSystemAccessYN: 'N',
         
     | 
| 
       21 
     | 
    
         
            -
                  Status: 'Active',
         
     | 
| 
       22 
     | 
    
         
            -
                  CreatedById: 1,
         
     | 
| 
       23 
     | 
    
         
            -
                  CreatedAt: new Date(),
         
     | 
| 
       24 
     | 
    
         
            -
                  UpdatedById: 2,
         
     | 
| 
       25 
     | 
    
         
            -
                  UpdatedAt: new Date(),
         
     | 
| 
       26 
     | 
    
         
            -
                };
         
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
                const groupRepositoryMock = jest.spyOn(GroupRepository.prototype, 'findByPk').mockResolvedValueOnce({
         
     | 
| 
       29 
     | 
    
         
            -
                  ...groupAttr,
         
     | 
| 
       30 
     | 
    
         
            -
                  get: () => groupAttr,
         
     | 
| 
       31 
     | 
    
         
            -
                } as any);
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
                const result = await Group.init(null, 'group1');
         
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
                expect(result).toBeInstanceOf(Group);
         
     | 
| 
       36 
     | 
    
         
            -
                expect(result.GroupCode).toBe(groupAttr.GroupCode);
         
     | 
| 
       37 
     | 
    
         
            -
                expect(result.Name).toBe(groupAttr.Name);
         
     | 
| 
       38 
     | 
    
         
            -
                expect(result.Description).toBe(groupAttr.Description);
         
     | 
| 
       39 
     | 
    
         
            -
                expect(result.Type).toBe(groupAttr.Type);
         
     | 
| 
       40 
     | 
    
         
            -
                expect(result.ParentGroupCode).toBe(groupAttr.ParentGroupCode);
         
     | 
| 
       41 
     | 
    
         
            -
                expect(result.InheritParentPrivilegeYN).toBe(groupAttr.InheritParentPrivilegeYN);
         
     | 
| 
       42 
     | 
    
         
            -
                expect(result.InheritParentSystemAccessYN).toBe(groupAttr.InheritParentSystemAccessYN);
         
     | 
| 
       43 
     | 
    
         
            -
                expect(result.Status).toBe(groupAttr.Status);
         
     | 
| 
       44 
     | 
    
         
            -
                expect(result.CreatedById).toBe(groupAttr.CreatedById);
         
     | 
| 
       45 
     | 
    
         
            -
                expect(result.CreatedAt).toBe(groupAttr.CreatedAt);
         
     | 
| 
       46 
     | 
    
         
            -
                expect(result.UpdatedById).toBe(groupAttr.UpdatedById);
         
     | 
| 
       47 
     | 
    
         
            -
                expect(result.UpdatedAt).toBe(groupAttr.UpdatedAt);
         
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
                expect(groupRepositoryMock).toHaveBeenCalledTimes(1);
         
     | 
| 
       50 
     | 
    
         
            -
                expect(groupRepositoryMock).toHaveBeenCalledWith('group1', {
         
     | 
| 
       51 
     | 
    
         
            -
                  transaction: null,
         
     | 
| 
       52 
     | 
    
         
            -
                });
         
     | 
| 
       53 
     | 
    
         
            -
              });
         
     | 
| 
       54 
     | 
    
         
            -
             
     | 
| 
       55 
     | 
    
         
            -
              it('should throw an error when initializing a group with invalid GroupCode', async () => {
         
     | 
| 
       56 
     | 
    
         
            -
                const groupRepositoryMock = jest.spyOn(GroupRepository.prototype, 'findByPk').mockResolvedValueOnce(null);
         
     | 
| 
       57 
     | 
    
         
            -
             
     | 
| 
       58 
     | 
    
         
            -
                await expect(Group.init(null, 'invalidGroupCode')).rejects.toThrow(
         
     | 
| 
       59 
     | 
    
         
            -
                  new ClassError('Group', 'GroupErrMsg01', 'Failed To Initialize Group')
         
     | 
| 
       60 
     | 
    
         
            -
                );
         
     | 
| 
       61 
     | 
    
         
            -
             
     | 
| 
       62 
     | 
    
         
            -
                expect(groupRepositoryMock).toHaveBeenCalledTimes(1);
         
     | 
| 
       63 
     | 
    
         
            -
                expect(groupRepositoryMock).toHaveBeenCalledWith('invalidGroupCode', {
         
     | 
| 
       64 
     | 
    
         
            -
                  transaction: null,
         
     | 
| 
       65 
     | 
    
         
            -
                });
         
     | 
| 
       66 
     | 
    
         
            -
              });
         
     | 
| 
       67 
     | 
    
         
            -
             
     | 
| 
       68 
     | 
    
         
            -
              it('should throw an error when initializing a group with an error', async () => {
         
     | 
| 
       69 
     | 
    
         
            -
                const groupRepositoryMock = jest.spyOn(GroupRepository.prototype, 'findByPk').mockRejectedValueOnce(new Error('Database error'));
         
     | 
| 
       70 
     | 
    
         
            -
             
     | 
| 
       71 
     | 
    
         
            -
                await expect(Group.init(null, 'group1')).rejects.toThrow(
         
     | 
| 
       72 
     | 
    
         
            -
                  new ClassError('Group', 'GroupErrMsg01', 'Failed To Initialize Group')
         
     | 
| 
       73 
     | 
    
         
            -
                );
         
     | 
| 
       74 
     | 
    
         
            -
             
     | 
| 
       75 
     | 
    
         
            -
                expect(groupRepositoryMock).toHaveBeenCalledTimes(1);
         
     | 
| 
       76 
     | 
    
         
            -
                expect(groupRepositoryMock).toHaveBeenCalledWith('group1', {
         
     | 
| 
       77 
     | 
    
         
            -
                  transaction: null,
         
     | 
| 
       78 
     | 
    
         
            -
                });
         
     | 
| 
       79 
     | 
    
         
            -
              });
         
     | 
| 
      
 1 
     | 
    
         
            +
            import { Group } from '../../../../src/components/group/group';
         
     | 
| 
      
 2 
     | 
    
         
            +
            import { GroupRepository } from '../../../../src/components/group/group.repository';
         
     | 
| 
      
 3 
     | 
    
         
            +
            import { ClassError } from '@tomei/general';
         
     | 
| 
      
 4 
     | 
    
         
            +
            import { GroupTypeEnum } from '../../../../src/enum/group-type.enum';
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            describe('Group', () => {
         
     | 
| 
      
 8 
     | 
    
         
            +
              afterEach(() => {
         
     | 
| 
      
 9 
     | 
    
         
            +
                jest.clearAllMocks();
         
     | 
| 
      
 10 
     | 
    
         
            +
              });
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
              it('should initialize a group with valid GroupCode', async () => {
         
     | 
| 
      
 13 
     | 
    
         
            +
                const groupAttr = {
         
     | 
| 
      
 14 
     | 
    
         
            +
                  GroupCode: 'group1',
         
     | 
| 
      
 15 
     | 
    
         
            +
                  Name: 'Group 1',
         
     | 
| 
      
 16 
     | 
    
         
            +
                  Description: 'This is Group 1',
         
     | 
| 
      
 17 
     | 
    
         
            +
                  Type: GroupTypeEnum.ROLE,
         
     | 
| 
      
 18 
     | 
    
         
            +
                  ParentGroupCode: 'parentGroup1',
         
     | 
| 
      
 19 
     | 
    
         
            +
                  InheritParentPrivilegeYN: 'Y',
         
     | 
| 
      
 20 
     | 
    
         
            +
                  InheritParentSystemAccessYN: 'N',
         
     | 
| 
      
 21 
     | 
    
         
            +
                  Status: 'Active',
         
     | 
| 
      
 22 
     | 
    
         
            +
                  CreatedById: 1,
         
     | 
| 
      
 23 
     | 
    
         
            +
                  CreatedAt: new Date(),
         
     | 
| 
      
 24 
     | 
    
         
            +
                  UpdatedById: 2,
         
     | 
| 
      
 25 
     | 
    
         
            +
                  UpdatedAt: new Date(),
         
     | 
| 
      
 26 
     | 
    
         
            +
                };
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                const groupRepositoryMock = jest.spyOn(GroupRepository.prototype, 'findByPk').mockResolvedValueOnce({
         
     | 
| 
      
 29 
     | 
    
         
            +
                  ...groupAttr,
         
     | 
| 
      
 30 
     | 
    
         
            +
                  get: () => groupAttr,
         
     | 
| 
      
 31 
     | 
    
         
            +
                } as any);
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                const result = await Group.init(null, 'group1');
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                expect(result).toBeInstanceOf(Group);
         
     | 
| 
      
 36 
     | 
    
         
            +
                expect(result.GroupCode).toBe(groupAttr.GroupCode);
         
     | 
| 
      
 37 
     | 
    
         
            +
                expect(result.Name).toBe(groupAttr.Name);
         
     | 
| 
      
 38 
     | 
    
         
            +
                expect(result.Description).toBe(groupAttr.Description);
         
     | 
| 
      
 39 
     | 
    
         
            +
                expect(result.Type).toBe(groupAttr.Type);
         
     | 
| 
      
 40 
     | 
    
         
            +
                expect(result.ParentGroupCode).toBe(groupAttr.ParentGroupCode);
         
     | 
| 
      
 41 
     | 
    
         
            +
                expect(result.InheritParentPrivilegeYN).toBe(groupAttr.InheritParentPrivilegeYN);
         
     | 
| 
      
 42 
     | 
    
         
            +
                expect(result.InheritParentSystemAccessYN).toBe(groupAttr.InheritParentSystemAccessYN);
         
     | 
| 
      
 43 
     | 
    
         
            +
                expect(result.Status).toBe(groupAttr.Status);
         
     | 
| 
      
 44 
     | 
    
         
            +
                expect(result.CreatedById).toBe(groupAttr.CreatedById);
         
     | 
| 
      
 45 
     | 
    
         
            +
                expect(result.CreatedAt).toBe(groupAttr.CreatedAt);
         
     | 
| 
      
 46 
     | 
    
         
            +
                expect(result.UpdatedById).toBe(groupAttr.UpdatedById);
         
     | 
| 
      
 47 
     | 
    
         
            +
                expect(result.UpdatedAt).toBe(groupAttr.UpdatedAt);
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                expect(groupRepositoryMock).toHaveBeenCalledTimes(1);
         
     | 
| 
      
 50 
     | 
    
         
            +
                expect(groupRepositoryMock).toHaveBeenCalledWith('group1', {
         
     | 
| 
      
 51 
     | 
    
         
            +
                  transaction: null,
         
     | 
| 
      
 52 
     | 
    
         
            +
                });
         
     | 
| 
      
 53 
     | 
    
         
            +
              });
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
              it('should throw an error when initializing a group with invalid GroupCode', async () => {
         
     | 
| 
      
 56 
     | 
    
         
            +
                const groupRepositoryMock = jest.spyOn(GroupRepository.prototype, 'findByPk').mockResolvedValueOnce(null);
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
                await expect(Group.init(null, 'invalidGroupCode')).rejects.toThrow(
         
     | 
| 
      
 59 
     | 
    
         
            +
                  new ClassError('Group', 'GroupErrMsg01', 'Failed To Initialize Group')
         
     | 
| 
      
 60 
     | 
    
         
            +
                );
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
                expect(groupRepositoryMock).toHaveBeenCalledTimes(1);
         
     | 
| 
      
 63 
     | 
    
         
            +
                expect(groupRepositoryMock).toHaveBeenCalledWith('invalidGroupCode', {
         
     | 
| 
      
 64 
     | 
    
         
            +
                  transaction: null,
         
     | 
| 
      
 65 
     | 
    
         
            +
                });
         
     | 
| 
      
 66 
     | 
    
         
            +
              });
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
              it('should throw an error when initializing a group with an error', async () => {
         
     | 
| 
      
 69 
     | 
    
         
            +
                const groupRepositoryMock = jest.spyOn(GroupRepository.prototype, 'findByPk').mockRejectedValueOnce(new Error('Database error'));
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
                await expect(Group.init(null, 'group1')).rejects.toThrow(
         
     | 
| 
      
 72 
     | 
    
         
            +
                  new ClassError('Group', 'GroupErrMsg01', 'Failed To Initialize Group')
         
     | 
| 
      
 73 
     | 
    
         
            +
                );
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
                expect(groupRepositoryMock).toHaveBeenCalledTimes(1);
         
     | 
| 
      
 76 
     | 
    
         
            +
                expect(groupRepositoryMock).toHaveBeenCalledWith('group1', {
         
     | 
| 
      
 77 
     | 
    
         
            +
                  transaction: null,
         
     | 
| 
      
 78 
     | 
    
         
            +
                });
         
     | 
| 
      
 79 
     | 
    
         
            +
              });
         
     | 
| 
       80 
80 
     | 
    
         
             
            });
         
     | 
| 
         @@ -1,89 +1,89 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            import { GroupObjectPrivilegeRepository } from '../../../../src/components/group-object-privilege/group-object-privilege.repository';
         
     | 
| 
       2 
     | 
    
         
            -
            import { GroupObjectPrivilege } from '../../../../src/components/group-object-privilege/group-object-privilege';
         
     | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
       4 
     | 
    
         
            -
            describe('GroupObjectPrivilege', () => {
         
     | 
| 
       5 
     | 
    
         
            -
              let groupObjectPrivilege: GroupObjectPrivilege;
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
              beforeEach(() => {
         
     | 
| 
       8 
     | 
    
         
            -
                groupObjectPrivilege = new GroupObjectPrivilege();
         
     | 
| 
       9 
     | 
    
         
            -
              });
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
              it('should create an instance of GroupObjectPrivilege', () => {
         
     | 
| 
       12 
     | 
    
         
            -
                expect(groupObjectPrivilege).toBeInstanceOf(GroupObjectPrivilege);
         
     | 
| 
       13 
     | 
    
         
            -
              });
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
              it('should have the correct TableName', () => {
         
     | 
| 
       16 
     | 
    
         
            -
                expect(groupObjectPrivilege.TableName).toBe('sso_GroupObjectPrivilege');
         
     | 
| 
       17 
     | 
    
         
            -
              });
         
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
              it('should have the correct properties', () => {
         
     | 
| 
       20 
     | 
    
         
            -
                expect(groupObjectPrivilege.ObjectName).toBeUndefined();
         
     | 
| 
       21 
     | 
    
         
            -
                expect(groupObjectPrivilege.GroupObjectPrivilegeId).toBeUndefined();
         
     | 
| 
       22 
     | 
    
         
            -
                expect(groupObjectPrivilege.GroupCode).toBeUndefined();
         
     | 
| 
       23 
     | 
    
         
            -
                expect(groupObjectPrivilege.SystemPrivilegeId).toBeUndefined();
         
     | 
| 
       24 
     | 
    
         
            -
                expect(groupObjectPrivilege.ObjectId).toBeUndefined();
         
     | 
| 
       25 
     | 
    
         
            -
                expect(groupObjectPrivilege.ObjectType).toBeUndefined();
         
     | 
| 
       26 
     | 
    
         
            -
                expect(groupObjectPrivilege.CreatedAt).toBeUndefined();
         
     | 
| 
       27 
     | 
    
         
            -
                expect(groupObjectPrivilege.UpdatedAt).toBeUndefined();
         
     | 
| 
       28 
     | 
    
         
            -
                expect(groupObjectPrivilege.CreatedById).toBeUndefined();
         
     | 
| 
       29 
     | 
    
         
            -
                expect(groupObjectPrivilege.UpdatedById).toBeUndefined();
         
     | 
| 
       30 
     | 
    
         
            -
              });
         
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
              describe('init', () => {
         
     | 
| 
       33 
     | 
    
         
            -
                it('should return an instance of GroupObjectPrivilege when GroupObjectPrivilegeId is provided', async () => {
         
     | 
| 
       34 
     | 
    
         
            -
                  const GroupObjectPrivilegeId = 1;
         
     | 
| 
       35 
     | 
    
         
            -
                  const mockGroupObjectPrivilegeAttr = {
         
     | 
| 
       36 
     | 
    
         
            -
                    GroupObjectPrivilegeId,
         
     | 
| 
       37 
     | 
    
         
            -
                    GroupCode: 'groupCode',
         
     | 
| 
       38 
     | 
    
         
            -
                    SystemPrivilegeId: 'SystemPrivilegeId',
         
     | 
| 
       39 
     | 
    
         
            -
                    ObjectId: 'objectId',
         
     | 
| 
       40 
     | 
    
         
            -
                    ObjectType: 'objectType',
         
     | 
| 
       41 
     | 
    
         
            -
                    CreatedAt: new Date(),
         
     | 
| 
       42 
     | 
    
         
            -
                    UpdatedAt: new Date(),
         
     | 
| 
       43 
     | 
    
         
            -
                    CreatedById: 1,
         
     | 
| 
       44 
     | 
    
         
            -
                    UpdatedById: 2,
         
     | 
| 
       45 
     | 
    
         
            -
                  };
         
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
       47 
     | 
    
         
            -
                  jest.spyOn(GroupObjectPrivilegeRepository.prototype, 'findOne').mockResolvedValueOnce({
         
     | 
| 
       48 
     | 
    
         
            -
                    get: () => mockGroupObjectPrivilegeAttr,
         
     | 
| 
       49 
     | 
    
         
            -
                  } as any);
         
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
     | 
    
         
            -
                  const result = await GroupObjectPrivilege.init(null, GroupObjectPrivilegeId);
         
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
                  expect(result).toBeInstanceOf(GroupObjectPrivilege);
         
     | 
| 
       54 
     | 
    
         
            -
                  expect(result.GroupObjectPrivilegeId).toBe(GroupObjectPrivilegeId);
         
     | 
| 
       55 
     | 
    
         
            -
                  expect(result.GroupCode).toBe(mockGroupObjectPrivilegeAttr.GroupCode);
         
     | 
| 
       56 
     | 
    
         
            -
                  expect(result.SystemPrivilegeId).toBe(mockGroupObjectPrivilegeAttr.SystemPrivilegeId);
         
     | 
| 
       57 
     | 
    
         
            -
                  expect(result.ObjectId).toBe(mockGroupObjectPrivilegeAttr.ObjectId);
         
     | 
| 
       58 
     | 
    
         
            -
                  expect(result.ObjectType).toBe(mockGroupObjectPrivilegeAttr.ObjectType);
         
     | 
| 
       59 
     | 
    
         
            -
                  expect(result.CreatedAt).toBe(mockGroupObjectPrivilegeAttr.CreatedAt);
         
     | 
| 
       60 
     | 
    
         
            -
                  expect(result.UpdatedAt).toBe(mockGroupObjectPrivilegeAttr.UpdatedAt);
         
     | 
| 
       61 
     | 
    
         
            -
                  expect(result.CreatedById).toBe(mockGroupObjectPrivilegeAttr.CreatedById);
         
     | 
| 
       62 
     | 
    
         
            -
                  expect(result.UpdatedById).toBe(mockGroupObjectPrivilegeAttr.UpdatedById);
         
     | 
| 
       63 
     | 
    
         
            -
                });
         
     | 
| 
       64 
     | 
    
         
            -
             
     | 
| 
       65 
     | 
    
         
            -
                it('should throw an error when GroupObjectPrivilegeId is provided but no GroupObjectPrivilege is found', async () => {
         
     | 
| 
       66 
     | 
    
         
            -
                  const GroupObjectPrivilegeId = 1;
         
     | 
| 
       67 
     | 
    
         
            -
                  jest.spyOn(GroupObjectPrivilegeRepository.prototype, 'findOne').mockResolvedValueOnce(null);
         
     | 
| 
       68 
     | 
    
         
            -
             
     | 
| 
       69 
     | 
    
         
            -
                  await expect(GroupObjectPrivilege.init(null, GroupObjectPrivilegeId)).rejects.toThrow(
         
     | 
| 
       70 
     | 
    
         
            -
                    'GroupObjectPrivilege not found',
         
     | 
| 
       71 
     | 
    
         
            -
                  );
         
     | 
| 
       72 
     | 
    
         
            -
                });
         
     | 
| 
       73 
     | 
    
         
            -
             
     | 
| 
       74 
     | 
    
         
            -
                it('should return a new instance of GroupObjectPrivilege when GroupObjectPrivilegeId is not provided', async () => {
         
     | 
| 
       75 
     | 
    
         
            -
                  const result = await GroupObjectPrivilege.init();
         
     | 
| 
       76 
     | 
    
         
            -
             
     | 
| 
       77 
     | 
    
         
            -
                  expect(result).toBeInstanceOf(GroupObjectPrivilege);
         
     | 
| 
       78 
     | 
    
         
            -
                  expect(result.GroupObjectPrivilegeId).toBeUndefined();
         
     | 
| 
       79 
     | 
    
         
            -
                  expect(result.GroupCode).toBeUndefined();
         
     | 
| 
       80 
     | 
    
         
            -
                  expect(result.SystemPrivilegeId).toBeUndefined();
         
     | 
| 
       81 
     | 
    
         
            -
                  expect(result.ObjectId).toBeUndefined();
         
     | 
| 
       82 
     | 
    
         
            -
                  expect(result.ObjectType).toBeUndefined();
         
     | 
| 
       83 
     | 
    
         
            -
                  expect(result.CreatedAt).toBeUndefined();
         
     | 
| 
       84 
     | 
    
         
            -
                  expect(result.UpdatedAt).toBeUndefined();
         
     | 
| 
       85 
     | 
    
         
            -
                  expect(result.CreatedById).toBeUndefined();
         
     | 
| 
       86 
     | 
    
         
            -
                  expect(result.UpdatedById).toBeUndefined();
         
     | 
| 
       87 
     | 
    
         
            -
                });
         
     | 
| 
       88 
     | 
    
         
            -
              });
         
     | 
| 
      
 1 
     | 
    
         
            +
            import { GroupObjectPrivilegeRepository } from '../../../../src/components/group-object-privilege/group-object-privilege.repository';
         
     | 
| 
      
 2 
     | 
    
         
            +
            import { GroupObjectPrivilege } from '../../../../src/components/group-object-privilege/group-object-privilege';
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            describe('GroupObjectPrivilege', () => {
         
     | 
| 
      
 5 
     | 
    
         
            +
              let groupObjectPrivilege: GroupObjectPrivilege;
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
              beforeEach(() => {
         
     | 
| 
      
 8 
     | 
    
         
            +
                groupObjectPrivilege = new GroupObjectPrivilege();
         
     | 
| 
      
 9 
     | 
    
         
            +
              });
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              it('should create an instance of GroupObjectPrivilege', () => {
         
     | 
| 
      
 12 
     | 
    
         
            +
                expect(groupObjectPrivilege).toBeInstanceOf(GroupObjectPrivilege);
         
     | 
| 
      
 13 
     | 
    
         
            +
              });
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
              it('should have the correct TableName', () => {
         
     | 
| 
      
 16 
     | 
    
         
            +
                expect(groupObjectPrivilege.TableName).toBe('sso_GroupObjectPrivilege');
         
     | 
| 
      
 17 
     | 
    
         
            +
              });
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
              it('should have the correct properties', () => {
         
     | 
| 
      
 20 
     | 
    
         
            +
                expect(groupObjectPrivilege.ObjectName).toBeUndefined();
         
     | 
| 
      
 21 
     | 
    
         
            +
                expect(groupObjectPrivilege.GroupObjectPrivilegeId).toBeUndefined();
         
     | 
| 
      
 22 
     | 
    
         
            +
                expect(groupObjectPrivilege.GroupCode).toBeUndefined();
         
     | 
| 
      
 23 
     | 
    
         
            +
                expect(groupObjectPrivilege.SystemPrivilegeId).toBeUndefined();
         
     | 
| 
      
 24 
     | 
    
         
            +
                expect(groupObjectPrivilege.ObjectId).toBeUndefined();
         
     | 
| 
      
 25 
     | 
    
         
            +
                expect(groupObjectPrivilege.ObjectType).toBeUndefined();
         
     | 
| 
      
 26 
     | 
    
         
            +
                expect(groupObjectPrivilege.CreatedAt).toBeUndefined();
         
     | 
| 
      
 27 
     | 
    
         
            +
                expect(groupObjectPrivilege.UpdatedAt).toBeUndefined();
         
     | 
| 
      
 28 
     | 
    
         
            +
                expect(groupObjectPrivilege.CreatedById).toBeUndefined();
         
     | 
| 
      
 29 
     | 
    
         
            +
                expect(groupObjectPrivilege.UpdatedById).toBeUndefined();
         
     | 
| 
      
 30 
     | 
    
         
            +
              });
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
              describe('init', () => {
         
     | 
| 
      
 33 
     | 
    
         
            +
                it('should return an instance of GroupObjectPrivilege when GroupObjectPrivilegeId is provided', async () => {
         
     | 
| 
      
 34 
     | 
    
         
            +
                  const GroupObjectPrivilegeId = 1;
         
     | 
| 
      
 35 
     | 
    
         
            +
                  const mockGroupObjectPrivilegeAttr = {
         
     | 
| 
      
 36 
     | 
    
         
            +
                    GroupObjectPrivilegeId,
         
     | 
| 
      
 37 
     | 
    
         
            +
                    GroupCode: 'groupCode',
         
     | 
| 
      
 38 
     | 
    
         
            +
                    SystemPrivilegeId: 'SystemPrivilegeId',
         
     | 
| 
      
 39 
     | 
    
         
            +
                    ObjectId: 'objectId',
         
     | 
| 
      
 40 
     | 
    
         
            +
                    ObjectType: 'objectType',
         
     | 
| 
      
 41 
     | 
    
         
            +
                    CreatedAt: new Date(),
         
     | 
| 
      
 42 
     | 
    
         
            +
                    UpdatedAt: new Date(),
         
     | 
| 
      
 43 
     | 
    
         
            +
                    CreatedById: 1,
         
     | 
| 
      
 44 
     | 
    
         
            +
                    UpdatedById: 2,
         
     | 
| 
      
 45 
     | 
    
         
            +
                  };
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                  jest.spyOn(GroupObjectPrivilegeRepository.prototype, 'findOne').mockResolvedValueOnce({
         
     | 
| 
      
 48 
     | 
    
         
            +
                    get: () => mockGroupObjectPrivilegeAttr,
         
     | 
| 
      
 49 
     | 
    
         
            +
                  } as any);
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
                  const result = await GroupObjectPrivilege.init(null, GroupObjectPrivilegeId);
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                  expect(result).toBeInstanceOf(GroupObjectPrivilege);
         
     | 
| 
      
 54 
     | 
    
         
            +
                  expect(result.GroupObjectPrivilegeId).toBe(GroupObjectPrivilegeId);
         
     | 
| 
      
 55 
     | 
    
         
            +
                  expect(result.GroupCode).toBe(mockGroupObjectPrivilegeAttr.GroupCode);
         
     | 
| 
      
 56 
     | 
    
         
            +
                  expect(result.SystemPrivilegeId).toBe(mockGroupObjectPrivilegeAttr.SystemPrivilegeId);
         
     | 
| 
      
 57 
     | 
    
         
            +
                  expect(result.ObjectId).toBe(mockGroupObjectPrivilegeAttr.ObjectId);
         
     | 
| 
      
 58 
     | 
    
         
            +
                  expect(result.ObjectType).toBe(mockGroupObjectPrivilegeAttr.ObjectType);
         
     | 
| 
      
 59 
     | 
    
         
            +
                  expect(result.CreatedAt).toBe(mockGroupObjectPrivilegeAttr.CreatedAt);
         
     | 
| 
      
 60 
     | 
    
         
            +
                  expect(result.UpdatedAt).toBe(mockGroupObjectPrivilegeAttr.UpdatedAt);
         
     | 
| 
      
 61 
     | 
    
         
            +
                  expect(result.CreatedById).toBe(mockGroupObjectPrivilegeAttr.CreatedById);
         
     | 
| 
      
 62 
     | 
    
         
            +
                  expect(result.UpdatedById).toBe(mockGroupObjectPrivilegeAttr.UpdatedById);
         
     | 
| 
      
 63 
     | 
    
         
            +
                });
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
                it('should throw an error when GroupObjectPrivilegeId is provided but no GroupObjectPrivilege is found', async () => {
         
     | 
| 
      
 66 
     | 
    
         
            +
                  const GroupObjectPrivilegeId = 1;
         
     | 
| 
      
 67 
     | 
    
         
            +
                  jest.spyOn(GroupObjectPrivilegeRepository.prototype, 'findOne').mockResolvedValueOnce(null);
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
                  await expect(GroupObjectPrivilege.init(null, GroupObjectPrivilegeId)).rejects.toThrow(
         
     | 
| 
      
 70 
     | 
    
         
            +
                    'GroupObjectPrivilege not found',
         
     | 
| 
      
 71 
     | 
    
         
            +
                  );
         
     | 
| 
      
 72 
     | 
    
         
            +
                });
         
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
                it('should return a new instance of GroupObjectPrivilege when GroupObjectPrivilegeId is not provided', async () => {
         
     | 
| 
      
 75 
     | 
    
         
            +
                  const result = await GroupObjectPrivilege.init();
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
                  expect(result).toBeInstanceOf(GroupObjectPrivilege);
         
     | 
| 
      
 78 
     | 
    
         
            +
                  expect(result.GroupObjectPrivilegeId).toBeUndefined();
         
     | 
| 
      
 79 
     | 
    
         
            +
                  expect(result.GroupCode).toBeUndefined();
         
     | 
| 
      
 80 
     | 
    
         
            +
                  expect(result.SystemPrivilegeId).toBeUndefined();
         
     | 
| 
      
 81 
     | 
    
         
            +
                  expect(result.ObjectId).toBeUndefined();
         
     | 
| 
      
 82 
     | 
    
         
            +
                  expect(result.ObjectType).toBeUndefined();
         
     | 
| 
      
 83 
     | 
    
         
            +
                  expect(result.CreatedAt).toBeUndefined();
         
     | 
| 
      
 84 
     | 
    
         
            +
                  expect(result.UpdatedAt).toBeUndefined();
         
     | 
| 
      
 85 
     | 
    
         
            +
                  expect(result.CreatedById).toBeUndefined();
         
     | 
| 
      
 86 
     | 
    
         
            +
                  expect(result.UpdatedById).toBeUndefined();
         
     | 
| 
      
 87 
     | 
    
         
            +
                });
         
     | 
| 
      
 88 
     | 
    
         
            +
              });
         
     | 
| 
       89 
89 
     | 
    
         
             
            });
         
     |