diff --git a/.github/workflows/administration-service.yml b/.github/workflows/administration-service.yml index 046e019716..06a04535da 100644 --- a/.github/workflows/administration-service.yml +++ b/.github/workflows/administration-service.yml @@ -53,7 +53,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Login to DockerHub if: github.event_name != 'pull_request' diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index f2bf872d56..dbe9784a51 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -69,11 +69,11 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@f779452ac5af1c261dce0346a8f964149f49322b # v2.227 + uses: github/codeql-action/init@ea9e4e37992a54ee68a9622e985e60c8e8f12d9f # v2.227 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -87,7 +87,7 @@ jobs: # Automates dependency installation for Python, Ruby, and JavaScript, optimizing the CodeQL analysis setup. # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@f779452ac5af1c261dce0346a8f964149f49322b # v2.227 + uses: github/codeql-action/autobuild@ea9e4e37992a54ee68a9622e985e60c8e8f12d9f # v2.227 # ℹī¸ Command-line programs to run using the OS shell. # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun @@ -100,6 +100,6 @@ jobs: # ./location_of_script_within_repo/buildscript.sh - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@f779452ac5af1c261dce0346a8f964149f49322b # v2.227 + uses: github/codeql-action/analyze@ea9e4e37992a54ee68a9622e985e60c8e8f12d9f # v2.227 with: category: "/language:${{matrix.language}}" diff --git a/.github/workflows/dependencies.yaml b/.github/workflows/dependencies.yaml index c4ddd4c62f..2990e565ef 100644 --- a/.github/workflows/dependencies.yaml +++ b/.github/workflows/dependencies.yaml @@ -22,8 +22,22 @@ name: Check Dependencies on: push: branches: [main] + paths: + # all csproj files which include the external packages + - '**.csproj' + # dependencies file + - 'DEPENDENCIES' + # workflow file + - '.github/workflows/dependencies.yaml' pull_request: types: [opened, synchronize, reopened] + paths: + # all csproj files which include the external packages + - '**.csproj' + # dependencies file + - 'DEPENDENCIES' + # workflow file + - '.github/workflows/dependencies.yaml' workflow_dispatch: jobs: @@ -38,20 +52,20 @@ jobs: steps: - name: Set up JDK 17 - uses: actions/setup-java@b36c23c0d998641eff861008f374ee103c25ac73 # v4.4.0 + uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b # v4.5.0 with: distribution: 'temurin' java-version: '17' - name: Setup .NET Core SDK ${{ matrix.dotnet-version }} - uses: actions/setup-dotnet@6bd8b7f7774af54e05809fcc5431931b3eb1ddee # v4.0.1 + uses: actions/setup-dotnet@3e891b0cb619bf60e2c25674b222b8940e2c1c25 # v4.1.0 with: dotnet-version: ${{ matrix.dotnet-version }} # change to preview .NET 9 until fix for https://github.com/NuGet/Home/issues/12954 gets released for .NET 8 dotnet-quality: 'preview' - name: Checkout repository - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Install dependencies run: dotnet restore src diff --git a/.github/workflows/iam-seeding.yml b/.github/workflows/iam-seeding.yml index 8fe8314c85..a72f354b74 100644 --- a/.github/workflows/iam-seeding.yml +++ b/.github/workflows/iam-seeding.yml @@ -46,7 +46,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Login to DockerHub if: github.event_name != 'pull_request' diff --git a/.github/workflows/kics.yml b/.github/workflows/kics.yml index 84c40f3d6d..dd6127c3b2 100644 --- a/.github/workflows/kics.yml +++ b/.github/workflows/kics.yml @@ -42,7 +42,7 @@ jobs: security-events: write steps: - - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: KICS scan uses: checkmarx/kics-github-action@94469746ec2c43de89a42fb9d2a80070f5d25b16 # v2.1.3 @@ -69,7 +69,7 @@ jobs: # Upload findings to GitHub Advanced Security Dashboard - name: Upload SARIF file for GitHub Advanced Security Dashboard if: always() - uses: github/codeql-action/upload-sarif@f779452ac5af1c261dce0346a8f964149f49322b # v3.26.13 + uses: github/codeql-action/upload-sarif@ea9e4e37992a54ee68a9622e985e60c8e8f12d9f # v3.27.4 with: sarif_file: kicsResults/results.sarif diff --git a/.github/workflows/maintenance-service.yml b/.github/workflows/maintenance-service.yml index aa3a53fd66..2a66a7c7fc 100644 --- a/.github/workflows/maintenance-service.yml +++ b/.github/workflows/maintenance-service.yml @@ -47,7 +47,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Login to DockerHub if: github.event_name != 'pull_request' diff --git a/.github/workflows/marketplace-app-service.yml b/.github/workflows/marketplace-app-service.yml index e8a267da76..2df831ad53 100644 --- a/.github/workflows/marketplace-app-service.yml +++ b/.github/workflows/marketplace-app-service.yml @@ -53,7 +53,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Login to DockerHub if: github.event_name != 'pull_request' diff --git a/.github/workflows/notification-service.yml b/.github/workflows/notification-service.yml index 8393e513ff..09eecd2c87 100644 --- a/.github/workflows/notification-service.yml +++ b/.github/workflows/notification-service.yml @@ -50,7 +50,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Login to DockerHub if: github.event_name != 'pull_request' diff --git a/.github/workflows/nuget-package-push.yml b/.github/workflows/nuget-package-push.yml index e7bc1764b8..a96866fb7d 100644 --- a/.github/workflows/nuget-package-push.yml +++ b/.github/workflows/nuget-package-push.yml @@ -30,10 +30,10 @@ jobs: dotnet-version: ['8.0'] steps: - name: Checkout code - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Setup .NET Core SDK ${{ matrix.dotnet-version }} - uses: actions/setup-dotnet@6bd8b7f7774af54e05809fcc5431931b3eb1ddee # v4.0.1 + uses: actions/setup-dotnet@3e891b0cb619bf60e2c25674b222b8940e2c1c25 # v4.1.0 with: dotnet-version: ${{ matrix.dotnet-version }} diff --git a/.github/workflows/portal-migrations.yml b/.github/workflows/portal-migrations.yml index b1055818ea..fe2e384147 100644 --- a/.github/workflows/portal-migrations.yml +++ b/.github/workflows/portal-migrations.yml @@ -47,7 +47,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Login to DockerHub if: github.event_name != 'pull_request' diff --git a/.github/workflows/pre-checks.yml b/.github/workflows/pre-checks.yml index c31bbe4f0b..4bc26754f4 100644 --- a/.github/workflows/pre-checks.yml +++ b/.github/workflows/pre-checks.yml @@ -41,7 +41,7 @@ jobs: framework: ${{ steps.changes.outputs.framework }} steps: - name: Checkout code - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - uses: dorny/paths-filter@v3 id: changes with: @@ -58,9 +58,9 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Setup .NET Core SDK ${{ matrix.dotnet-version }} - uses: actions/setup-dotnet@6bd8b7f7774af54e05809fcc5431931b3eb1ddee # v4.0.1 + uses: actions/setup-dotnet@3e891b0cb619bf60e2c25674b222b8940e2c1c25 # v4.1.0 with: dotnet-version: ${{ matrix.dotnet-version }} - name: Install dotnet-format @@ -90,7 +90,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout code - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: fetch-depth: 0 - name: Check Package Versions diff --git a/.github/workflows/processes-worker.yml b/.github/workflows/processes-worker.yml index f5c586c520..d03c0eb71a 100644 --- a/.github/workflows/processes-worker.yml +++ b/.github/workflows/processes-worker.yml @@ -54,7 +54,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Login to DockerHub if: github.event_name != 'pull_request' diff --git a/.github/workflows/provisioning-migrations.yml b/.github/workflows/provisioning-migrations.yml index 46e07add56..a83726a9af 100644 --- a/.github/workflows/provisioning-migrations.yml +++ b/.github/workflows/provisioning-migrations.yml @@ -47,7 +47,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Login to DockerHub if: github.event_name != 'pull_request' diff --git a/.github/workflows/registration-service.yml b/.github/workflows/registration-service.yml index 5e94292e6f..0a307a6bc5 100644 --- a/.github/workflows/registration-service.yml +++ b/.github/workflows/registration-service.yml @@ -52,7 +52,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Login to DockerHub if: github.event_name != 'pull_request' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e6b108e234..692324bd5b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -68,7 +68,7 @@ jobs: dockernotice: ./docker/notice-iam-seeding.md steps: - name: Checkout - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: fetch-depth: 0 @@ -126,7 +126,7 @@ jobs: run: echo "RELEASE_VERSION=${{ github.ref_name }}" >> $GITHUB_ENV - name: Checkout repository - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Check for hotfix version id: hf-check diff --git a/.github/workflows/release_candidate.yml b/.github/workflows/release_candidate.yml index 95003c4dcb..e5e634e188 100644 --- a/.github/workflows/release_candidate.yml +++ b/.github/workflows/release_candidate.yml @@ -68,7 +68,7 @@ jobs: dockernotice: ./docker/notice-iam-seeding.md steps: - name: Checkout - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: fetch-depth: 0 diff --git a/.github/workflows/release_iam-seeding.yml b/.github/workflows/release_iam-seeding.yml index f23c7855da..eff5d3978f 100644 --- a/.github/workflows/release_iam-seeding.yml +++ b/.github/workflows/release_iam-seeding.yml @@ -37,7 +37,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Login to DockerHub if: github.event_name != 'pull_request' diff --git a/.github/workflows/release_release_candidate.yml b/.github/workflows/release_release_candidate.yml index 248b5fc76c..5832c0e7d0 100644 --- a/.github/workflows/release_release_candidate.yml +++ b/.github/workflows/release_release_candidate.yml @@ -67,7 +67,7 @@ jobs: dockernotice: ./docker/notice-iam-seeding.md steps: - name: Checkout - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: fetch-depth: 0 diff --git a/.github/workflows/services-service.yml b/.github/workflows/services-service.yml index 26669fa604..e3ca484e6e 100644 --- a/.github/workflows/services-service.yml +++ b/.github/workflows/services-service.yml @@ -52,7 +52,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Login to DockerHub if: github.event_name != 'pull_request' diff --git a/.github/workflows/sonarcloud.yml b/.github/workflows/sonarcloud.yml index 7270735c48..57f8ad626d 100644 --- a/.github/workflows/sonarcloud.yml +++ b/.github/workflows/sonarcloud.yml @@ -42,11 +42,11 @@ jobs: steps: - name: Set up JDK 17 - uses: actions/setup-java@b36c23c0d998641eff861008f374ee103c25ac73 # v4.4.0 + uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b # v4.5.0 with: distribution: 'temurin' java-version: '17' - - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis - name: Cache SonarCloud packages diff --git a/.github/workflows/test-automation.yml b/.github/workflows/test-automation.yml index 8ff6a5d5eb..7cfe1f1644 100644 --- a/.github/workflows/test-automation.yml +++ b/.github/workflows/test-automation.yml @@ -49,7 +49,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Setup JQ run: @@ -69,7 +69,7 @@ jobs: ReportPortal.config.json > temp.json mv temp.json ReportPortal.config.json - name: Setup .NET Core SDK ${{ matrix.dotnet-version }} - uses: actions/setup-dotnet@6bd8b7f7774af54e05809fcc5431931b3eb1ddee # v4.0.1 + uses: actions/setup-dotnet@3e891b0cb619bf60e2c25674b222b8940e2c1c25 # v4.1.0 with: dotnet-version: ${{ matrix.dotnet-version }} - name: Install dependencies diff --git a/.github/workflows/trivy-main.yml b/.github/workflows/trivy-main.yml index 32fcfd43de..33f700a0b0 100644 --- a/.github/workflows/trivy-main.yml +++ b/.github/workflows/trivy-main.yml @@ -51,7 +51,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Run Trivy vulnerability scanner in repo mode uses: aquasecurity/trivy-action@915b19bbe73b92a6cf82a1bc12b087c9a19a5fe2 # v0.28.0 @@ -68,7 +68,7 @@ jobs: limit-severities-for-sarif: true - name: Upload Trivy scan results to GitHub Security tab - uses: github/codeql-action/upload-sarif@f779452ac5af1c261dce0346a8f964149f49322b # v3.26.13 + uses: github/codeql-action/upload-sarif@ea9e4e37992a54ee68a9622e985e60c8e8f12d9f # v3.27.4 if: always() with: sarif_file: "trivy-results1.sarif" @@ -82,7 +82,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 # It's also possible to scan your private registry with Trivy's built-in image scan. # All you have to do is set ENV vars. @@ -105,7 +105,7 @@ jobs: - name: Upload Trivy scan results to GitHub Security tab if: always() - uses: github/codeql-action/upload-sarif@f779452ac5af1c261dce0346a8f964149f49322b # v3.26.13 + uses: github/codeql-action/upload-sarif@ea9e4e37992a54ee68a9622e985e60c8e8f12d9f # v3.27.4 with: sarif_file: "trivy-results3.sarif" @@ -118,7 +118,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 # It's also possible to scan your private registry with Trivy's built-in image scan. # All you have to do is set ENV vars. @@ -141,7 +141,7 @@ jobs: - name: Upload Trivy scan results to GitHub Security tab if: always() - uses: github/codeql-action/upload-sarif@f779452ac5af1c261dce0346a8f964149f49322b # v3.26.13 + uses: github/codeql-action/upload-sarif@ea9e4e37992a54ee68a9622e985e60c8e8f12d9f # v3.27.4 with: sarif_file: "trivy-results4.sarif" @@ -154,7 +154,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 # It's also possible to scan your private registry with Trivy's built-in image scan. # All you have to do is set ENV vars. @@ -177,7 +177,7 @@ jobs: - name: Upload Trivy scan results to GitHub Security tab if: always() - uses: github/codeql-action/upload-sarif@f779452ac5af1c261dce0346a8f964149f49322b # v3.26.13 + uses: github/codeql-action/upload-sarif@ea9e4e37992a54ee68a9622e985e60c8e8f12d9f # v3.27.4 with: sarif_file: "trivy-results5.sarif" @@ -190,7 +190,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 # It's also possible to scan your private registry with Trivy's built-in image scan. # All you have to do is set ENV vars. @@ -213,7 +213,7 @@ jobs: - name: Upload Trivy scan results to GitHub Security tab if: always() - uses: github/codeql-action/upload-sarif@f779452ac5af1c261dce0346a8f964149f49322b # v3.26.13 + uses: github/codeql-action/upload-sarif@ea9e4e37992a54ee68a9622e985e60c8e8f12d9f # v3.27.4 with: sarif_file: "trivy-results6.sarif" @@ -226,7 +226,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 # It's also possible to scan your private registry with Trivy's built-in image scan. # All you have to do is set ENV vars. @@ -249,7 +249,7 @@ jobs: - name: Upload Trivy scan results to GitHub Security tab if: always() - uses: github/codeql-action/upload-sarif@f779452ac5af1c261dce0346a8f964149f49322b # v3.26.13 + uses: github/codeql-action/upload-sarif@ea9e4e37992a54ee68a9622e985e60c8e8f12d9f # v3.27.4 with: sarif_file: "trivy-results7.sarif" @@ -262,7 +262,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 # It's also possible to scan your private registry with Trivy's built-in image scan. # All you have to do is set ENV vars. @@ -285,7 +285,7 @@ jobs: - name: Upload Trivy scan results to GitHub Security tab if: always() - uses: github/codeql-action/upload-sarif@f779452ac5af1c261dce0346a8f964149f49322b # v3.26.13 + uses: github/codeql-action/upload-sarif@ea9e4e37992a54ee68a9622e985e60c8e8f12d9f # v3.27.4 with: sarif_file: "trivy-results8.sarif" @@ -298,7 +298,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 # It's also possible to scan your private registry with Trivy's built-in image scan. # All you have to do is set ENV vars. @@ -321,7 +321,7 @@ jobs: - name: Upload Trivy scan results to GitHub Security tab if: always() - uses: github/codeql-action/upload-sarif@f779452ac5af1c261dce0346a8f964149f49322b # v3.26.13 + uses: github/codeql-action/upload-sarif@ea9e4e37992a54ee68a9622e985e60c8e8f12d9f # v3.27.4 with: sarif_file: "trivy-results9.sarif" @@ -334,7 +334,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 # It's also possible to scan your private registry with Trivy's built-in image scan. # All you have to do is set ENV vars. @@ -357,7 +357,7 @@ jobs: - name: Upload Trivy scan results to GitHub Security tab if: always() - uses: github/codeql-action/upload-sarif@f779452ac5af1c261dce0346a8f964149f49322b # v3.26.13 + uses: github/codeql-action/upload-sarif@ea9e4e37992a54ee68a9622e985e60c8e8f12d9f # v3.27.4 with: sarif_file: "trivy-results10.sarif" @@ -370,7 +370,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 # It's also possible to scan your private registry with Trivy's built-in image scan. # All you have to do is set ENV vars. @@ -392,7 +392,7 @@ jobs: limit-severities-for-sarif: true - name: Upload Trivy scan results to GitHub Security tab if: always() - uses: github/codeql-action/upload-sarif@f779452ac5af1c261dce0346a8f964149f49322b # v3.26.13 + uses: github/codeql-action/upload-sarif@ea9e4e37992a54ee68a9622e985e60c8e8f12d9f # v3.27.4 with: sarif_file: "trivy-results11.sarif" @@ -405,7 +405,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 # It's also possible to scan your private registry with Trivy's built-in image scan. # All you have to do is set ENV vars. @@ -428,6 +428,6 @@ jobs: - name: Upload Trivy scan results to GitHub Security tab if: always() - uses: github/codeql-action/upload-sarif@f779452ac5af1c261dce0346a8f964149f49322b # v3.26.13 + uses: github/codeql-action/upload-sarif@ea9e4e37992a54ee68a9622e985e60c8e8f12d9f # v3.27.4 with: sarif_file: "trivy-results12.sarif" diff --git a/.github/workflows/trivy.yml b/.github/workflows/trivy.yml index 440da57e6d..6cdf91eff2 100644 --- a/.github/workflows/trivy.yml +++ b/.github/workflows/trivy.yml @@ -51,7 +51,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Run Trivy vulnerability scanner in repo mode uses: aquasecurity/trivy-action@915b19bbe73b92a6cf82a1bc12b087c9a19a5fe2 # v0.28.0 @@ -68,7 +68,7 @@ jobs: limit-severities-for-sarif: true - name: Upload Trivy scan results to GitHub Security tab - uses: github/codeql-action/upload-sarif@f779452ac5af1c261dce0346a8f964149f49322b # v3.26.13 + uses: github/codeql-action/upload-sarif@ea9e4e37992a54ee68a9622e985e60c8e8f12d9f # v3.27.4 if: always() with: sarif_file: "trivy-results1.sarif" @@ -82,7 +82,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 # It's also possible to scan your private registry with Trivy's built-in image scan. # All you have to do is set ENV vars. @@ -105,7 +105,7 @@ jobs: - name: Upload Trivy scan results to GitHub Security tab if: always() - uses: github/codeql-action/upload-sarif@f779452ac5af1c261dce0346a8f964149f49322b # v3.26.13 + uses: github/codeql-action/upload-sarif@ea9e4e37992a54ee68a9622e985e60c8e8f12d9f # v3.27.4 with: sarif_file: "trivy-results3.sarif" @@ -118,7 +118,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 # It's also possible to scan your private registry with Trivy's built-in image scan. # All you have to do is set ENV vars. @@ -141,7 +141,7 @@ jobs: - name: Upload Trivy scan results to GitHub Security tab if: always() - uses: github/codeql-action/upload-sarif@f779452ac5af1c261dce0346a8f964149f49322b # v3.26.13 + uses: github/codeql-action/upload-sarif@ea9e4e37992a54ee68a9622e985e60c8e8f12d9f # v3.27.4 with: sarif_file: "trivy-results4.sarif" @@ -154,7 +154,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 # It's also possible to scan your private registry with Trivy's built-in image scan. # All you have to do is set ENV vars. @@ -177,7 +177,7 @@ jobs: - name: Upload Trivy scan results to GitHub Security tab if: always() - uses: github/codeql-action/upload-sarif@f779452ac5af1c261dce0346a8f964149f49322b # v3.26.13 + uses: github/codeql-action/upload-sarif@ea9e4e37992a54ee68a9622e985e60c8e8f12d9f # v3.27.4 with: sarif_file: "trivy-results5.sarif" @@ -190,7 +190,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 # It's also possible to scan your private registry with Trivy's built-in image scan. # All you have to do is set ENV vars. @@ -213,7 +213,7 @@ jobs: - name: Upload Trivy scan results to GitHub Security tab if: always() - uses: github/codeql-action/upload-sarif@f779452ac5af1c261dce0346a8f964149f49322b # v3.26.13 + uses: github/codeql-action/upload-sarif@ea9e4e37992a54ee68a9622e985e60c8e8f12d9f # v3.27.4 with: sarif_file: "trivy-results6.sarif" @@ -226,7 +226,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 # It's also possible to scan your private registry with Trivy's built-in image scan. # All you have to do is set ENV vars. @@ -249,7 +249,7 @@ jobs: - name: Upload Trivy scan results to GitHub Security tab if: always() - uses: github/codeql-action/upload-sarif@f779452ac5af1c261dce0346a8f964149f49322b # v3.26.13 + uses: github/codeql-action/upload-sarif@ea9e4e37992a54ee68a9622e985e60c8e8f12d9f # v3.27.4 with: sarif_file: "trivy-results7.sarif" @@ -262,7 +262,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 # It's also possible to scan your private registry with Trivy's built-in image scan. # All you have to do is set ENV vars. @@ -285,7 +285,7 @@ jobs: - name: Upload Trivy scan results to GitHub Security tab if: always() - uses: github/codeql-action/upload-sarif@f779452ac5af1c261dce0346a8f964149f49322b # v3.26.13 + uses: github/codeql-action/upload-sarif@ea9e4e37992a54ee68a9622e985e60c8e8f12d9f # v3.27.4 with: sarif_file: "trivy-results8.sarif" @@ -298,7 +298,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 # It's also possible to scan your private registry with Trivy's built-in image scan. # All you have to do is set ENV vars. @@ -321,7 +321,7 @@ jobs: - name: Upload Trivy scan results to GitHub Security tab if: always() - uses: github/codeql-action/upload-sarif@f779452ac5af1c261dce0346a8f964149f49322b # v3.26.13 + uses: github/codeql-action/upload-sarif@ea9e4e37992a54ee68a9622e985e60c8e8f12d9f # v3.27.4 with: sarif_file: "trivy-results9.sarif" @@ -334,7 +334,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 # It's also possible to scan your private registry with Trivy's built-in image scan. # All you have to do is set ENV vars. @@ -357,7 +357,7 @@ jobs: - name: Upload Trivy scan results to GitHub Security tab if: always() - uses: github/codeql-action/upload-sarif@f779452ac5af1c261dce0346a8f964149f49322b # v3.26.13 + uses: github/codeql-action/upload-sarif@ea9e4e37992a54ee68a9622e985e60c8e8f12d9f # v3.27.4 with: sarif_file: "trivy-results10.sarif" @@ -370,7 +370,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 # It's also possible to scan your private registry with Trivy's built-in image scan. # All you have to do is set ENV vars. @@ -393,7 +393,7 @@ jobs: - name: Upload Trivy scan results to GitHub Security tab if: always() - uses: github/codeql-action/upload-sarif@f779452ac5af1c261dce0346a8f964149f49322b # v3.26.13 + uses: github/codeql-action/upload-sarif@ea9e4e37992a54ee68a9622e985e60c8e8f12d9f # v3.27.4 with: sarif_file: "trivy-results11.sarif" @@ -406,7 +406,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 # It's also possible to scan your private registry with Trivy's built-in image scan. # All you have to do is set ENV vars. @@ -429,6 +429,6 @@ jobs: - name: Upload Trivy scan results to GitHub Security tab if: always() - uses: github/codeql-action/upload-sarif@f779452ac5af1c261dce0346a8f964149f49322b # v3.26.13 + uses: github/codeql-action/upload-sarif@ea9e4e37992a54ee68a9622e985e60c8e8f12d9f # v3.27.4 with: sarif_file: "trivy-results12.sarif" diff --git a/.github/workflows/trufflehog.yml b/.github/workflows/trufflehog.yml index 05e57ad09e..1c8d30ea2d 100644 --- a/.github/workflows/trufflehog.yml +++ b/.github/workflows/trufflehog.yml @@ -42,13 +42,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout Repository - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: fetch-depth: 0 # Ensure full clone for pull request workflows - name: TruffleHog OSS id: trufflehog - uses: trufflesecurity/trufflehog@b66c1670749c06f8d18f96bcbc5a6b80f7a7108e #v3.82.11 + uses: trufflesecurity/trufflehog@af3e68261fa87568031f65161577cc2ebe1ca669 #v3.83.7 continue-on-error: true with: path: ./ # Scan the entire repository diff --git a/DEPENDENCIES b/DEPENDENCIES index 2742e2eece..d57f61577f 100644 --- a/DEPENDENCIES +++ b/DEPENDENCIES @@ -6,14 +6,14 @@ nuget/nuget/-/Castle.Core/5.1.1, Apache-2.0, approved, #13966 nuget/nuget/-/EFCore.NamingConventions/8.0.3, Apache-2.0, approved, #13983 nuget/nuget/-/FakeItEasy/8.3.0, MIT, approved, #16328 nuget/nuget/-/Fare/2.1.1, MIT, approved, clearlydefined -nuget/nuget/-/FluentAssertions/6.12.1, MIT AND Apache-2.0 AND BSD-3-Clause AND CC-BY-3.0-US AND (GPL-2.0-only OR MIT) AND OFL-1.1 AND WTFPL, approved, #13976 +nuget/nuget/-/FluentAssertions/6.12.2, MIT AND Apache-2.0 AND BSD-3-Clause AND CC-BY-3.0-US AND (GPL-2.0-only OR MIT) AND OFL-1.1 AND WTFPL, approved, #13976 nuget/nuget/-/Flurl.Http.Signed/4.0.2, MIT, approved, #16447 nuget/nuget/-/Flurl.Signed/4.0.0, MIT, approved, #16448 nuget/nuget/-/HtmlAgilityPack/1.11.67, MIT, approved, #9293 nuget/nuget/-/Humanizer.Core/2.14.1, MIT, approved, #10060 -nuget/nuget/-/Json.More.Net/2.0.0, MIT AND OFL-1.1 AND CC-BY-SA-4.0, approved, #15173 -nuget/nuget/-/JsonPointer.Net/4.0.0, MIT, approved, clearlydefined -nuget/nuget/-/JsonSchema.Net/6.1.2, MIT AND OFL-1.1 AND CC-BY-SA-4.0, approved, #14591 +nuget/nuget/-/Json.More.Net/2.0.1.2, MIT AND OFL-1.1 AND CC-BY-SA-4.0, approved, #15173 +nuget/nuget/-/JsonPointer.Net/5.0.0, MIT AND OFL-1.1 AND CC-BY-SA-4.0, approved, #15172 +nuget/nuget/-/JsonSchema.Net/7.2.3, MIT AND CC-BY-SA-4.0 AND OFL-1.1, approved, #16329 nuget/nuget/-/Laraue.EfCoreTriggers.Common/8.1.2, MIT, approved, #16234 nuget/nuget/-/Laraue.EfCoreTriggers.PostgreSql/8.1.2, MIT, approved, #16240 nuget/nuget/-/MailKit/4.8.0, MIT AND LicenseRef-scancode-ietf AND LicenseRef-scancode-ietf-trust AND (BSD-3-Clause AND LicenseRef-scancode-ietf-trust), approved, #16444 @@ -25,8 +25,8 @@ nuget/nuget/-/NJsonSchema/11.0.2, MIT, approved, #15632 nuget/nuget/-/Namotion.Reflection/3.1.1, MIT, approved, #15634 nuget/nuget/-/Newtonsoft.Json/13.0.1, MIT AND BSD-3-Clause, approved, #3266 nuget/nuget/-/Newtonsoft.Json/13.0.3, MIT AND BSD-3-Clause, approved, #3266 -nuget/nuget/-/Npgsql.EntityFrameworkCore.PostgreSQL/8.0.10, PostgreSQL AND MIT, approved, #13972 -nuget/nuget/-/Npgsql/8.0.5, PostgreSQL, approved, #13963 +nuget/nuget/-/Npgsql.EntityFrameworkCore.PostgreSQL/8.0.11, PostgreSQL AND MIT, approved, #13972 +nuget/nuget/-/Npgsql/8.0.6, PostgreSQL, approved, #13963 nuget/nuget/-/PasswordGenerator/2.1.0, MIT, approved, #3192 nuget/nuget/-/ReportPortal.Client/3.9.0, Apache-2.0, approved, #16853 nuget/nuget/-/ReportPortal.Shared/3.9.0, Apache-2.0, approved, #16854 @@ -35,19 +35,20 @@ nuget/nuget/-/RestAssured.Net/4.4.0, Apache-2.0, approved, #16855 nuget/nuget/-/SSH.NET/2023.0.0, MIT AND (MIT AND MS-PL) AND ISC, approved, #13965 nuget/nuget/-/Serilog.AspNetCore/8.0.3, Apache-2.0 AND MIT, approved, #13967 nuget/nuget/-/Serilog.Enrichers.CorrelationId/3.0.1, MIT, approved, clearlydefined -nuget/nuget/-/Serilog.Enrichers.Environment/2.3.0, Apache-2.0, approved, #13959 -nuget/nuget/-/Serilog.Enrichers.Process/2.0.2, Apache-2.0, approved, clearlydefined +nuget/nuget/-/Serilog.Enrichers.Environment/3.0.1, Apache-2.0, approved, #17052 +nuget/nuget/-/Serilog.Enrichers.Process/3.0.0, Apache-2.0, approved, #17053 nuget/nuget/-/Serilog.Enrichers.Sensitive/1.7.3, MIT, approved, clearlydefined -nuget/nuget/-/Serilog.Enrichers.Thread/3.1.0, Apache-2.0, approved, clearlydefined +nuget/nuget/-/Serilog.Enrichers.Thread/4.0.0, Apache-2.0, approved, #17050 nuget/nuget/-/Serilog.Extensions.Hosting/8.0.0, Apache-2.0, approved, #13962 nuget/nuget/-/Serilog.Extensions.Logging/8.0.0, Apache-2.0, approved, #13985 nuget/nuget/-/Serilog.Formatting.Compact/2.0.0, Apache-2.0, approved, #13981 nuget/nuget/-/Serilog.Settings.Configuration/8.0.4, Apache-2.0, approved, #13988 nuget/nuget/-/Serilog.Sinks.Console/5.0.0, Apache-2.0, approved, #13980 -nuget/nuget/-/Serilog.Sinks.Console/5.0.1, Apache-2.0, approved, #13980 +nuget/nuget/-/Serilog.Sinks.Console/6.0.0, Apache-2.0, approved, #17054 nuget/nuget/-/Serilog.Sinks.Debug/2.0.0, Apache-2.0, approved, clearlydefined nuget/nuget/-/Serilog.Sinks.File/5.0.0, Apache-2.0, approved, #11116 nuget/nuget/-/Serilog/3.1.1, Apache-2.0, approved, #13978 +nuget/nuget/-/Serilog/4.1.0, Apache-2.0, approved, #17051 nuget/nuget/-/SharpZipLib/1.4.2, MIT AND GFDL-1.3-or-later AND (Apache-2.0 AND MIT) AND WTFPL AND bzip2-1.0.6 AND LicenseRef-Permissive-license-with-conditions AND LicenseRef-Permission-Notice, approved, #10058 nuget/nuget/-/SshNet.Security.Cryptography/1.3.0, MIT, approved, clearlydefined nuget/nuget/-/Stubble.Core/1.10.8, MIT AND BSD-2-Clause, approved, #9297 @@ -56,15 +57,15 @@ nuget/nuget/-/Swashbuckle.AspNetCore.Swagger/6.9.0, MIT AND Apache-2.0, approved nuget/nuget/-/Swashbuckle.AspNetCore.SwaggerGen/6.9.0, MIT AND Apache-2.0, approved, #16820 nuget/nuget/-/Swashbuckle.AspNetCore.SwaggerUI/6.9.0, MIT AND Apache-2.0, approved, #16818 nuget/nuget/-/Swashbuckle.AspNetCore/6.9.0, MIT AND Apache-2.0, approved, #16816 -nuget/nuget/-/Testcontainers.PostgreSql/3.10.0, MIT, approved, #16241 -nuget/nuget/-/Testcontainers/3.10.0, MIT, approved, #16236 -nuget/nuget/-/Xunit.Extensions.AssemblyFixture/2.4.1, MIT, approved, #3502 +nuget/nuget/-/Testcontainers.PostgreSql/4.0.0, MIT, approved, #17048 +nuget/nuget/-/Testcontainers/4.0.0, MIT, approved, #17049 +nuget/nuget/-/Xunit.Extensions.AssemblyFixture/2.6.0, MIT, approved, #17055 nuget/nuget/-/coverlet.collector/6.0.2, MIT, approved, #10075 nuget/nuget/-/xunit.abstractions/2.0.3, Apache-2.0, approved, clearlydefined -nuget/nuget/-/xunit.analyzers/1.11.0, Apache-2.0 AND MIT, approved, #14197 -nuget/nuget/-/xunit.assert/2.7.0, Apache-2.0 AND MIT, approved, #13971 -nuget/nuget/-/xunit.core/2.7.0, Apache-2.0, approved, #13979 -nuget/nuget/-/xunit.extensibility.core/2.7.0, Apache-2.0 AND MIT, approved, #13974 -nuget/nuget/-/xunit.extensibility.execution/2.7.0, Apache-2.0, approved, #13977 -nuget/nuget/-/xunit.runner.visualstudio/2.5.7, Apache-2.0 AND MIT, approved, #10065 -nuget/nuget/-/xunit/2.7.0, Apache-2.0 AND MIT, approved, #13969 +nuget/nuget/-/xunit.analyzers/1.16.0, Apache-2.0 AND MIT, approved, #16332 +nuget/nuget/-/xunit.assert/2.9.2, Apache-2.0, approved, #16331 +nuget/nuget/-/xunit.core/2.9.2, Apache-2.0, approved, #16330 +nuget/nuget/-/xunit.extensibility.core/2.9.2, Apache-2.0 AND MIT, approved, #16334 +nuget/nuget/-/xunit.extensibility.execution/2.9.2, Apache-2.0 AND MIT, approved, #16333 +nuget/nuget/-/xunit.runner.visualstudio/2.8.2, Apache-2.0 AND MIT, approved, #15181 +nuget/nuget/-/xunit/2.9.2, Apache-2.0 AND MIT, approved, #16327 diff --git a/docs/api/apps-service.yaml b/docs/api/apps-service.yaml index 1f07cee06b..f3f08e4eab 100644 --- a/docs/api/apps-service.yaml +++ b/docs/api/apps-service.yaml @@ -2168,7 +2168,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/AppProviderSubscriptionDetailData' + $ref: '#/components/schemas/OfferProviderSubscriptionDetailData' '403': description: User's company does not provide the app. content: @@ -2828,44 +2828,6 @@ components: description: the technicalUser Profile additionalProperties: false description: Response for the app creation - AppProviderSubscriptionDetailData: - type: object - properties: - id: - type: string - format: uuid - offerSubscriptionStatus: - $ref: '#/components/schemas/OfferSubscriptionStatusId' - name: - type: string - nullable: true - customer: - type: string - bpn: - type: string - nullable: true - contact: - type: array - items: - type: string - technicalUserData: - type: array - items: - $ref: '#/components/schemas/SubscriptionTechnicalUserData' - connectorData: - type: array - items: - $ref: '#/components/schemas/SubscriptionAssignedConnectorData' - tenantUrl: - type: string - nullable: true - appInstanceId: - type: string - processStepTypeId: - $ref: '#/components/schemas/ProcessStepTypeId' - externalService: - $ref: '#/components/schemas/SubscriptionExternalServiceData' - additionalProperties: false AppRequestModel: type: object properties: @@ -3435,6 +3397,45 @@ components: message: type: string additionalProperties: false + OfferProviderSubscriptionDetailData: + type: object + properties: + id: + type: string + format: uuid + offerSubscriptionStatus: + $ref: '#/components/schemas/OfferSubscriptionStatusId' + name: + type: string + nullable: true + customer: + type: string + bpn: + type: string + nullable: true + contact: + type: array + items: + type: string + technicalUserData: + type: array + items: + $ref: '#/components/schemas/SubscriptionTechnicalUserData' + connectorData: + type: array + items: + $ref: '#/components/schemas/SubscriptionAssignedConnectorData' + tenantUrl: + type: string + nullable: true + appInstanceId: + type: string + nullable: true + processStepTypeId: + $ref: '#/components/schemas/ProcessStepTypeId' + externalService: + $ref: '#/components/schemas/SubscriptionExternalServiceData' + additionalProperties: false OfferSorting: enum: - DateAsc diff --git a/docs/api/services-service.yaml b/docs/api/services-service.yaml index ffdcd6301a..23fb44d3df 100644 --- a/docs/api/services-service.yaml +++ b/docs/api/services-service.yaml @@ -2216,26 +2216,42 @@ components: properties: id: type: string + description: Id of the Offer format: uuid offerSubscriptionStatus: $ref: '#/components/schemas/OfferSubscriptionStatusId' name: type: string + description: Name of the Offer nullable: true customer: type: string + description: Name of the company subscribing the offer bpn: type: string + description: 'When called from /provider bpn of the company subscribing the offer, otherwise the provider company''s bpn' nullable: true contact: type: array items: type: string + description: 'When called from /provider the company admins of the subscribing company, otherwise the salesmanagers of the offer provider' technicalUserData: type: array items: $ref: '#/components/schemas/SubscriptionTechnicalUserData' + description: Information about the technical user + connectorData: + type: array + items: + $ref: '#/components/schemas/SubscriptionAssignedConnectorData' + description: '' + processStepTypeId: + $ref: '#/components/schemas/ProcessStepTypeId' + externalService: + $ref: '#/components/schemas/SubscriptionExternalServiceData' additionalProperties: false + description: Detail data for a offer subscription ServiceData: type: object properties: @@ -2380,6 +2396,10 @@ components: price: type: string description: Pricing information of the app. + providerUri: + type: string + description: Provider's homepage url or marketing url + nullable: true offerSubscriptionDetailData: type: array items: @@ -2766,6 +2786,25 @@ components: status: $ref: '#/components/schemas/OfferSubscriptionStatusId' additionalProperties: false + SubscriptionExternalServiceData: + type: object + properties: + trusted_issuer: + type: string + participant_id: + type: string + nullable: true + iatp_id: + type: string + nullable: true + did_resolver: + type: string + decentralIdentityManagementAuthUrl: + type: string + decentralIdentityManagementServiceUrl: + type: string + nullable: true + additionalProperties: false SubscriptionStatusSorting: enum: - CompanyNameAsc diff --git a/src/Portal.Backend.sln b/src/Portal.Backend.sln index 802022cfad..812fc38be1 100644 --- a/src/Portal.Backend.sln +++ b/src/Portal.Backend.sln @@ -1680,10 +1680,14 @@ Global {D666EADA-770A-42FF-B891-5745F7A6BC2F}.Debug|Any CPU.Build.0 = Debug|Any CPU {D666EADA-770A-42FF-B891-5745F7A6BC2F}.Release|x86.ActiveCfg = Release|Any CPU {D666EADA-770A-42FF-B891-5745F7A6BC2F}.Release|x86.Build.0 = Release|Any CPU + {D666EADA-770A-42FF-B891-5745F7A6BC2F}.Debug|x64.ActiveCfg = Debug|Any CPU + {D666EADA-770A-42FF-B891-5745F7A6BC2F}.Debug|x64.Build.0 = Debug|Any CPU {D666EADA-770A-42FF-B891-5745F7A6BC2F}.Debug|x86.ActiveCfg = Debug|Any CPU {D666EADA-770A-42FF-B891-5745F7A6BC2F}.Debug|x86.Build.0 = Debug|Any CPU {D666EADA-770A-42FF-B891-5745F7A6BC2F}.Release|Any CPU.ActiveCfg = Release|Any CPU {D666EADA-770A-42FF-B891-5745F7A6BC2F}.Release|Any CPU.Build.0 = Release|Any CPU + {D666EADA-770A-42FF-B891-5745F7A6BC2F}.Release|x64.ActiveCfg = Release|Any CPU + {D666EADA-770A-42FF-B891-5745F7A6BC2F}.Release|x64.Build.0 = Release|Any CPU {59E4B63B-BEA2-4CDA-98F0-13962146AEA5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {59E4B63B-BEA2-4CDA-98F0-13962146AEA5}.Debug|Any CPU.Build.0 = Debug|Any CPU {59E4B63B-BEA2-4CDA-98F0-13962146AEA5}.Debug|x64.ActiveCfg = Debug|Any CPU diff --git a/src/administration/Administration.Service/Administration.Service.csproj b/src/administration/Administration.Service/Administration.Service.csproj index d2cbb469cd..fabf070f18 100644 --- a/src/administration/Administration.Service/Administration.Service.csproj +++ b/src/administration/Administration.Service/Administration.Service.csproj @@ -39,7 +39,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/administration/Administration.Service/BusinessLogic/ConnectorsBusinessLogic.cs b/src/administration/Administration.Service/BusinessLogic/ConnectorsBusinessLogic.cs index 0de31768de..ad4daa13ab 100644 --- a/src/administration/Administration.Service/BusinessLogic/ConnectorsBusinessLogic.cs +++ b/src/administration/Administration.Service/BusinessLogic/ConnectorsBusinessLogic.cs @@ -78,9 +78,9 @@ public async Task GetCompanyConnectorData(Guid connectorId) throw NotFoundException.Create(AdministrationConnectorErrors.CONNECTOR_NOT_FOUND, new ErrorParameter[] { new("connectorId", connectorId.ToString()) }); } - if (!result.IsProviderCompany) + if (!result.IsProvidingOrHostCompany) { - throw ForbiddenException.Create(AdministrationConnectorErrors.CONNECTOR_NOT_PROVIDER_COMPANY, new ErrorParameter[] { new("companyId", companyId.ToString()), new("connectorId", connectorId.ToString()) }); + throw ForbiddenException.Create(AdministrationConnectorErrors.CONNECTOR_NOT_PROVIDER_COMPANY_NOR_HOST, new ErrorParameter[] { new("companyId", companyId.ToString()), new("connectorId", connectorId.ToString()) }); } return result.ConnectorData; diff --git a/src/administration/Administration.Service/BusinessLogic/NetworkBusinessLogic.cs b/src/administration/Administration.Service/BusinessLogic/NetworkBusinessLogic.cs index 67b6957102..203f14a787 100644 --- a/src/administration/Administration.Service/BusinessLogic/NetworkBusinessLogic.cs +++ b/src/administration/Administration.Service/BusinessLogic/NetworkBusinessLogic.cs @@ -141,6 +141,7 @@ private Guid CreatePartnerCompany(ICompanyRepository companyRepository, PartnerR { c.AddressId = address.Id; c.BusinessPartnerNumber = data.BusinessPartnerNumber?.ToUpper(); + c.Shortname = data.ShortName; }); companyRepository.CreateUpdateDeleteIdentifiers(company.Id, Enumerable.Empty<(UniqueIdentifierId, string)>(), data.UniqueIds.Select(x => (x.UniqueIdentifierId, x.Value))); diff --git a/src/administration/Administration.Service/Models/PartnerRegistrationData.cs b/src/administration/Administration.Service/Models/PartnerRegistrationData.cs index 54f5169564..3b539e923b 100644 --- a/src/administration/Administration.Service/Models/PartnerRegistrationData.cs +++ b/src/administration/Administration.Service/Models/PartnerRegistrationData.cs @@ -27,6 +27,7 @@ public record PartnerRegistrationData ( string ExternalId, string Name, + string? ShortName, [property: JsonPropertyName("bpn")] string? BusinessPartnerNumber, string City, string StreetName, @@ -37,7 +38,7 @@ public record PartnerRegistrationData IEnumerable UniqueIds, IEnumerable UserDetails, IEnumerable CompanyRoles -) : RegistrationData(Name, City, StreetName, CountryAlpha2Code, BusinessPartnerNumber, null, Region, null, StreetNumber, ZipCode, UniqueIds); +) : RegistrationData(Name, City, StreetName, CountryAlpha2Code, BusinessPartnerNumber, ShortName, Region, null, StreetNumber, ZipCode, UniqueIds); public record UserDetailData( Guid? IdentityProviderId, diff --git a/src/externalsystems/Dim.Library/Dim.Library.csproj b/src/externalsystems/Dim.Library/Dim.Library.csproj index e3f7417854..9d09809d1d 100644 --- a/src/externalsystems/Dim.Library/Dim.Library.csproj +++ b/src/externalsystems/Dim.Library/Dim.Library.csproj @@ -35,7 +35,7 @@ - + diff --git a/src/externalsystems/IssuerComponent.Library/IssuerComponent.Library.csproj b/src/externalsystems/IssuerComponent.Library/IssuerComponent.Library.csproj index 98b759eadb..d69579af1f 100644 --- a/src/externalsystems/IssuerComponent.Library/IssuerComponent.Library.csproj +++ b/src/externalsystems/IssuerComponent.Library/IssuerComponent.Library.csproj @@ -35,7 +35,7 @@ - + diff --git a/src/framework/Framework.DBAccess/Framework.DBAccess.csproj b/src/framework/Framework.DBAccess/Framework.DBAccess.csproj index dc541dd473..3d9091f695 100644 --- a/src/framework/Framework.DBAccess/Framework.DBAccess.csproj +++ b/src/framework/Framework.DBAccess/Framework.DBAccess.csproj @@ -61,6 +61,6 @@ - + diff --git a/src/framework/Framework.ErrorHandling.Web/Framework.ErrorHandling.Web.csproj b/src/framework/Framework.ErrorHandling.Web/Framework.ErrorHandling.Web.csproj index 160b181b48..cba0095092 100644 --- a/src/framework/Framework.ErrorHandling.Web/Framework.ErrorHandling.Web.csproj +++ b/src/framework/Framework.ErrorHandling.Web/Framework.ErrorHandling.Web.csproj @@ -68,7 +68,7 @@ - + diff --git a/src/framework/Framework.HttpClientExtensions/HttpAsyncResponseMessageExtension.cs b/src/framework/Framework.HttpClientExtensions/HttpAsyncResponseMessageExtension.cs index 1a841ab0de..f4110e507b 100644 --- a/src/framework/Framework.HttpClientExtensions/HttpAsyncResponseMessageExtension.cs +++ b/src/framework/Framework.HttpClientExtensions/HttpAsyncResponseMessageExtension.cs @@ -18,6 +18,7 @@ ********************************************************************************/ using Org.Eclipse.TractusX.Portal.Backend.Framework.ErrorHandling; +using System.Net.Sockets; namespace Org.Eclipse.TractusX.Portal.Backend.Framework.HttpClientExtensions; @@ -64,6 +65,10 @@ public static async ValueTask CatchingIntoServiceExceptionF ? new ServiceException($"call to external system {systemName} failed", e, (recoverOptions & RecoverOptions.REQUEST_EXCEPTION) == RecoverOptions.REQUEST_EXCEPTION) : new ServiceException($"call to external system {systemName} failed with statuscode {(int)e.StatusCode.Value}", e, e.StatusCode.Value, (recoverOptions & RecoverOptions.REQUEST_EXCEPTION) == RecoverOptions.REQUEST_EXCEPTION); } + catch (SystemException e) when (e is SocketException or IOException) + { + throw new ServiceException($"call to external system {systemName} failed due to network io", e, (recoverOptions & RecoverOptions.NETWORK) == RecoverOptions.NETWORK); + } catch (TaskCanceledException e) { throw new ServiceException($"call to external system {systemName} failed due to timeout", e, (recoverOptions & RecoverOptions.TIMEOUT) == RecoverOptions.TIMEOUT); @@ -82,7 +87,8 @@ public enum RecoverOptions REQUEST_EXCEPTION = 0b_0000_0010, TIMEOUT = 0b_0000_0100, OTHER_EXCEPTION = 0b_0000_1000, - INFRASTRUCTURE = REQUEST_EXCEPTION | TIMEOUT, - ALLWAYS = RESPONSE_RECEIVED | REQUEST_EXCEPTION | TIMEOUT | OTHER_EXCEPTION + NETWORK = 0b_0001_0000, + INFRASTRUCTURE = REQUEST_EXCEPTION | TIMEOUT | NETWORK, + ALLWAYS = RESPONSE_RECEIVED | REQUEST_EXCEPTION | TIMEOUT | NETWORK | OTHER_EXCEPTION } } diff --git a/src/framework/Framework.Logging/Framework.Logging.csproj b/src/framework/Framework.Logging/Framework.Logging.csproj index 1ba63f68eb..910fff45df 100644 --- a/src/framework/Framework.Logging/Framework.Logging.csproj +++ b/src/framework/Framework.Logging/Framework.Logging.csproj @@ -64,14 +64,14 @@ - - - + + + - + - + diff --git a/src/framework/Framework.Seeding/Framework.Seeding.csproj b/src/framework/Framework.Seeding/Framework.Seeding.csproj index aef8ac3388..e8ae444e9e 100644 --- a/src/framework/Framework.Seeding/Framework.Seeding.csproj +++ b/src/framework/Framework.Seeding/Framework.Seeding.csproj @@ -65,8 +65,8 @@ - - + + diff --git a/src/framework/Framework.Web/Framework.Web.csproj b/src/framework/Framework.Web/Framework.Web.csproj index d10bc1bbde..1d5437f9e9 100644 --- a/src/framework/Framework.Web/Framework.Web.csproj +++ b/src/framework/Framework.Web/Framework.Web.csproj @@ -72,7 +72,7 @@ - + diff --git a/src/keycloak/Keycloak.Authentication/Keycloak.Authentication.csproj b/src/keycloak/Keycloak.Authentication/Keycloak.Authentication.csproj index 1aef72f653..1b9cd18ecc 100644 --- a/src/keycloak/Keycloak.Authentication/Keycloak.Authentication.csproj +++ b/src/keycloak/Keycloak.Authentication/Keycloak.Authentication.csproj @@ -31,8 +31,8 @@ - - + + diff --git a/src/keycloak/Keycloak.Seeding/Keycloak.Seeding.csproj b/src/keycloak/Keycloak.Seeding/Keycloak.Seeding.csproj index 15933251fc..5b4f3dc1e4 100644 --- a/src/keycloak/Keycloak.Seeding/Keycloak.Seeding.csproj +++ b/src/keycloak/Keycloak.Seeding/Keycloak.Seeding.csproj @@ -39,7 +39,7 @@ - + diff --git a/src/maintenance/Maintenance.App/Maintenance.App.csproj b/src/maintenance/Maintenance.App/Maintenance.App.csproj index 398dbbacad..0a2eab6d2a 100644 --- a/src/maintenance/Maintenance.App/Maintenance.App.csproj +++ b/src/maintenance/Maintenance.App/Maintenance.App.csproj @@ -32,7 +32,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive @@ -42,7 +42,7 @@ - + diff --git a/src/marketplace/Apps.Service/Apps.Service.csproj b/src/marketplace/Apps.Service/Apps.Service.csproj index 7bc6712516..5287a1cf9d 100644 --- a/src/marketplace/Apps.Service/Apps.Service.csproj +++ b/src/marketplace/Apps.Service/Apps.Service.csproj @@ -41,7 +41,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/marketplace/Apps.Service/BusinessLogic/AppsBusinessLogic.cs b/src/marketplace/Apps.Service/BusinessLogic/AppsBusinessLogic.cs index 557a2ee413..79d4f41d5e 100644 --- a/src/marketplace/Apps.Service/BusinessLogic/AppsBusinessLogic.cs +++ b/src/marketplace/Apps.Service/BusinessLogic/AppsBusinessLogic.cs @@ -227,8 +227,8 @@ public IAsyncEnumerable GetAppAgreement(Guid appId) => _offerService.GetOfferDocumentContentAsync(appId, documentId, _settings.AppImageDocumentTypeIds, OfferTypeId.APP, cancellationToken); /// - public Task GetSubscriptionDetailForProvider(Guid appId, Guid subscriptionId) => - _offerService.GetAppSubscriptionDetailsForProviderAsync(appId, subscriptionId, OfferTypeId.APP, _settings.CompanyAdminRoles, new WalletConfigData(_settings.IssuerDid, _settings.BpnDidResolverUrl, _settings.DecentralIdentityManagementAuthUrl)); + public Task GetSubscriptionDetailForProvider(Guid appId, Guid subscriptionId) => + _offerService.GetOfferSubscriptionDetailsForProviderAsync(appId, subscriptionId, OfferTypeId.APP, _settings.CompanyAdminRoles, new WalletConfigData(_settings.IssuerDid, _settings.BpnDidResolverUrl, _settings.DecentralIdentityManagementAuthUrl)); /// public Task GetSubscriptionDetailForSubscriber(Guid appId, Guid subscriptionId) => diff --git a/src/marketplace/Apps.Service/BusinessLogic/IAppsBusinessLogic.cs b/src/marketplace/Apps.Service/BusinessLogic/IAppsBusinessLogic.cs index ec3739ed97..763b523e67 100644 --- a/src/marketplace/Apps.Service/BusinessLogic/IAppsBusinessLogic.cs +++ b/src/marketplace/Apps.Service/BusinessLogic/IAppsBusinessLogic.cs @@ -162,7 +162,7 @@ public interface IAppsBusinessLogic /// Id of the app /// Id of the subscription /// Returns the details of the subscription - Task GetSubscriptionDetailForProvider(Guid appId, Guid subscriptionId); + Task GetSubscriptionDetailForProvider(Guid appId, Guid subscriptionId); /// /// Gets the information for the subscription diff --git a/src/marketplace/Apps.Service/Controllers/AppsController.cs b/src/marketplace/Apps.Service/Controllers/AppsController.cs index ca4f0388ae..7cbaed274f 100644 --- a/src/marketplace/Apps.Service/Controllers/AppsController.cs +++ b/src/marketplace/Apps.Service/Controllers/AppsController.cs @@ -381,11 +381,11 @@ public async Task GetAppDocumentContentAsync([FromRoute] Guid appId, [Authorize(Roles = "app_management")] [Authorize(Policy = PolicyTypes.ValidCompany)] [Route("{appId}/subscription/{subscriptionId}/provider")] - [ProducesResponseType(typeof(AppProviderSubscriptionDetailData), StatusCodes.Status200OK)] + [ProducesResponseType(typeof(OfferProviderSubscriptionDetailData), StatusCodes.Status200OK)] [ProducesResponseType(typeof(ErrorResponse), StatusCodes.Status403Forbidden)] [ProducesResponseType(typeof(ErrorResponse), StatusCodes.Status404NotFound)] [PublicUrl(CompanyRoleId.APP_PROVIDER)] - public Task GetSubscriptionDetailForProvider([FromRoute] Guid appId, [FromRoute] Guid subscriptionId) => + public Task GetSubscriptionDetailForProvider([FromRoute] Guid appId, [FromRoute] Guid subscriptionId) => _appsBusinessLogic.GetSubscriptionDetailForProvider(appId, subscriptionId); /// diff --git a/src/marketplace/Offers.Library/Models/OfferProviderSubscriptionDetailData.cs b/src/marketplace/Offers.Library/Models/OfferProviderSubscriptionDetailData.cs new file mode 100644 index 0000000000..90aab1bada --- /dev/null +++ b/src/marketplace/Offers.Library/Models/OfferProviderSubscriptionDetailData.cs @@ -0,0 +1,59 @@ +/******************************************************************************** + * Copyright (c) 2024 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * SPDX-License-Identifier: Apache-2.0 + ********************************************************************************/ + +using Org.Eclipse.TractusX.Portal.Backend.PortalBackend.DBAccess.Models; +using Org.Eclipse.TractusX.Portal.Backend.PortalBackend.PortalEntities.Enums; +using System.Text.Json.Serialization; + +namespace Org.Eclipse.TractusX.Portal.Backend.Offers.Library.Models; + +/// +/// Detail data for a offer subscription +/// +/// Id of the Offer +/// Status of the offer subscription +/// Name of the Offer +/// Name of the company subscribing the offer +/// When called from /provider bpn of the company subscribing the offer, otherwise the provider company's bpn +/// When called from /provider the company admins of the subscribing company, otherwise the salesmanagers of the offer provider +/// Information about the technical user +/// Url of Tenant +/// Id of the app instance +public record OfferProviderSubscriptionDetailData( + Guid Id, + OfferSubscriptionStatusId OfferSubscriptionStatus, + string? Name, + string Customer, + string? Bpn, + IEnumerable Contact, + IEnumerable TechnicalUserData, + IEnumerable ConnectorData, + string? TenantUrl, + string? AppInstanceId, + ProcessStepTypeId? ProcessStepTypeId, + SubscriptionExternalServiceData ExternalService +); +public record SubscriptionExternalServiceData( + [property: JsonPropertyName("trusted_issuer")] string TrustedIssuer, + [property: JsonPropertyName("participant_id")] string? ParticipantId, + [property: JsonPropertyName("iatp_id")] string? IatpId, + [property: JsonPropertyName("did_resolver")] string DidResolver, + [property: JsonPropertyName("decentralIdentityManagementAuthUrl")] string DecentralIdentityManagementAuthUrl, + [property: JsonPropertyName("decentralIdentityManagementServiceUrl")] string? DecentralIdentityManagementServiceUrl +); diff --git a/src/marketplace/Offers.Library/Service/IOfferService.cs b/src/marketplace/Offers.Library/Service/IOfferService.cs index 15697e083f..169193d4c5 100644 --- a/src/marketplace/Offers.Library/Service/IOfferService.cs +++ b/src/marketplace/Offers.Library/Service/IOfferService.cs @@ -213,16 +213,6 @@ Task CreateOrUpdateOfferSubscriptionAgreementConsentAsync(Guid subscriptionId, /// Client to get the technicalUserProfiles Task UpdateTechnicalUserProfiles(Guid offerId, OfferTypeId offerTypeId, IEnumerable data, string technicalUserProfileClient); - /// - /// Gets the information for the subscription for the provider - /// - /// Id of the offer - /// Id of the subscription - /// Offer type - /// The roles of the users that will be listed as contact - /// Returns the details of the subscription - Task GetSubscriptionDetailsForProviderAsync(Guid offerId, Guid subscriptionId, OfferTypeId offerTypeId, IEnumerable contactUserRoles); - /// /// Gets the information for the subscription for the subscriber /// @@ -254,7 +244,7 @@ Task CreateOrUpdateOfferSubscriptionAgreementConsentAsync(Guid subscriptionId, /// The roles of the users that will be listed as contact /// The information for the external service data /// Returns the details of the subscription - Task GetAppSubscriptionDetailsForProviderAsync(Guid offerId, Guid subscriptionId, OfferTypeId offerTypeId, IEnumerable contactUserRoles, WalletConfigData walletData); + Task GetOfferSubscriptionDetailsForProviderAsync(Guid offerId, Guid subscriptionId, OfferTypeId offerTypeId, IEnumerable contactUserRoles, WalletConfigData walletData); /// /// Unsubscribe the Offer subscription by subscriptionId diff --git a/src/marketplace/Offers.Library/Service/OfferService.cs b/src/marketplace/Offers.Library/Service/OfferService.cs index d6bd98a8d0..436fb6441a 100644 --- a/src/marketplace/Offers.Library/Service/OfferService.cs +++ b/src/marketplace/Offers.Library/Service/OfferService.cs @@ -788,16 +788,12 @@ public async Task UpdateTechnicalUserProfiles(Guid offerId, OfferTypeId offerTyp } /// - public Task GetSubscriptionDetailsForProviderAsync(Guid offerId, Guid subscriptionId, OfferTypeId offerTypeId, IEnumerable contactUserRoles) => - GetOfferSubscriptionDetailsInternal(offerId, subscriptionId, offerTypeId, contactUserRoles, OfferCompanyRole.Provider, portalRepositories.GetInstance().GetSubscriptionDetailsForProviderAsync); - - /// - public async Task GetAppSubscriptionDetailsForProviderAsync(Guid offerId, Guid subscriptionId, OfferTypeId offerTypeId, IEnumerable contactUserRoles, WalletConfigData walletData) + public async Task GetOfferSubscriptionDetailsForProviderAsync(Guid offerId, Guid subscriptionId, OfferTypeId offerTypeId, IEnumerable contactUserRoles, WalletConfigData walletData) { - var data = await GetOfferSubscriptionDetailsInternal(offerId, subscriptionId, offerTypeId, contactUserRoles, OfferCompanyRole.Provider, portalRepositories.GetInstance().GetAppSubscriptionDetailsForProviderAsync) + var data = await GetOfferSubscriptionDetailsInternal(offerId, subscriptionId, offerTypeId, contactUserRoles, OfferCompanyRole.Provider, portalRepositories.GetInstance().GetOfferSubscriptionDetailsForProviderAsync) .ConfigureAwait(ConfigureAwaitOptions.None); - return new AppProviderSubscriptionDetailData( + return new OfferProviderSubscriptionDetailData( data.Id, data.OfferSubscriptionStatus, data.Name, diff --git a/src/marketplace/Services.Service/BusinessLogic/IServiceBusinessLogic.cs b/src/marketplace/Services.Service/BusinessLogic/IServiceBusinessLogic.cs index c45304a0c9..64a3245e42 100644 --- a/src/marketplace/Services.Service/BusinessLogic/IServiceBusinessLogic.cs +++ b/src/marketplace/Services.Service/BusinessLogic/IServiceBusinessLogic.cs @@ -130,9 +130,10 @@ public interface IServiceBusinessLogic /// /// Retrieves subscription statuses of subscribed Service of the provided user's company. /// - /// page - /// size - /// + /// page + /// size + /// optional status to filter by + /// optional name to filter by /// Returns the details of the subscription status for Service user Task> GetCompanySubscribedServiceSubscriptionStatusesForUserAsync(int page, int size, OfferSubscriptionStatusId? statusId, string? name); diff --git a/src/marketplace/Services.Service/BusinessLogic/ServiceBusinessLogic.cs b/src/marketplace/Services.Service/BusinessLogic/ServiceBusinessLogic.cs index fdb1cfabd1..3d982e6132 100644 --- a/src/marketplace/Services.Service/BusinessLogic/ServiceBusinessLogic.cs +++ b/src/marketplace/Services.Service/BusinessLogic/ServiceBusinessLogic.cs @@ -99,6 +99,7 @@ public async Task GetServiceDetailsAsync(Guid serviceId, result.Description, result.LicenseTypeId, result.Price, + result.ProviderUri, result.OfferSubscriptionDetailData, result.ServiceTypeIds, result.Documents.GroupBy(doc => doc.DocumentTypeId).ToDictionary(d => d.Key, d => d.Select(x => new DocumentData(x.DocumentId, x.DocumentName))), @@ -210,8 +211,22 @@ private static IEnumerable GetOfferStatusIds(ServiceStatusIdFilte } /// - public Task GetSubscriptionDetailForProvider(Guid serviceId, Guid subscriptionId) => - _offerService.GetSubscriptionDetailsForProviderAsync(serviceId, subscriptionId, OfferTypeId.SERVICE, _settings.CompanyAdminRoles); + public async Task GetSubscriptionDetailForProvider(Guid serviceId, Guid subscriptionId) + { + var offerSubscriptionDetails = await _offerService.GetOfferSubscriptionDetailsForProviderAsync(serviceId, subscriptionId, OfferTypeId.SERVICE, _settings.CompanyAdminRoles, new WalletConfigData(_settings.IssuerDid, _settings.BpnDidResolverUrl, _settings.DecentralIdentityManagementAuthUrl)).ConfigureAwait(ConfigureAwaitOptions.None); + return new( + offerSubscriptionDetails.Id, + offerSubscriptionDetails.OfferSubscriptionStatus, + offerSubscriptionDetails.Name, + offerSubscriptionDetails.Customer, + offerSubscriptionDetails.Bpn, + offerSubscriptionDetails.Contact, + offerSubscriptionDetails.TechnicalUserData, + offerSubscriptionDetails.ConnectorData, + offerSubscriptionDetails.ProcessStepTypeId, + offerSubscriptionDetails.ExternalService + ); + } /// public Task GetSubscriptionDetailForSubscriber(Guid serviceId, Guid subscriptionId) => diff --git a/src/marketplace/Services.Service/ServiceSettings.cs b/src/marketplace/Services.Service/ServiceSettings.cs index d90ae22f4d..9cb40b718b 100644 --- a/src/marketplace/Services.Service/ServiceSettings.cs +++ b/src/marketplace/Services.Service/ServiceSettings.cs @@ -168,6 +168,15 @@ public class ServiceSettings [Required] [DistinctValues("x => x.ClientId")] public IEnumerable DimUserRoles { get; set; } = null!; + + [Required(AllowEmptyStrings = true)] + public string DecentralIdentityManagementAuthUrl { get; set; } = null!; + + [Required(AllowEmptyStrings = true)] + public string IssuerDid { get; set; } = null!; + + [Required(AllowEmptyStrings = true)] + public string BpnDidResolverUrl { get; set; } = null!; } public static class ServiceSettingsExtension diff --git a/src/marketplace/Services.Service/ViewModels/ProviderSubscriptionDetailData.cs b/src/marketplace/Services.Service/ViewModels/ProviderSubscriptionDetailData.cs new file mode 100644 index 0000000000..95b97dd579 --- /dev/null +++ b/src/marketplace/Services.Service/ViewModels/ProviderSubscriptionDetailData.cs @@ -0,0 +1,50 @@ +/******************************************************************************** + * Copyright (c) 2024 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * SPDX-License-Identifier: Apache-2.0 + ********************************************************************************/ + +using Org.Eclipse.TractusX.Portal.Backend.Offers.Library.Models; +using Org.Eclipse.TractusX.Portal.Backend.PortalBackend.DBAccess.Models; +using Org.Eclipse.TractusX.Portal.Backend.PortalBackend.PortalEntities.Enums; + +namespace Org.Eclipse.TractusX.Portal.Backend.Services.Service; + +/// +/// Detail data for a offer subscription +/// +/// Id of the Offer +/// Status of the offer subscription +/// Name of the Offer +/// Name of the company subscribing the offer +/// When called from /provider bpn of the company subscribing the offer, otherwise the provider company's bpn +/// When called from /provider the company admins of the subscribing company, otherwise the salesmanagers of the offer provider +/// Information about the technical user +/// +/// +/// +public record ProviderSubscriptionDetailData( + Guid Id, + OfferSubscriptionStatusId OfferSubscriptionStatus, + string? Name, + string Customer, + string? Bpn, + IEnumerable Contact, + IEnumerable TechnicalUserData, + IEnumerable ConnectorData, + ProcessStepTypeId? ProcessStepTypeId, + SubscriptionExternalServiceData ExternalService +); diff --git a/src/marketplace/Services.Service/ViewModels/ServiceDetailResponse.cs b/src/marketplace/Services.Service/ViewModels/ServiceDetailResponse.cs index 5d58306b09..acc9563f56 100644 --- a/src/marketplace/Services.Service/ViewModels/ServiceDetailResponse.cs +++ b/src/marketplace/Services.Service/ViewModels/ServiceDetailResponse.cs @@ -34,6 +34,7 @@ namespace Org.Eclipse.TractusX.Portal.Backend.Services.Service.ViewModels; /// The description of the service. /// LicenseType for offer /// Pricing information of the app. +/// Provider's homepage url or marketing url /// Detail Data of the offer subscription /// Collection of the assigned serviceTypeIds. /// documents assigned to offer @@ -48,6 +49,7 @@ public record ServiceDetailResponse( string? Description, LicenseTypeId LicenseType, string Price, + string? ProviderUri, IEnumerable OfferSubscriptionDetailData, IEnumerable ServiceTypes, IDictionary> Documents, diff --git a/src/marketplace/Services.Service/appsettings.json b/src/marketplace/Services.Service/appsettings.json index c8812dfc86..26e2f4f03c 100644 --- a/src/marketplace/Services.Service/appsettings.json +++ b/src/marketplace/Services.Service/appsettings.json @@ -56,6 +56,9 @@ }, "Services": { "BasePortalAddress": "https://portal.example.org", + "DecentralIdentityManagementAuthUrl": "", + "IssuerDid": "", + "BpnDidResolverUrl": "", "ServiceOverviewAddress": "https://portal.example.org", "CatenaAdminRoles": [], "ServiceAccountRoles": [], diff --git a/src/notifications/Notifications.Service/Notifications.Service.csproj b/src/notifications/Notifications.Service/Notifications.Service.csproj index f438ae6657..191e16e72e 100644 --- a/src/notifications/Notifications.Service/Notifications.Service.csproj +++ b/src/notifications/Notifications.Service/Notifications.Service.csproj @@ -19,16 +19,17 @@ - - Org.Eclipse.TractusX.Portal.Backend.Notifications.Service - net8.0 - enable - enable - Linux - ..\..\.. - True - 53be9d36-5a45-441f-8f48-772ae6e64ca2 - Org.Eclipse.TractusX.Portal.Backend.Notifications.Service + + Org.Eclipse.TractusX.Portal.Backend.Notifications.Service + Org.Eclipse.TractusX.Portal.Backend.Notifications.Service + net8.0 + enable + enable + Linux + ..\..\.. + True + 53be9d36-5a45-441f-8f48-772ae6e64ca2 + CS1591 diff --git a/src/portalbackend/PortalBackend.DBAccess/Models/OfferDetailData.cs b/src/portalbackend/PortalBackend.DBAccess/Models/OfferDetailData.cs index 7df8446477..63b1b9395f 100644 --- a/src/portalbackend/PortalBackend.DBAccess/Models/OfferDetailData.cs +++ b/src/portalbackend/PortalBackend.DBAccess/Models/OfferDetailData.cs @@ -51,6 +51,7 @@ public record OfferDetailData( /// Contact email address. /// The description of the service. /// Pricing information of the app. +/// Provider's homepage url or marketing url /// Detail Data of the offer subscription /// Collection of the assigned serviceTypeIds. /// Collections of the Document type Data. @@ -64,6 +65,7 @@ public record ServiceDetailData( string? ContactEmail, string? Description, string Price, + string? ProviderUri, IEnumerable OfferSubscriptionDetailData, IEnumerable ServiceTypeIds, IEnumerable Documents, diff --git a/src/portalbackend/PortalBackend.DBAccess/Models/OfferSubscriptionDetailData.cs b/src/portalbackend/PortalBackend.DBAccess/Models/OfferSubscriptionDetailData.cs index f7b8ca48d4..162ff7dfea 100644 --- a/src/portalbackend/PortalBackend.DBAccess/Models/OfferSubscriptionDetailData.cs +++ b/src/portalbackend/PortalBackend.DBAccess/Models/OfferSubscriptionDetailData.cs @@ -29,62 +29,6 @@ public record SubscriptionTechnicalUserData( IEnumerable Permissions ); -/// -/// Detail data for a offer subscription -/// -/// Id of the Offer -/// Status of the offer subscription -/// Name of the Offer -/// Name of the company subscribing the offer -/// When called from /provider bpn of the company subscribing the offer, otherwise the provider company's bpn -/// When called from /provider the company admins of the subscribing company, otherwise the salesmanagers of the offer provider -/// Information about the technical user -public record ProviderSubscriptionDetailData( - Guid Id, - OfferSubscriptionStatusId OfferSubscriptionStatus, - string? Name, - string Customer, - string? Bpn, - IEnumerable Contact, - IEnumerable TechnicalUserData -); - -/// -/// Detail data for a offer subscription -/// -/// Id of the Offer -/// Status of the offer subscription -/// Name of the Offer -/// Name of the company subscribing the offer -/// When called from /provider bpn of the company subscribing the offer, otherwise the provider company's bpn -/// When called from /provider the company admins of the subscribing company, otherwise the salesmanagers of the offer provider -/// Information about the technical user -/// Url of Tenant -/// Id of the app instance -public record AppProviderSubscriptionDetailData( - Guid Id, - OfferSubscriptionStatusId OfferSubscriptionStatus, - string? Name, - string Customer, - string? Bpn, - IEnumerable Contact, - IEnumerable TechnicalUserData, - IEnumerable ConnectorData, - string? TenantUrl, - string AppInstanceId, - ProcessStepTypeId? ProcessStepTypeId, - SubscriptionExternalServiceData ExternalService -); - -public record SubscriptionExternalServiceData( - [property: JsonPropertyName("trusted_issuer")] string TrustedIssuer, - [property: JsonPropertyName("participant_id")] string? ParticipantId, - [property: JsonPropertyName("iatp_id")] string? IatpId, - [property: JsonPropertyName("did_resolver")] string DidResolver, - [property: JsonPropertyName("decentralIdentityManagementAuthUrl")] string DecentralIdentityManagementAuthUrl, - [property: JsonPropertyName("decentralIdentityManagementServiceUrl")] string? DecentralIdentityManagementServiceUrl -); - /// /// Detail data for a offer subscription /// @@ -127,7 +71,7 @@ public record SubscriptionAssignedConnectorData( /// Information about the technical user /// Url of Tenant /// Id of the app instance -public record AppProviderSubscriptionDetail( +public record OfferProviderSubscriptionDetail( Guid Id, OfferSubscriptionStatusId OfferSubscriptionStatus, string? Name, @@ -136,7 +80,7 @@ public record AppProviderSubscriptionDetail( IEnumerable Contact, IEnumerable TechnicalUserData, string? TenantUrl, - string AppInstanceId, + string? AppInstanceId, IEnumerable<(ProcessStepTypeId ProcessStepTypeId, ProcessStepStatusId ProcessStepStatusId)> ProcessSteps, IEnumerable ConnectorData, ExternalServiceData? ExternalServiceData diff --git a/src/portalbackend/PortalBackend.DBAccess/PortalBackend.DBAccess.csproj b/src/portalbackend/PortalBackend.DBAccess/PortalBackend.DBAccess.csproj index 9717dcffd8..1e0b8f9e53 100644 --- a/src/portalbackend/PortalBackend.DBAccess/PortalBackend.DBAccess.csproj +++ b/src/portalbackend/PortalBackend.DBAccess/PortalBackend.DBAccess.csproj @@ -33,7 +33,7 @@ - + diff --git a/src/portalbackend/PortalBackend.DBAccess/Repositories/ConnectorsRepository.cs b/src/portalbackend/PortalBackend.DBAccess/Repositories/ConnectorsRepository.cs index e6bcbf1796..e6e84fdf09 100644 --- a/src/portalbackend/PortalBackend.DBAccess/Repositories/ConnectorsRepository.cs +++ b/src/portalbackend/PortalBackend.DBAccess/Repositories/ConnectorsRepository.cs @@ -84,7 +84,7 @@ public class ConnectorsRepository(PortalDbContext dbContext) : IConnectorsReposi c.ConnectorUrl) ).SingleOrDefaultAsync(); - public Task<(ConnectorData ConnectorData, bool IsProviderCompany)> GetConnectorByIdForCompany(Guid connectorId, Guid companyId) => + public Task<(ConnectorData ConnectorData, bool IsProvidingOrHostCompany)> GetConnectorByIdForCompany(Guid connectorId, Guid companyId) => dbContext.Connectors .AsNoTracking() .Where(connector => connector.Id == connectorId && connector.StatusId != ConnectorStatusId.INACTIVE) @@ -104,7 +104,7 @@ public class ConnectorsRepository(PortalDbContext dbContext) : IConnectorsReposi connector.TechnicalUser.ClientClientId, connector.TechnicalUser.Description), connector.ConnectorUrl), - connector.ProviderId == companyId + connector.ProviderId == companyId || connector.HostId == companyId )) .SingleOrDefaultAsync(); @@ -130,11 +130,11 @@ public Connector CreateConnector(string name, string location, string connectorU public IAsyncEnumerable<(string BusinessPartnerNumber, string ConnectorEndpoint)> GetConnectorEndPointDataAsync(IEnumerable bpns) => dbContext.Connectors .AsNoTracking() - .Where(connector => connector.StatusId == ConnectorStatusId.ACTIVE && (!bpns.Any() || bpns.Contains(connector.Provider!.BusinessPartnerNumber))) - .OrderBy(connector => connector.ProviderId) + .Where(connector => connector.StatusId == ConnectorStatusId.ACTIVE && (!bpns.Any() || bpns.Contains(connector.Host!.BusinessPartnerNumber))) + .OrderBy(connector => connector.HostId) .Select(connector => new ValueTuple ( - connector.Provider!.BusinessPartnerNumber!, + connector.Host!.BusinessPartnerNumber!, connector.ConnectorUrl )) .AsAsyncEnumerable(); diff --git a/src/portalbackend/PortalBackend.DBAccess/Repositories/IConnectorsRepository.cs b/src/portalbackend/PortalBackend.DBAccess/Repositories/IConnectorsRepository.cs index d8180de151..66de561158 100644 --- a/src/portalbackend/PortalBackend.DBAccess/Repositories/IConnectorsRepository.cs +++ b/src/portalbackend/PortalBackend.DBAccess/Repositories/IConnectorsRepository.cs @@ -43,7 +43,7 @@ public interface IConnectorsRepository /// Pagination.Source of connectors that allows transformation. Func?>> GetManagedConnectorsForCompany(Guid companyId); - Task<(ConnectorData ConnectorData, bool IsProviderCompany)> GetConnectorByIdForCompany(Guid connectorId, Guid companyId); + public Task<(ConnectorData ConnectorData, bool IsProvidingOrHostCompany)> GetConnectorByIdForCompany(Guid connectorId, Guid companyId); Task<(ConnectorInformationData ConnectorInformationData, bool IsProviderUser)> GetConnectorInformationByIdForIamUser(Guid connectorId, Guid userCompanyId); diff --git a/src/portalbackend/PortalBackend.DBAccess/Repositories/IOfferSubscriptionsRepository.cs b/src/portalbackend/PortalBackend.DBAccess/Repositories/IOfferSubscriptionsRepository.cs index d29a9cb2c1..2b569b793b 100644 --- a/src/portalbackend/PortalBackend.DBAccess/Repositories/IOfferSubscriptionsRepository.cs +++ b/src/portalbackend/PortalBackend.DBAccess/Repositories/IOfferSubscriptionsRepository.cs @@ -83,17 +83,6 @@ public interface IOfferSubscriptionsRepository /// Returns an IAsyncEnumerable of app data IAsyncEnumerable<(Guid OfferId, Guid SubscriptionId, string? OfferName, string SubscriptionUrl, Guid LeadPictureId, string Provider)> GetAllBusinessAppDataForUserIdAsync(Guid userId); - /// - /// Gets the offer details for the offer subscription for a provider company user - /// - /// Id of the offer - /// Id of the subscription - /// Id of the user company - /// Offer type - /// Ids of the user roles the contacts should be in - /// Returns details for the offer subscription - Task<(bool Exists, bool IsUserOfCompany, ProviderSubscriptionDetailData? Details)> GetSubscriptionDetailsForProviderAsync(Guid offerId, Guid subscriptionId, Guid userCompanyId, OfferTypeId offerTypeId, IEnumerable userRoleIds); - /// /// Gets the app details for the offer subscription for a provider company user /// @@ -103,7 +92,7 @@ public interface IOfferSubscriptionsRepository /// Offer type /// Ids of the user roles the contacts should be in /// Returns details for the offer subscription - Task<(bool Exists, bool IsUserOfCompany, AppProviderSubscriptionDetail? Details)> GetAppSubscriptionDetailsForProviderAsync(Guid offerId, Guid subscriptionId, Guid userCompanyId, OfferTypeId offerTypeId, IEnumerable userRoleIds); + Task<(bool Exists, bool IsUserOfCompany, OfferProviderSubscriptionDetail? Details)> GetOfferSubscriptionDetailsForProviderAsync(Guid offerId, Guid subscriptionId, Guid userCompanyId, OfferTypeId offerTypeId, IEnumerable userRoleIds); /// /// Gets the offer details for the offer subscription for a subscribing company user diff --git a/src/portalbackend/PortalBackend.DBAccess/Repositories/OfferRepository.cs b/src/portalbackend/PortalBackend.DBAccess/Repositories/OfferRepository.cs index 350e0fdc56..4e1e84ed5d 100644 --- a/src/portalbackend/PortalBackend.DBAccess/Repositories/OfferRepository.cs +++ b/src/portalbackend/PortalBackend.DBAccess/Repositories/OfferRepository.cs @@ -68,6 +68,7 @@ public IAsyncEnumerable GetAllActiveAppsAsync(string? languageSho dbContext.Offers.AsNoTracking() .AsSplitQuery() .Where(offer => offer.DateReleased.HasValue && offer.DateReleased <= DateTime.UtcNow && offer.OfferTypeId == OfferTypeId.APP && offer.OfferStatusId == OfferStatusId.ACTIVE) + .OrderByDescending(x => x.DateReleased) .Select(a => new ActiveAppData( a.Id, a.Name, @@ -278,6 +279,7 @@ public void RemoveAppLanguages(IEnumerable<(Guid appId, string languageShortName offer.ContactEmail, offer.OfferDescriptions.SingleOrDefault(d => d.LanguageShortName == languageShortName)!.DescriptionLong, offer.OfferLicenses.FirstOrDefault()!.Licensetext, + offer.MarketingUrl, offer.OfferSubscriptions .Where(os => os.CompanyId == userCompanyId) .Select(x => new OfferSubscriptionStateDetailData(x.Id, x.OfferSubscriptionStatusId)), diff --git a/src/portalbackend/PortalBackend.DBAccess/Repositories/OfferSubscriptionsRepository.cs b/src/portalbackend/PortalBackend.DBAccess/Repositories/OfferSubscriptionsRepository.cs index e9975890e8..04edf67fec 100644 --- a/src/portalbackend/PortalBackend.DBAccess/Repositories/OfferSubscriptionsRepository.cs +++ b/src/portalbackend/PortalBackend.DBAccess/Repositories/OfferSubscriptionsRepository.cs @@ -166,9 +166,10 @@ public OfferSubscription AttachAndModifyOfferSubscription(Guid offerSubscription /// public IAsyncEnumerable<(Guid OfferId, Guid SubscriptionId, string? OfferName, string SubscriptionUrl, Guid LeadPictureId, string Provider)> GetAllBusinessAppDataForUserIdAsync(Guid userId) => dbContext.CompanyUsers.AsNoTracking() - .Where(user => user.Id == userId) + .Where(user => user.Id == userId && user.Identity!.IdentityTypeId == IdentityTypeId.COMPANY_USER) .SelectMany(user => user.Identity!.Company!.OfferSubscriptions.Where(subscription => - subscription.Offer!.UserRoles.Any(ur => ur.IdentityAssignedRoles.Any(cu => cu.IdentityId == user.Id && cu.Identity!.IdentityTypeId == IdentityTypeId.COMPANY_USER)) && + subscription.Offer!.OfferTypeId == OfferTypeId.APP && + subscription.Offer.UserRoles.Any(ur => ur.IdentityAssignedRoles.Any(iar => iar.IdentityId == userId)) && subscription.AppSubscriptionDetail!.AppInstance != null && subscription.AppSubscriptionDetail.AppSubscriptionUrl != null)) .Select(offerSubscription => new ValueTuple( @@ -180,33 +181,7 @@ public OfferSubscription AttachAndModifyOfferSubscription(Guid offerSubscription offerSubscription.Offer!.ProviderCompany!.Name )).ToAsyncEnumerable(); - /// - public Task<(bool Exists, bool IsUserOfCompany, ProviderSubscriptionDetailData? Details)> GetSubscriptionDetailsForProviderAsync(Guid offerId, Guid subscriptionId, Guid userCompanyId, OfferTypeId offerTypeId, IEnumerable userRoleIds) => - dbContext.OfferSubscriptions - .AsSplitQuery() - .Where(os => os.Id == subscriptionId && os.OfferId == offerId && os.Offer!.OfferTypeId == offerTypeId) - .Select(os => new - { - IsProviderCompany = os.Offer!.ProviderCompanyId == userCompanyId, - Subscription = os, - Company = os.Company - }) - .Select(x => new ValueTuple( - true, - x.IsProviderCompany, - x.IsProviderCompany - ? new ProviderSubscriptionDetailData( - x.Subscription.OfferId, - x.Subscription.OfferSubscriptionStatusId, - x.Subscription.Offer!.Name, - x.Company!.Name, - x.Company.BusinessPartnerNumber, - x.Company.Identities.Where(x => x.IdentityTypeId == IdentityTypeId.COMPANY_USER).Select(i => i.CompanyUser!).Where(cu => cu.Email != null && cu.Identity!.IdentityAssignedRoles.Select(ur => ur.UserRole!).Any(ur => userRoleIds.Contains(ur.Id))).Select(cu => cu.Email!), - x.Subscription.Technicalusers.Select(sa => new SubscriptionTechnicalUserData(sa.Id, sa.ClientClientId, sa.Identity!.IdentityAssignedRoles.Select(ur => ur.UserRole!).Select(ur => ur.UserRoleText)))) - : null)) - .SingleOrDefaultAsync(); - - public Task<(bool Exists, bool IsUserOfCompany, AppProviderSubscriptionDetail? Details)> GetAppSubscriptionDetailsForProviderAsync(Guid offerId, Guid subscriptionId, Guid userCompanyId, OfferTypeId offerTypeId, IEnumerable userRoleIds) => + public Task<(bool Exists, bool IsUserOfCompany, OfferProviderSubscriptionDetail? Details)> GetOfferSubscriptionDetailsForProviderAsync(Guid offerId, Guid subscriptionId, Guid userCompanyId, OfferTypeId offerTypeId, IEnumerable userRoleIds) => dbContext.OfferSubscriptions .AsSplitQuery() .Where(os => os.Id == subscriptionId && os.OfferId == offerId && os.Offer!.OfferTypeId == offerTypeId) @@ -216,11 +191,11 @@ public OfferSubscription AttachAndModifyOfferSubscription(Guid offerSubscription Subscription = os, Company = os.Company }) - .Select(x => new ValueTuple( + .Select(x => new ValueTuple( true, x.IsProviderCompany, x.IsProviderCompany - ? new AppProviderSubscriptionDetail( + ? new OfferProviderSubscriptionDetail( x.Subscription.OfferId, x.Subscription.OfferSubscriptionStatusId, x.Subscription.Offer!.Name, @@ -228,8 +203,8 @@ public OfferSubscription AttachAndModifyOfferSubscription(Guid offerSubscription x.Company.BusinessPartnerNumber, x.Company.Identities.Where(i => i.IdentityTypeId == IdentityTypeId.COMPANY_USER).Select(id => id.CompanyUser!).Where(cu => cu.Email != null && cu.Identity!.IdentityAssignedRoles.Select(ur => ur.UserRole!).Any(ur => userRoleIds.Contains(ur.Id))).Select(cu => cu.Email!), x.Subscription.Technicalusers.Select(sa => new SubscriptionTechnicalUserData(sa.Id, sa.Name, sa.Identity!.IdentityAssignedRoles.Select(ur => ur.UserRole!).Select(ur => ur.UserRoleText))), - x.Subscription.AppSubscriptionDetail!.AppSubscriptionUrl, - x.Subscription.AppSubscriptionDetail!.AppInstance!.IamClient!.ClientClientId, + offerTypeId == OfferTypeId.APP ? x.Subscription.AppSubscriptionDetail!.AppSubscriptionUrl : null, + offerTypeId == OfferTypeId.APP ? x.Subscription.AppSubscriptionDetail!.AppInstance!.IamClient!.ClientClientId : null, x.Subscription.Process!.ProcessSteps .Where(ps => ps.ProcessStepStatusId == ProcessStepStatusId.TODO) .Select(ps => new ValueTuple( diff --git a/src/portalbackend/PortalBackend.Migrations/PortalBackend.Migrations.csproj b/src/portalbackend/PortalBackend.Migrations/PortalBackend.Migrations.csproj index 8b6e3c81d3..d97efb9367 100644 --- a/src/portalbackend/PortalBackend.Migrations/PortalBackend.Migrations.csproj +++ b/src/portalbackend/PortalBackend.Migrations/PortalBackend.Migrations.csproj @@ -33,7 +33,7 @@ CS1591 - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/portalbackend/PortalBackend.PortalEntities/Auditing/EntityTypeBuilderV1Extension.cs b/src/portalbackend/PortalBackend.PortalEntities/Auditing/EntityTypeBuilderV1Extension.cs index 5c059a2f61..42c9bee168 100644 --- a/src/portalbackend/PortalBackend.PortalEntities/Auditing/EntityTypeBuilderV1Extension.cs +++ b/src/portalbackend/PortalBackend.PortalEntities/Auditing/EntityTypeBuilderV1Extension.cs @@ -101,9 +101,9 @@ private static MemberInitExpression CreateAuditEntityExpression(IE { var memberBindings = sourceProperties.Select(p => CreateMemberAssignment(typeof(TAuditEntity).GetMember(p.Name)[0], Expression.Property(entity, p))) - .Append(CreateMemberAssignment(typeof(TAuditEntity).GetMember(AuditPropertyV1Names.AuditV1Id.ToString())[0], Expression.New(typeof(Guid)))) + .Append(CreateMemberAssignment(typeof(TAuditEntity).GetMember(AuditPropertyV1Names.AuditV1Id.ToString())[0], Expression.Call(typeof(Guid).GetMethod(nameof(Guid.NewGuid), BindingFlags.Public | BindingFlags.Static)!))) .Append(CreateMemberAssignment(typeof(TAuditEntity).GetMember(AuditPropertyV1Names.AuditV1OperationId.ToString())[0], Expression.Constant(auditOperationId))) - .Append(CreateMemberAssignment(typeof(TAuditEntity).GetMember(AuditPropertyV1Names.AuditV1DateLastChanged.ToString())[0], Expression.New(typeof(DateTimeOffset)))); + .Append(CreateMemberAssignment(typeof(TAuditEntity).GetMember(AuditPropertyV1Names.AuditV1DateLastChanged.ToString())[0], Expression.MakeMemberAccess(null, typeof(DateTimeOffset).GetProperty(nameof(DateTimeOffset.UtcNow))!))); if (lastEditorProperty != null) { diff --git a/src/portalbackend/PortalBackend.PortalEntities/Entities/CompanyUserAssignedRole.cs b/src/portalbackend/PortalBackend.PortalEntities/Entities/IdentityAssignedRole.cs similarity index 98% rename from src/portalbackend/PortalBackend.PortalEntities/Entities/CompanyUserAssignedRole.cs rename to src/portalbackend/PortalBackend.PortalEntities/Entities/IdentityAssignedRole.cs index f53873078c..a67199dbca 100644 --- a/src/portalbackend/PortalBackend.PortalEntities/Entities/CompanyUserAssignedRole.cs +++ b/src/portalbackend/PortalBackend.PortalEntities/Entities/IdentityAssignedRole.cs @@ -1,5 +1,4 @@ /******************************************************************************** - * Copyright (c) 2022 BMW Group AG * Copyright (c) 2022 Contributors to the Eclipse Foundation * * See the NOTICE file(s) distributed with this work for additional diff --git a/src/portalbackend/PortalBackend.PortalEntities/Enums/CompanyServiceAccountKindId.cs b/src/portalbackend/PortalBackend.PortalEntities/Enums/TechnicalUserKindId.cs similarity index 100% rename from src/portalbackend/PortalBackend.PortalEntities/Enums/CompanyServiceAccountKindId.cs rename to src/portalbackend/PortalBackend.PortalEntities/Enums/TechnicalUserKindId.cs diff --git a/src/portalbackend/PortalBackend.PortalEntities/Enums/CompanyServiceAccountTypeId.cs b/src/portalbackend/PortalBackend.PortalEntities/Enums/TechnicalUserTypeId.cs similarity index 96% rename from src/portalbackend/PortalBackend.PortalEntities/Enums/CompanyServiceAccountTypeId.cs rename to src/portalbackend/PortalBackend.PortalEntities/Enums/TechnicalUserTypeId.cs index 031114d321..723b027088 100644 --- a/src/portalbackend/PortalBackend.PortalEntities/Enums/CompanyServiceAccountTypeId.cs +++ b/src/portalbackend/PortalBackend.PortalEntities/Enums/TechnicalUserTypeId.cs @@ -1,5 +1,4 @@ /******************************************************************************** - * Copyright (c) 2022 BMW Group AG * Copyright (c) 2022 Contributors to the Eclipse Foundation * * See the NOTICE file(s) distributed with this work for additional diff --git a/src/portalbackend/PortalBackend.PortalEntities/PortalBackend.PortalEntities.csproj b/src/portalbackend/PortalBackend.PortalEntities/PortalBackend.PortalEntities.csproj index b585ab0669..692bac8315 100644 --- a/src/portalbackend/PortalBackend.PortalEntities/PortalBackend.PortalEntities.csproj +++ b/src/portalbackend/PortalBackend.PortalEntities/PortalBackend.PortalEntities.csproj @@ -28,11 +28,11 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all - + diff --git a/src/processes/Processes.ProcessIdentity/Processes.ProcessIdentity.csproj b/src/processes/Processes.ProcessIdentity/Processes.ProcessIdentity.csproj index d5e64a20b1..bf3547b4d2 100644 --- a/src/processes/Processes.ProcessIdentity/Processes.ProcessIdentity.csproj +++ b/src/processes/Processes.ProcessIdentity/Processes.ProcessIdentity.csproj @@ -25,7 +25,7 @@ Org.Eclipse.TractusX.Portal.Backend.Processes.ProcessIdentity - + diff --git a/src/processes/Processes.Worker.Library/ProcessExecutionService.cs b/src/processes/Processes.Worker.Library/ProcessExecutionService.cs index 03aae8ac07..d2a00a32d0 100644 --- a/src/processes/Processes.Worker.Library/ProcessExecutionService.cs +++ b/src/processes/Processes.Worker.Library/ProcessExecutionService.cs @@ -106,6 +106,11 @@ public async Task ExecuteAsync(CancellationToken stoppingToken) } _logger.LogInformation("finished processing process {processId}", process.Id); } + catch (SystemException ex) when (ex is not OutOfMemoryException) + { + _logger.LogCritical(ex, "Critical error : processing process {processId} type {processType}: {message}", process.Id, process.ProcessTypeId, ex.Message); + executorRepositories.Clear(); + } catch (Exception ex) when (ex is not SystemException) { _logger.LogInformation(ex, "error processing process {processId} type {processType}: {message}", process.Id, process.ProcessTypeId, ex.Message); diff --git a/src/processes/Processes.Worker/Processes.Worker.csproj b/src/processes/Processes.Worker/Processes.Worker.csproj index 280177612f..01be76f0f2 100644 --- a/src/processes/Processes.Worker/Processes.Worker.csproj +++ b/src/processes/Processes.Worker/Processes.Worker.csproj @@ -33,7 +33,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/provisioning/Provisioning.DBAccess/Provisioning.DBAccess.csproj b/src/provisioning/Provisioning.DBAccess/Provisioning.DBAccess.csproj index 8e5a5b7952..29fad7f1b5 100644 --- a/src/provisioning/Provisioning.DBAccess/Provisioning.DBAccess.csproj +++ b/src/provisioning/Provisioning.DBAccess/Provisioning.DBAccess.csproj @@ -27,11 +27,11 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all - + diff --git a/src/provisioning/Provisioning.Migrations/Provisioning.Migrations.csproj b/src/provisioning/Provisioning.Migrations/Provisioning.Migrations.csproj index 8606aa6fdd..bfaa7efd9f 100644 --- a/src/provisioning/Provisioning.Migrations/Provisioning.Migrations.csproj +++ b/src/provisioning/Provisioning.Migrations/Provisioning.Migrations.csproj @@ -32,10 +32,11 @@ Exe true + CS1591 - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/provisioning/Provisioning.ProvisioningEntities/Provisioning.ProvisioningEntities.csproj b/src/provisioning/Provisioning.ProvisioningEntities/Provisioning.ProvisioningEntities.csproj index 9e8b1880dc..289ba3d910 100644 --- a/src/provisioning/Provisioning.ProvisioningEntities/Provisioning.ProvisioningEntities.csproj +++ b/src/provisioning/Provisioning.ProvisioningEntities/Provisioning.ProvisioningEntities.csproj @@ -28,11 +28,11 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all - + diff --git a/src/registration/Registration.Service/Registration.Service.csproj b/src/registration/Registration.Service/Registration.Service.csproj index 08198b877b..7b985d9592 100644 --- a/src/registration/Registration.Service/Registration.Service.csproj +++ b/src/registration/Registration.Service/Registration.Service.csproj @@ -44,7 +44,7 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/src/web/Web.Identity/Web.Identity.csproj b/src/web/Web.Identity/Web.Identity.csproj index 8a9ceea340..901fe35a95 100644 --- a/src/web/Web.Identity/Web.Identity.csproj +++ b/src/web/Web.Identity/Web.Identity.csproj @@ -27,7 +27,7 @@ - + diff --git a/tests/administration/Administration.Service.Tests/BusinessLogic/ConnectorsBusinessLogicTests.cs b/tests/administration/Administration.Service.Tests/BusinessLogic/ConnectorsBusinessLogicTests.cs index 3058beee70..fd3bb36f3f 100644 --- a/tests/administration/Administration.Service.Tests/BusinessLogic/ConnectorsBusinessLogicTests.cs +++ b/tests/administration/Administration.Service.Tests/BusinessLogic/ConnectorsBusinessLogicTests.cs @@ -1261,7 +1261,7 @@ public async Task GetConnectorOfferSubscriptionData_ReturnsList() #endregion - #region GetCompanyConnectorData + #region GetCompanyConnectorData [Fact] public async Task GetCompanyConnectorData_WithInvalid_ThrowsForbiddenException() @@ -1277,7 +1277,7 @@ public async Task GetCompanyConnectorData_WithInvalid_ThrowsForbiddenException() // Assert var ex = await Assert.ThrowsAsync(Act); - ex.Message.Should().Be(AdministrationConnectorErrors.CONNECTOR_NOT_PROVIDER_COMPANY.ToString()); + ex.Message.Should().Be(AdministrationConnectorErrors.CONNECTOR_NOT_PROVIDER_COMPANY_NOR_HOST.ToString()); } [Fact] @@ -1286,7 +1286,7 @@ public async Task GetCompanyConnectorData_WithNotExisting_ThrowsNotFoundExceptio // Arrange var connectorId = Guid.NewGuid(); A.CallTo(() => _connectorsRepository.GetConnectorByIdForCompany(connectorId, _identity.CompanyId)) - .Returns<(ConnectorData, bool)>(default); + .Returns<(ConnectorData, bool)>(default); // Act async Task Act() => await _logic.GetCompanyConnectorData(connectorId); @@ -1305,7 +1305,7 @@ public async Task GetCompanyConnectorData_WithValid_ReturnsExpected() .With(x => x.Name, "Test Connector") .Create(); A.CallTo(() => _connectorsRepository.GetConnectorByIdForCompany(connectorId, _identity.CompanyId)) - .Returns((connectorData, true)); + .Returns((connectorData, true)); // Act var result = await _logic.GetCompanyConnectorData(connectorId); @@ -1435,7 +1435,7 @@ private void SetupRepositoryMethods() A.CallTo(() => _companyRepository.GetCompanyBpnAndSelfDescriptionDocumentByIdAsync(A.That.Not.Matches(x => x == ValidCompanyId || x == CompanyIdWithoutSdDocument))) .Returns((null, null)); A.CallTo(() => _offerSubscriptionRepository.CheckOfferSubscriptionWithOfferProvider(_validOfferSubscriptionId, ValidCompanyId)) - .Returns((true, true, false, OfferSubscriptionStatusId.ACTIVE, Guid.NewGuid(), ProviderCompanyId: HostCompanyId, ValidCompanyBpn)); + .Returns((true, true, false, OfferSubscriptionStatusId.ACTIVE, Guid.NewGuid(), HostCompanyId, ValidCompanyBpn)); A.CallTo(() => _connectorsRepository.CreateConnector(A._, A._, A._, A?>._)) .Invokes((string name, string location, string connectorUrl, Action? setupOptionalFields) => diff --git a/tests/administration/Administration.Service.Tests/BusinessLogic/NetworkBusinessLogicTests.cs b/tests/administration/Administration.Service.Tests/BusinessLogic/NetworkBusinessLogicTests.cs index 7736ccf8fd..021ded7494 100644 --- a/tests/administration/Administration.Service.Tests/BusinessLogic/NetworkBusinessLogicTests.cs +++ b/tests/administration/Administration.Service.Tests/BusinessLogic/NetworkBusinessLogicTests.cs @@ -363,6 +363,7 @@ public async Task HandlePartnerRegistration_WithUserCreationThrowsException_Thro var data = new PartnerRegistrationData( Guid.NewGuid().ToString(), "Test N2N", + null, Bpn, "Munich", "Street", @@ -398,6 +399,7 @@ public async Task HandlePartnerRegistration_WithSingleIdpWithoutAlias_ThrowsServ var data = new PartnerRegistrationData( Guid.NewGuid().ToString(), "Test N2N", + "N2N", Bpn, "Munich", "Street", @@ -438,6 +440,7 @@ public async Task HandlePartnerRegistration_WithIdpNotSetAndOnlyOneIdp_CallsExpe var data = new PartnerRegistrationData( Guid.NewGuid().ToString(), "Test N2N", + null, Bpn, "Munich", "Street", @@ -522,6 +525,7 @@ public async Task HandlePartnerRegistration_WithIdpNotSetAndOnlyOneIdp_CallsExpe companies.Should().ContainSingle() .Which.Should().Match(x => x.Name == data.Name && + x.Shortname == data.ShortName && x.CompanyStatusId == CompanyStatusId.PENDING); processes.Should().ContainSingle() .Which.Should().Match( @@ -572,6 +576,7 @@ public async Task HandlePartnerRegistration_WithValidData_CallsExpected(string? var data = new PartnerRegistrationData( Guid.NewGuid().ToString(), "Test N2N", + "N2N", businessPartnerNumber, "Munich", "Street", @@ -661,6 +666,7 @@ public async Task HandlePartnerRegistration_WithValidData_CallsExpected(string? companies.Should().ContainSingle() .Which.Should().Match(x => x.Name == data.Name && + x.Shortname == data.ShortName && x.CompanyStatusId == CompanyStatusId.PENDING); processes.Should().ContainSingle() .Which.Should().Match(x => diff --git a/tests/endtoend/CreateAppScenario/CreateNewTestAppScenario.cs b/tests/endtoend/CreateAppScenario/CreateNewTestAppScenario.cs index c380c48649..90bad2d926 100644 --- a/tests/endtoend/CreateAppScenario/CreateNewTestAppScenario.cs +++ b/tests/endtoend/CreateAppScenario/CreateNewTestAppScenario.cs @@ -32,7 +32,7 @@ [assembly: CollectionBehavior(DisableTestParallelization = true)] [assembly: TestCollectionOrderer( ordererTypeName: "Org.Eclipse.TractusX.Portal.Backend.EndToEnd.Tests.DisplayNameOrderer", - ordererAssemblyName: "EndToEnd.Tests")] + ordererAssemblyName: "Org.Eclipse.TractusX.Portal.Backend.EndToEnd.Tests")] namespace Org.Eclipse.TractusX.Portal.Backend.EndToEnd.Tests; diff --git a/tests/endtoend/EndToEnd.Tests.csproj b/tests/endtoend/EndToEnd.Tests.csproj index 590ee4ed27..dd75a81693 100644 --- a/tests/endtoend/EndToEnd.Tests.csproj +++ b/tests/endtoend/EndToEnd.Tests.csproj @@ -35,10 +35,10 @@ - + - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/endtoend/PortalHealthCheck/BaseDataLoadCheck.cs b/tests/endtoend/PortalHealthCheck/BaseDataLoadCheck.cs index 73f5a4a9d1..cf86614fa5 100644 --- a/tests/endtoend/PortalHealthCheck/BaseDataLoadCheck.cs +++ b/tests/endtoend/PortalHealthCheck/BaseDataLoadCheck.cs @@ -26,7 +26,7 @@ namespace Org.Eclipse.TractusX.Portal.Backend.EndToEnd.Tests; [Trait("Category", "PortalHC")] -[TestCaseOrderer("Org.Eclipse.TractusX.Portal.Backend.EndToEnd.Tests.AlphabeticalOrderer", "EndToEnd.Tests")] +[TestCaseOrderer("Org.Eclipse.TractusX.Portal.Backend.EndToEnd.Tests.AlphabeticalOrderer", "Org.Eclipse.TractusX.Portal.Backend.EndToEnd.Tests")] [Collection("PortalHC")] public class BaseDataLoadCheck : EndToEndTestBase, IAsyncLifetime { diff --git a/tests/endtoend/PortalHealthCheck/RegistrationHealthCheck.cs b/tests/endtoend/PortalHealthCheck/RegistrationHealthCheck.cs index 4e63b76f4f..2013c9084b 100644 --- a/tests/endtoend/PortalHealthCheck/RegistrationHealthCheck.cs +++ b/tests/endtoend/PortalHealthCheck/RegistrationHealthCheck.cs @@ -25,7 +25,7 @@ namespace Org.Eclipse.TractusX.Portal.Backend.EndToEnd.Tests; [Trait("Category", "PortalHC")] -[TestCaseOrderer("Org.Eclipse.TractusX.Portal.Backend.EndToEnd.Tests.AlphabeticalOrderer", "EndToEnd.Tests")] +[TestCaseOrderer("Org.Eclipse.TractusX.Portal.Backend.EndToEnd.Tests.AlphabeticalOrderer", "Org.Eclipse.TractusX.Portal.Backend.EndToEnd.Tests")] [Collection("PortalHC")] public class RegistrationHealthCheck : EndToEndTestBase, IAsyncLifetime { diff --git a/tests/endtoend/RegistrationScenarios/RegistrationScenarios.cs b/tests/endtoend/RegistrationScenarios/RegistrationScenarios.cs index bc92a2e814..3ea7b34cc2 100644 --- a/tests/endtoend/RegistrationScenarios/RegistrationScenarios.cs +++ b/tests/endtoend/RegistrationScenarios/RegistrationScenarios.cs @@ -26,7 +26,7 @@ namespace Org.Eclipse.TractusX.Portal.Backend.EndToEnd.Tests; [Trait("Category", "Registration")] [TestCaseOrderer("Org.Eclipse.TractusX.Portal.Backend.EndToEnd.Tests.AlphabeticalOrderer", - "EndToEnd.Tests")] + "Org.Eclipse.TractusX.Portal.Backend.EndToEnd.Tests")] [Collection("Registration")] public class RegistrationScenarios : EndToEndTestBase { diff --git a/tests/endtoend/ServiceAccountCUDScenarios/ServiceAccountCUDScenarios.cs b/tests/endtoend/ServiceAccountCUDScenarios/ServiceAccountCUDScenarios.cs index 9502dd3143..32c49468be 100644 --- a/tests/endtoend/ServiceAccountCUDScenarios/ServiceAccountCUDScenarios.cs +++ b/tests/endtoend/ServiceAccountCUDScenarios/ServiceAccountCUDScenarios.cs @@ -28,7 +28,7 @@ namespace Org.Eclipse.TractusX.Portal.Backend.EndToEnd.Tests; [Trait("Category", "Portal")] [TestCaseOrderer("Org.Eclipse.TractusX.Portal.Backend.EndToEnd.Tests.AlphabeticalOrderer", - "EndToEnd.Tests")] + "Org.Eclipse.TractusX.Portal.Backend.EndToEnd.Tests")] [Collection("Portal")] public class ServiceAccountCUDScenarios : EndToEndTestBase { diff --git a/tests/endtoend/xunit.runner.json b/tests/endtoend/xunit.runner.json index 74d96d6192..0d5b6bf018 100644 --- a/tests/endtoend/xunit.runner.json +++ b/tests/endtoend/xunit.runner.json @@ -1,4 +1,5 @@ { + "$schema": "https://xunit.net/schema/current/xunit.runner.schema.json", "methodDisplay": "method", "methodDisplayOptions": "replaceUnderscoreWithSpace" } \ No newline at end of file diff --git a/tests/externalsystems/Bpdm.Library/Bpdm.Library.csproj b/tests/externalsystems/Bpdm.Library/Bpdm.Library.csproj index c5e88af4ce..759c83d80d 100644 --- a/tests/externalsystems/Bpdm.Library/Bpdm.Library.csproj +++ b/tests/externalsystems/Bpdm.Library/Bpdm.Library.csproj @@ -28,7 +28,7 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/externalsystems/BpnDidResolver.Library.Tests/BpnDidResolver.Library.Tests.csproj b/tests/externalsystems/BpnDidResolver.Library.Tests/BpnDidResolver.Library.Tests.csproj index d8003dedc9..5d1ed67839 100644 --- a/tests/externalsystems/BpnDidResolver.Library.Tests/BpnDidResolver.Library.Tests.csproj +++ b/tests/externalsystems/BpnDidResolver.Library.Tests/BpnDidResolver.Library.Tests.csproj @@ -28,7 +28,7 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/externalsystems/Clearinghouse.Library.Tests/Clearinghouse.Library.Tests.csproj b/tests/externalsystems/Clearinghouse.Library.Tests/Clearinghouse.Library.Tests.csproj index 05a83fa116..72846a5c50 100644 --- a/tests/externalsystems/Clearinghouse.Library.Tests/Clearinghouse.Library.Tests.csproj +++ b/tests/externalsystems/Clearinghouse.Library.Tests/Clearinghouse.Library.Tests.csproj @@ -28,7 +28,7 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/externalsystems/Custodian.Library.Tests/Custodian.Library.Tests.csproj b/tests/externalsystems/Custodian.Library.Tests/Custodian.Library.Tests.csproj index 61a848dfee..31eba4cddc 100644 --- a/tests/externalsystems/Custodian.Library.Tests/Custodian.Library.Tests.csproj +++ b/tests/externalsystems/Custodian.Library.Tests/Custodian.Library.Tests.csproj @@ -28,7 +28,7 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/externalsystems/Dim.Library.Tests/Dim.Library.Tests.csproj b/tests/externalsystems/Dim.Library.Tests/Dim.Library.Tests.csproj index e6bcd8e268..93e725b7d8 100644 --- a/tests/externalsystems/Dim.Library.Tests/Dim.Library.Tests.csproj +++ b/tests/externalsystems/Dim.Library.Tests/Dim.Library.Tests.csproj @@ -28,7 +28,7 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/externalsystems/ExternalSystems.Provisioning.Library.Tests/ExternalSystems.Provisioning.Library.Tests.csproj b/tests/externalsystems/ExternalSystems.Provisioning.Library.Tests/ExternalSystems.Provisioning.Library.Tests.csproj index 09216a6dad..ddca18dd5f 100644 --- a/tests/externalsystems/ExternalSystems.Provisioning.Library.Tests/ExternalSystems.Provisioning.Library.Tests.csproj +++ b/tests/externalsystems/ExternalSystems.Provisioning.Library.Tests/ExternalSystems.Provisioning.Library.Tests.csproj @@ -27,8 +27,8 @@ - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/externalsystems/IssuerComponent.Library.Tests/IssuerComponent.Library.Tests.csproj b/tests/externalsystems/IssuerComponent.Library.Tests/IssuerComponent.Library.Tests.csproj index 74ab07be5e..d423a25a15 100644 --- a/tests/externalsystems/IssuerComponent.Library.Tests/IssuerComponent.Library.Tests.csproj +++ b/tests/externalsystems/IssuerComponent.Library.Tests/IssuerComponent.Library.Tests.csproj @@ -29,8 +29,8 @@ - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/externalsystems/OfferProvider.Library/OfferProvider.Library.csproj b/tests/externalsystems/OfferProvider.Library/OfferProvider.Library.csproj index 06f2fc49b8..7897915c82 100644 --- a/tests/externalsystems/OfferProvider.Library/OfferProvider.Library.csproj +++ b/tests/externalsystems/OfferProvider.Library/OfferProvider.Library.csproj @@ -29,8 +29,8 @@ - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/externalsystems/OnboardingServiceProvider.Library.Tests/OnboardingServiceProvider.Library.Tests.csproj b/tests/externalsystems/OnboardingServiceProvider.Library.Tests/OnboardingServiceProvider.Library.Tests.csproj index 3a3b7d818e..5864e24a76 100644 --- a/tests/externalsystems/OnboardingServiceProvider.Library.Tests/OnboardingServiceProvider.Library.Tests.csproj +++ b/tests/externalsystems/OnboardingServiceProvider.Library.Tests/OnboardingServiceProvider.Library.Tests.csproj @@ -29,8 +29,8 @@ - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/externalsystems/SdFactory.Library.Tests/SdFactory.Library.Tests.csproj b/tests/externalsystems/SdFactory.Library.Tests/SdFactory.Library.Tests.csproj index ec80689d4c..66cbbd63e3 100644 --- a/tests/externalsystems/SdFactory.Library.Tests/SdFactory.Library.Tests.csproj +++ b/tests/externalsystems/SdFactory.Library.Tests/SdFactory.Library.Tests.csproj @@ -28,8 +28,8 @@ - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/framework/Framework.Async.Tests/Framework.Async.Tests.csproj b/tests/framework/Framework.Async.Tests/Framework.Async.Tests.csproj index dc09eb0e1e..63cc7ae342 100644 --- a/tests/framework/Framework.Async.Tests/Framework.Async.Tests.csproj +++ b/tests/framework/Framework.Async.Tests/Framework.Async.Tests.csproj @@ -33,8 +33,8 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/framework/Framework.DBAccess.Tests/Framework.DBAccess.Tests.csproj b/tests/framework/Framework.DBAccess.Tests/Framework.DBAccess.Tests.csproj index 0e117731a5..2467b02c82 100644 --- a/tests/framework/Framework.DBAccess.Tests/Framework.DBAccess.Tests.csproj +++ b/tests/framework/Framework.DBAccess.Tests/Framework.DBAccess.Tests.csproj @@ -33,8 +33,8 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/framework/Framework.ErrorHandling.Web.Tests/Framework.ErrorHandling.Web.Tests.csproj b/tests/framework/Framework.ErrorHandling.Web.Tests/Framework.ErrorHandling.Web.Tests.csproj index b0efa22972..2c4aa94c59 100644 --- a/tests/framework/Framework.ErrorHandling.Web.Tests/Framework.ErrorHandling.Web.Tests.csproj +++ b/tests/framework/Framework.ErrorHandling.Web.Tests/Framework.ErrorHandling.Web.Tests.csproj @@ -34,8 +34,8 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/framework/Framework.IO.Tests/AsyncEnumerableStringStreamTest.cs b/tests/framework/Framework.IO.Tests/AsyncEnumerableStringStreamTest.cs index e298c21ac3..03032db7c5 100644 --- a/tests/framework/Framework.IO.Tests/AsyncEnumerableStringStreamTest.cs +++ b/tests/framework/Framework.IO.Tests/AsyncEnumerableStringStreamTest.cs @@ -54,7 +54,7 @@ public void TestMetadata() } [Fact] - public async void TestAsyncCopyToSuccess() + public async Task TestAsyncCopyToSuccess() { using var expected = GetExpected(); diff --git a/tests/framework/Framework.IO.Tests/CancelableStreamTest.cs b/tests/framework/Framework.IO.Tests/CancelableStreamTest.cs index 2d6f2fd8c6..ab0b190bcf 100644 --- a/tests/framework/Framework.IO.Tests/CancelableStreamTest.cs +++ b/tests/framework/Framework.IO.Tests/CancelableStreamTest.cs @@ -21,7 +21,6 @@ namespace Org.Eclipse.TractusX.Portal.Backend.Framework.IO.Tests; public class CancelableStreamTest { - private readonly IFixture _fixture; private readonly Stream _stream; private readonly Memory _memory; private readonly int _numBytesFirstRead; @@ -32,24 +31,24 @@ public class CancelableStreamTest public CancelableStreamTest() { - _fixture = new Fixture().Customize(new AutoFakeItEasyCustomization { ConfigureMembers = true }); - _fixture.Behaviors.OfType().ToList() - .ForEach(b => _fixture.Behaviors.Remove(b)); - _fixture.Behaviors.Add(new OmitOnRecursionBehavior()); + var fixture = new Fixture().Customize(new AutoFakeItEasyCustomization { ConfigureMembers = true }); + fixture.Behaviors.OfType().ToList() + .ForEach(b => fixture.Behaviors.Remove(b)); + fixture.Behaviors.Add(new OmitOnRecursionBehavior()); _stream = A.Fake(); - _memory = _fixture.Create>(); - _numBytesFirstRead = _fixture.Create(); - _numBytesSecondRead = _fixture.Create(); + _memory = fixture.Create>(); + _numBytesFirstRead = fixture.Create(); + _numBytesSecondRead = fixture.Create(); _getNumBytes = A.Fake>(); - _sourceTokenCanceledException = _fixture.Create(); - _otherTokenCanceledException = _fixture.Create(); + _sourceTokenCanceledException = fixture.Create(); + _otherTokenCanceledException = fixture.Create(); } #region Tests [Fact] - public async void TestReadAsyncNoOtherTokenSuccess() + public async Task TestReadAsyncNoOtherTokenSuccess() { var (sut, source) = SetupForRead(); var firstResult = await sut.ReadAsync(_memory); @@ -60,7 +59,7 @@ public async void TestReadAsyncNoOtherTokenSuccess() } [Fact] - public async void TestReadAsyncWithUncancelledOtherTokenSuccess() + public async Task TestReadAsyncWithUncancelledOtherTokenSuccess() { var (sut, source) = SetupForRead(); using var firstSource = new CancellationTokenSource(); @@ -73,7 +72,7 @@ public async void TestReadAsyncWithUncancelledOtherTokenSuccess() } [Fact] - public async void TestReadAsyncSourceCancelledWithUncancelledOtherTokenSuccess() + public async Task TestReadAsyncSourceCancelledWithUncancelledOtherTokenSuccess() { var (sut, source) = SetupForRead(); var firstResult = await sut.ReadAsync(_memory); @@ -86,7 +85,7 @@ public async void TestReadAsyncSourceCancelledWithUncancelledOtherTokenSuccess() } [Fact] - public async void TestReadAsyncWithCancelledOtherTokenThrows() + public async Task TestReadAsyncWithCancelledOtherTokenThrows() { var (sut, source) = SetupForRead(); var firstResult = await sut.ReadAsync(_memory); @@ -100,7 +99,7 @@ public async void TestReadAsyncWithCancelledOtherTokenThrows() } [Fact] - public async void TestReadAsyncSourceCancelledThrows() + public async Task TestReadAsyncSourceCancelledThrows() { var (sut, source) = SetupForRead(); var firstResult = await sut.ReadAsync(_memory); diff --git a/tests/framework/Framework.IO.Tests/Framework.IO.Tests.csproj b/tests/framework/Framework.IO.Tests/Framework.IO.Tests.csproj index 9ffecccf6b..232e356f8b 100644 --- a/tests/framework/Framework.IO.Tests/Framework.IO.Tests.csproj +++ b/tests/framework/Framework.IO.Tests/Framework.IO.Tests.csproj @@ -34,8 +34,8 @@ - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/framework/Framework.Linq.Tests/Framework.Linq.Tests.csproj b/tests/framework/Framework.Linq.Tests/Framework.Linq.Tests.csproj index 64705e7199..57f43f0d8f 100644 --- a/tests/framework/Framework.Linq.Tests/Framework.Linq.Tests.csproj +++ b/tests/framework/Framework.Linq.Tests/Framework.Linq.Tests.csproj @@ -28,8 +28,8 @@ - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/framework/Framework.Logging.Tests/Framework.Logging.Tests.csproj b/tests/framework/Framework.Logging.Tests/Framework.Logging.Tests.csproj index e34fbc46a9..23d0f084f4 100644 --- a/tests/framework/Framework.Logging.Tests/Framework.Logging.Tests.csproj +++ b/tests/framework/Framework.Logging.Tests/Framework.Logging.Tests.csproj @@ -33,8 +33,8 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/framework/Framework.Models.Tests/Framework.Models.Tests.csproj b/tests/framework/Framework.Models.Tests/Framework.Models.Tests.csproj index ad0890e4b1..1153bb12c5 100644 --- a/tests/framework/Framework.Models.Tests/Framework.Models.Tests.csproj +++ b/tests/framework/Framework.Models.Tests/Framework.Models.Tests.csproj @@ -30,8 +30,8 @@ - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/framework/Framework.Tests.Shared/Framework.Tests.Shared.csproj b/tests/framework/Framework.Tests.Shared/Framework.Tests.Shared.csproj index 5d301b7bde..57d980dbd9 100644 --- a/tests/framework/Framework.Tests.Shared/Framework.Tests.Shared.csproj +++ b/tests/framework/Framework.Tests.Shared/Framework.Tests.Shared.csproj @@ -32,13 +32,13 @@ - - + + - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/framework/Framework.Token.Tests/Framework.Token.Tests.csproj b/tests/framework/Framework.Token.Tests/Framework.Token.Tests.csproj index c90e20b38b..4fab94692d 100644 --- a/tests/framework/Framework.Token.Tests/Framework.Token.Tests.csproj +++ b/tests/framework/Framework.Token.Tests/Framework.Token.Tests.csproj @@ -26,8 +26,8 @@ - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/framework/Framework.Web.Tests/Framework.Web.Tests.csproj b/tests/framework/Framework.Web.Tests/Framework.Web.Tests.csproj index 8b9c05758f..5c9c57ffc5 100644 --- a/tests/framework/Framework.Web.Tests/Framework.Web.Tests.csproj +++ b/tests/framework/Framework.Web.Tests/Framework.Web.Tests.csproj @@ -27,10 +27,10 @@ false - + - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/keycloak/Keycloak.Authentication.Tests/Keycloak.Authentication.Tests.csproj b/tests/keycloak/Keycloak.Authentication.Tests/Keycloak.Authentication.Tests.csproj index 9b4094836a..eb0122f5ae 100644 --- a/tests/keycloak/Keycloak.Authentication.Tests/Keycloak.Authentication.Tests.csproj +++ b/tests/keycloak/Keycloak.Authentication.Tests/Keycloak.Authentication.Tests.csproj @@ -29,8 +29,8 @@ - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/keycloak/Keycloak.Seeding.Tests/Keycloak.Seeding.Tests.csproj b/tests/keycloak/Keycloak.Seeding.Tests/Keycloak.Seeding.Tests.csproj index 07f07bae1d..c6cdd92663 100644 --- a/tests/keycloak/Keycloak.Seeding.Tests/Keycloak.Seeding.Tests.csproj +++ b/tests/keycloak/Keycloak.Seeding.Tests/Keycloak.Seeding.Tests.csproj @@ -28,8 +28,8 @@ - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/maintenance/Maintenance.App.Tests/Maintenance.App.Tests.csproj b/tests/maintenance/Maintenance.App.Tests/Maintenance.App.Tests.csproj index ce781dc3ec..d00d1dac5c 100644 --- a/tests/maintenance/Maintenance.App.Tests/Maintenance.App.Tests.csproj +++ b/tests/maintenance/Maintenance.App.Tests/Maintenance.App.Tests.csproj @@ -30,10 +30,10 @@ - - - - + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/marketplace/Apps.Service.Tests/Apps.Service.Tests.csproj b/tests/marketplace/Apps.Service.Tests/Apps.Service.Tests.csproj index ce7a3567a0..3082c3d08c 100644 --- a/tests/marketplace/Apps.Service.Tests/Apps.Service.Tests.csproj +++ b/tests/marketplace/Apps.Service.Tests/Apps.Service.Tests.csproj @@ -34,7 +34,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/marketplace/Apps.Service.Tests/BusinessLogic/AppBusinessLogicTests.cs b/tests/marketplace/Apps.Service.Tests/BusinessLogic/AppBusinessLogicTests.cs index cdd5c1807a..cd3d661409 100644 --- a/tests/marketplace/Apps.Service.Tests/BusinessLogic/AppBusinessLogicTests.cs +++ b/tests/marketplace/Apps.Service.Tests/BusinessLogic/AppBusinessLogicTests.cs @@ -495,7 +495,7 @@ public async Task GetSubscriptionDetailForProvider_ReturnsExpected() // Arrange var appId = Guid.NewGuid(); var subscriptionId = Guid.NewGuid(); - var data = _fixture.Create(); + var data = _fixture.Create(); var settings = new AppsSettings { CompanyAdminRoles = new[] @@ -503,7 +503,7 @@ public async Task GetSubscriptionDetailForProvider_ReturnsExpected() new UserRoleConfig("ClientTest", new[] {"Test"}) } }; - A.CallTo(() => _offerService.GetAppSubscriptionDetailsForProviderAsync(A._, A._, A._, A>._, A._)) + A.CallTo(() => _offerService.GetOfferSubscriptionDetailsForProviderAsync(A._, A._, A._, A>._, A._)) .Returns(data); var sut = new AppsBusinessLogic(null!, null!, _offerService, null!, Options.Create(settings), _identityService); @@ -512,7 +512,7 @@ public async Task GetSubscriptionDetailForProvider_ReturnsExpected() // Assert result.Should().Be(data); - A.CallTo(() => _offerService.GetAppSubscriptionDetailsForProviderAsync(appId, subscriptionId, OfferTypeId.APP, A>._, A._)) + A.CallTo(() => _offerService.GetOfferSubscriptionDetailsForProviderAsync(appId, subscriptionId, OfferTypeId.APP, A>._, A._)) .MustHaveHappenedOnceExactly(); } diff --git a/tests/marketplace/Apps.Service.Tests/Controllers/AppsControllerTests.cs b/tests/marketplace/Apps.Service.Tests/Controllers/AppsControllerTests.cs index f998dbe29d..a79f72de3d 100644 --- a/tests/marketplace/Apps.Service.Tests/Controllers/AppsControllerTests.cs +++ b/tests/marketplace/Apps.Service.Tests/Controllers/AppsControllerTests.cs @@ -379,7 +379,7 @@ public async Task GetSubscriptionDetailForProvider_ReturnsExpected() // Arrange var appId = _fixture.Create(); var subscriptionId = _fixture.Create(); - var data = _fixture.Create(); + var data = _fixture.Create(); A.CallTo(() => _logic.GetSubscriptionDetailForProvider(appId, subscriptionId)) .Returns(data); diff --git a/tests/marketplace/Offer.Library.Web.Tests/Offer.Library.Web.Tests.csproj b/tests/marketplace/Offer.Library.Web.Tests/Offer.Library.Web.Tests.csproj index 4bdf6687a8..a6ff37dfa1 100644 --- a/tests/marketplace/Offer.Library.Web.Tests/Offer.Library.Web.Tests.csproj +++ b/tests/marketplace/Offer.Library.Web.Tests/Offer.Library.Web.Tests.csproj @@ -28,8 +28,8 @@ - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/marketplace/Offers.Library.Tests/Offers.Library.Tests.csproj b/tests/marketplace/Offers.Library.Tests/Offers.Library.Tests.csproj index 4009b7d709..52325c0c73 100644 --- a/tests/marketplace/Offers.Library.Tests/Offers.Library.Tests.csproj +++ b/tests/marketplace/Offers.Library.Tests/Offers.Library.Tests.csproj @@ -28,8 +28,8 @@ - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/marketplace/Offers.Library.Tests/Service/OfferServiceTests.cs b/tests/marketplace/Offers.Library.Tests/Service/OfferServiceTests.cs index c4abeaf861..72f32ed745 100644 --- a/tests/marketplace/Offers.Library.Tests/Service/OfferServiceTests.cs +++ b/tests/marketplace/Offers.Library.Tests/Service/OfferServiceTests.cs @@ -2090,117 +2090,10 @@ public async Task UpdateTechnicalUserProfiles_WithoutTechnicalUserProfileAndUser } #endregion - #region GetSubscriptionDetailForProvider + #region GetOfferSubscriptionDetailForProvider [Fact] - public async Task GetSubscriptionDetailForProvider_WithNotMatchingUserRoles_ThrowsConfigurationException() - { - // Arrange - var offerId = Guid.NewGuid(); - var subscriptionId = Guid.NewGuid(); - var companyAdminRoles = _fixture.CreateMany().ToImmutableArray(); - - SetupGetSubscriptionDetailForProvider(); - - // Act - async Task Act() => await _sut.GetSubscriptionDetailsForProviderAsync(offerId, subscriptionId, OfferTypeId.SERVICE, companyAdminRoles); - - // Assert - var ex = await Assert.ThrowsAsync(Act); - ex.Message.Should().Contain("invalid configuration, at least one of the configured roles does not exist in the database:"); - A.CallTo(() => _userRolesRepository.GetUserRoleIdsUntrackedAsync(A>.That.IsSameSequenceAs(companyAdminRoles))) - .MustHaveHappenedOnceExactly(); - A.CallTo(() => _offerSubscriptionsRepository.GetSubscriptionDetailsForProviderAsync(A._, A._, A._, A._, A>._)) - .MustNotHaveHappened(); - } - - [Fact] - public async Task GetSubscriptionDetailForProvider_WithNotExistingOffer_ThrowsNotFoundException() - { - // Arrange - var serviceId = Guid.NewGuid(); - var subscriptionId = Guid.NewGuid(); - var companyAdminRoles = new[] - { - new UserRoleConfig("ClientTest", new[] {"Test"}) - }; - SetupGetSubscriptionDetailForProvider(); - - A.CallTo(() => _offerSubscriptionsRepository.GetSubscriptionDetailsForProviderAsync(A._, A._, A._, A._, A>._)) - .Returns<(bool, bool, ProviderSubscriptionDetailData?)>(default); - - // Act - async Task Act() => await _sut.GetSubscriptionDetailsForProviderAsync(serviceId, subscriptionId, OfferTypeId.SERVICE, companyAdminRoles); - - // Assert - var ex = await Assert.ThrowsAsync(Act); - ex.Message.Should().Contain($"subscription {subscriptionId} for offer {serviceId} of type {OfferTypeId.SERVICE} does not exist"); - A.CallTo(() => _userRolesRepository.GetUserRoleIdsUntrackedAsync(A>.That.IsSameSequenceAs(companyAdminRoles))) - .MustHaveHappenedOnceExactly(); - A.CallTo(() => _offerSubscriptionsRepository.GetSubscriptionDetailsForProviderAsync(serviceId, subscriptionId, _companyId, OfferTypeId.SERVICE, A>.That.IsSameSequenceAs(new[] { _validUserRoleId }))) - .MustHaveHappenedOnceExactly(); - } - - [Fact] - public async Task GetSubscriptionDetailForProvider_WithUserNotInProvidingCompany_ThrowsForbiddenException() - { - // Arrange - var serviceId = Guid.NewGuid(); - var subscriptionId = Guid.NewGuid(); - var companyAdminRoles = new[] - { - new UserRoleConfig("ClientTest", new[] {"Test"}) - }; - SetupGetSubscriptionDetailForProvider(); - - A.CallTo(() => _offerSubscriptionsRepository.GetSubscriptionDetailsForProviderAsync(A._, A._, A._, A._, A>._)) - .Returns((true, false, _fixture.Create())); - - // Act - async Task Act() => await _sut.GetSubscriptionDetailsForProviderAsync(serviceId, subscriptionId, OfferTypeId.SERVICE, companyAdminRoles); - - // Assert - var ex = await Assert.ThrowsAsync(Act); - ex.Message.Should().Contain($"Company {_companyId} is not part of the Provider company"); - A.CallTo(() => _userRolesRepository.GetUserRoleIdsUntrackedAsync(A>.That.IsSameSequenceAs(companyAdminRoles))) - .MustHaveHappenedOnceExactly(); - A.CallTo(() => _offerSubscriptionsRepository.GetSubscriptionDetailsForProviderAsync(serviceId, subscriptionId, _companyId, OfferTypeId.SERVICE, A>.That.IsSameSequenceAs(new[] { _validUserRoleId }))) - .MustHaveHappenedOnceExactly(); - } - - [Fact] - public async Task GetSubscriptionDetailForProvider_WithValidData_ReturnsExpected() - { - // Arrange - var serviceId = Guid.NewGuid(); - var subscriptionId = Guid.NewGuid(); - var companyAdminRoles = new[] - { - new UserRoleConfig("ClientTest", new[] {"Test"}) - }; - SetupGetSubscriptionDetailForProvider(); - - var data = _fixture.Create(); - - A.CallTo(() => _offerSubscriptionsRepository.GetSubscriptionDetailsForProviderAsync(A._, A._, A._, A._, A>._)) - .Returns((true, true, data)); - // Act - var result = await _sut.GetSubscriptionDetailsForProviderAsync(serviceId, subscriptionId, OfferTypeId.SERVICE, companyAdminRoles); - - // Assert - result.Should().Be(data); - A.CallTo(() => _userRolesRepository.GetUserRoleIdsUntrackedAsync(A>.That.IsSameSequenceAs(companyAdminRoles))) - .MustHaveHappenedOnceExactly(); - A.CallTo(() => _offerSubscriptionsRepository.GetSubscriptionDetailsForProviderAsync(serviceId, subscriptionId, _companyId, OfferTypeId.SERVICE, A>.That.IsSameSequenceAs(new[] { _validUserRoleId }))) - .MustHaveHappenedOnceExactly(); - } - - #endregion - - #region GetAppSubscriptionDetailForProvider - - [Fact] - public async Task GetAppSubscriptionDetailForProvider_WithNotMatchingUserRoles_ThrowsConfigurationException() + public async Task GetOfferSubscriptionDetailForProvider_WithNotMatchingUserRoles_ThrowsConfigurationException() { // Arrange var offerId = Guid.NewGuid(); @@ -2211,19 +2104,19 @@ public async Task GetAppSubscriptionDetailForProvider_WithNotMatchingUserRoles_T SetupGetSubscriptionDetailForProvider(); // Act - async Task Act() => await _sut.GetAppSubscriptionDetailsForProviderAsync(offerId, subscriptionId, OfferTypeId.APP, companyAdminRoles, walletData); + async Task Act() => await _sut.GetOfferSubscriptionDetailsForProviderAsync(offerId, subscriptionId, OfferTypeId.APP, companyAdminRoles, walletData); // Assert var ex = await Assert.ThrowsAsync(Act); ex.Message.Should().Contain("invalid configuration, at least one of the configured roles does not exist in the database:"); A.CallTo(() => _userRolesRepository.GetUserRoleIdsUntrackedAsync(A>.That.IsSameSequenceAs(companyAdminRoles))) .MustHaveHappenedOnceExactly(); - A.CallTo(() => _offerSubscriptionsRepository.GetSubscriptionDetailsForProviderAsync(A._, A._, A._, A._, A>._)) + A.CallTo(() => _offerSubscriptionsRepository.GetOfferSubscriptionDetailsForProviderAsync(A._, A._, A._, A._, A>._)) .MustNotHaveHappened(); } [Fact] - public async Task GetAppSubscriptionDetailForProvider_WithNotExistingOffer_ThrowsNotFoundException() + public async Task GetOfferSubscriptionDetailForProvider_WithNotExistingOffer_ThrowsNotFoundException() { // Arrange var appId = Guid.NewGuid(); @@ -2235,23 +2128,23 @@ public async Task GetAppSubscriptionDetailForProvider_WithNotExistingOffer_Throw var walletData = _fixture.Create(); SetupGetSubscriptionDetailForProvider(); - A.CallTo(() => _offerSubscriptionsRepository.GetAppSubscriptionDetailsForProviderAsync(A._, A._, A._, A._, A>._)) - .Returns<(bool, bool, AppProviderSubscriptionDetail?)>(default); + A.CallTo(() => _offerSubscriptionsRepository.GetOfferSubscriptionDetailsForProviderAsync(A._, A._, A._, A._, A>._)) + .Returns<(bool, bool, OfferProviderSubscriptionDetail?)>(default); // Act - async Task Act() => await _sut.GetAppSubscriptionDetailsForProviderAsync(appId, subscriptionId, OfferTypeId.APP, companyAdminRoles, walletData); + async Task Act() => await _sut.GetOfferSubscriptionDetailsForProviderAsync(appId, subscriptionId, OfferTypeId.APP, companyAdminRoles, walletData); // Assert var ex = await Assert.ThrowsAsync(Act); ex.Message.Should().Contain($"subscription {subscriptionId} for offer {appId} of type {OfferTypeId.APP} does not exist"); A.CallTo(() => _userRolesRepository.GetUserRoleIdsUntrackedAsync(A>.That.IsSameSequenceAs(companyAdminRoles))) .MustHaveHappenedOnceExactly(); - A.CallTo(() => _offerSubscriptionsRepository.GetAppSubscriptionDetailsForProviderAsync(appId, subscriptionId, _companyId, OfferTypeId.APP, A>.That.IsSameSequenceAs(new[] { _validUserRoleId }))) + A.CallTo(() => _offerSubscriptionsRepository.GetOfferSubscriptionDetailsForProviderAsync(appId, subscriptionId, _companyId, OfferTypeId.APP, A>.That.IsSameSequenceAs(new[] { _validUserRoleId }))) .MustHaveHappenedOnceExactly(); } [Fact] - public async Task GetAppSubscriptionDetailForProvider_WithUserNotInProvidingCompany_ThrowsForbiddenException() + public async Task GetOfferSubscriptionDetailForProvider_WithUserNotInProvidingCompany_ThrowsForbiddenException() { // Arrange var appId = Guid.NewGuid(); @@ -2263,23 +2156,23 @@ public async Task GetAppSubscriptionDetailForProvider_WithUserNotInProvidingComp var walletData = _fixture.Create(); SetupGetSubscriptionDetailForProvider(); - A.CallTo(() => _offerSubscriptionsRepository.GetAppSubscriptionDetailsForProviderAsync(A._, A._, A._, A._, A>._)) - .Returns((true, false, _fixture.Create())); + A.CallTo(() => _offerSubscriptionsRepository.GetOfferSubscriptionDetailsForProviderAsync(A._, A._, A._, A._, A>._)) + .Returns((true, false, _fixture.Create())); // Act - async Task Act() => await _sut.GetAppSubscriptionDetailsForProviderAsync(appId, subscriptionId, OfferTypeId.APP, companyAdminRoles, walletData); + async Task Act() => await _sut.GetOfferSubscriptionDetailsForProviderAsync(appId, subscriptionId, OfferTypeId.APP, companyAdminRoles, walletData); // Assert var ex = await Assert.ThrowsAsync(Act); ex.Message.Should().Contain($"Company {_companyId} is not part of the Provider company"); A.CallTo(() => _userRolesRepository.GetUserRoleIdsUntrackedAsync(A>.That.IsSameSequenceAs(companyAdminRoles))) .MustHaveHappenedOnceExactly(); - A.CallTo(() => _offerSubscriptionsRepository.GetAppSubscriptionDetailsForProviderAsync(appId, subscriptionId, _companyId, OfferTypeId.APP, A>.That.IsSameSequenceAs(new[] { _validUserRoleId }))) + A.CallTo(() => _offerSubscriptionsRepository.GetOfferSubscriptionDetailsForProviderAsync(appId, subscriptionId, _companyId, OfferTypeId.APP, A>.That.IsSameSequenceAs(new[] { _validUserRoleId }))) .MustHaveHappenedOnceExactly(); } [Fact] - public async Task GetAppSubscriptionDetailForProvider_WithValidData_ReturnsExpected() + public async Task GetOfferSubscriptionDetailForProvider_WithValidData_ReturnsExpected() { // Arrange var appId = Guid.NewGuid(); @@ -2291,13 +2184,13 @@ public async Task GetAppSubscriptionDetailForProvider_WithValidData_ReturnsExpec var walletData = _fixture.Create(); SetupGetSubscriptionDetailForProvider(); - var data = _fixture.Create(); + var data = _fixture.Create(); - A.CallTo(() => _offerSubscriptionsRepository.GetAppSubscriptionDetailsForProviderAsync(A._, A._, A._, A._, A>._)) + A.CallTo(() => _offerSubscriptionsRepository.GetOfferSubscriptionDetailsForProviderAsync(A._, A._, A._, A._, A>._)) .Returns((true, true, data)); // Act - var result = await _sut.GetAppSubscriptionDetailsForProviderAsync(appId, subscriptionId, OfferTypeId.APP, companyAdminRoles, walletData); + var result = await _sut.GetOfferSubscriptionDetailsForProviderAsync(appId, subscriptionId, OfferTypeId.APP, companyAdminRoles, walletData); // Assert result.Id.Should().Be(data.Id); @@ -2309,7 +2202,7 @@ public async Task GetAppSubscriptionDetailForProvider_WithValidData_ReturnsExpec result.OfferSubscriptionStatus.Should().Be(data.OfferSubscriptionStatus); A.CallTo(() => _userRolesRepository.GetUserRoleIdsUntrackedAsync(A>.That.IsSameSequenceAs(companyAdminRoles))) .MustHaveHappenedOnceExactly(); - A.CallTo(() => _offerSubscriptionsRepository.GetAppSubscriptionDetailsForProviderAsync(appId, subscriptionId, _companyId, OfferTypeId.APP, A>.That.IsSameSequenceAs(new[] { _validUserRoleId }))) + A.CallTo(() => _offerSubscriptionsRepository.GetOfferSubscriptionDetailsForProviderAsync(appId, subscriptionId, _companyId, OfferTypeId.APP, A>.That.IsSameSequenceAs(new[] { _validUserRoleId }))) .MustHaveHappenedOnceExactly(); } diff --git a/tests/marketplace/Services.Service.Tests/BusinessLogic/ServiceBusinessLogicTests.cs b/tests/marketplace/Services.Service.Tests/BusinessLogic/ServiceBusinessLogicTests.cs index f809da348c..bc08ba4b3c 100644 --- a/tests/marketplace/Services.Service.Tests/BusinessLogic/ServiceBusinessLogicTests.cs +++ b/tests/marketplace/Services.Service.Tests/BusinessLogic/ServiceBusinessLogicTests.cs @@ -295,6 +295,7 @@ public async Task GetServiceDetailsAsync_WithExistingServiceAndLanguageCode_Retu result.TechnicalUserProfile.Should().ContainSingle().Which.Should().Match>>( x => x.Value.SequenceEqual(new[] { "role1", "role2" })); result.LeadPictureId.Should().NotBeEmpty(); + result.ProviderUri.Should().NotBeEmpty(); } [Fact] @@ -524,7 +525,10 @@ public async Task GetSubscriptionDetailForProvider_WithNotMatchingUserRoles_Thro // Arrange var offerId = _fixture.Create(); var subscriptionId = _fixture.Create(); - var data = _fixture.Create(); + var data = _fixture.Build() + .With(x => x.AppInstanceId, default(string?)) + .With(x => x.TenantUrl, default(string?)) + .Create(); var settings = new ServiceSettings { CompanyAdminRoles = new[] @@ -532,7 +536,7 @@ public async Task GetSubscriptionDetailForProvider_WithNotMatchingUserRoles_Thro new UserRoleConfig("ClientTest", new[] {"Test"}) } }; - A.CallTo(() => _offerService.GetSubscriptionDetailsForProviderAsync(offerId, subscriptionId, OfferTypeId.SERVICE, A>._)) + A.CallTo(() => _offerService.GetOfferSubscriptionDetailsForProviderAsync(A._, A._, A._, A>._, A._)) .Returns(data); var sut = new ServiceBusinessLogic(null!, _offerService, null!, null!, _identityService, Options.Create(settings)); @@ -540,7 +544,21 @@ public async Task GetSubscriptionDetailForProvider_WithNotMatchingUserRoles_Thro var result = await sut.GetSubscriptionDetailForProvider(offerId, subscriptionId); // Assert - result.Should().Be(data); + result.Should().Match(x => + x.Id == data.Id && + x.OfferSubscriptionStatus == data.OfferSubscriptionStatus && + x.Name == data.Name && + x.Customer == data.Customer && + x.Bpn == data.Bpn && + x.Contact.SequenceEqual(data.Contact) && + x.TechnicalUserData.SequenceEqual(data.TechnicalUserData) && + x.ConnectorData.SequenceEqual(data.ConnectorData) && + x.ProcessStepTypeId == data.ProcessStepTypeId && + x.ExternalService == data.ExternalService + ); + + A.CallTo(() => _offerService.GetOfferSubscriptionDetailsForProviderAsync(offerId, subscriptionId, OfferTypeId.SERVICE, A>._, A._)) + .MustHaveHappenedOnceExactly(); } #endregion diff --git a/tests/marketplace/Services.Service.Tests/Services.Service.Tests.csproj b/tests/marketplace/Services.Service.Tests/Services.Service.Tests.csproj index 1779b2f970..8e69508163 100644 --- a/tests/marketplace/Services.Service.Tests/Services.Service.Tests.csproj +++ b/tests/marketplace/Services.Service.Tests/Services.Service.Tests.csproj @@ -30,8 +30,8 @@ - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/notifications/Notifications.Library.Tests/Notifications.Library.Tests.csproj b/tests/notifications/Notifications.Library.Tests/Notifications.Library.Tests.csproj index 4d24d22436..d6a451f4f6 100644 --- a/tests/notifications/Notifications.Library.Tests/Notifications.Library.Tests.csproj +++ b/tests/notifications/Notifications.Library.Tests/Notifications.Library.Tests.csproj @@ -29,8 +29,8 @@ - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/notifications/Notifications.Service.Tests/Notifications.Service.Tests.csproj b/tests/notifications/Notifications.Service.Tests/Notifications.Service.Tests.csproj index ae33ad2028..78fcf66943 100644 --- a/tests/notifications/Notifications.Service.Tests/Notifications.Service.Tests.csproj +++ b/tests/notifications/Notifications.Service.Tests/Notifications.Service.Tests.csproj @@ -29,8 +29,8 @@ - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/portalbackend/PortalBackend.DBAccess.Tests/CompanyConnectorViewTests.cs b/tests/portalbackend/PortalBackend.DBAccess.Tests/CompanyConnectorViewTests.cs index cb027364a3..99eb4a3de0 100644 --- a/tests/portalbackend/PortalBackend.DBAccess.Tests/CompanyConnectorViewTests.cs +++ b/tests/portalbackend/PortalBackend.DBAccess.Tests/CompanyConnectorViewTests.cs @@ -46,7 +46,7 @@ public async Task CompanyConnectorView_GetAll_ReturnsExpected() // Act var result = await sut.CompanyConnectorView.ToListAsync(); - result.Should().HaveCount(10); + result.Should().HaveCount(11); } [Fact] @@ -62,7 +62,7 @@ public async Task CompanyConnectorView_GetSpecific_ReturnsExpected() result!.CompanyId.Should().Be(companyId); result.CompanyName.Should().Be("CX-Test-Access"); result.ConnectorStatus.Should().Be("PENDING"); - result.ConnectorUrl.Should().Be("www.google.de"); + result.ConnectorUrl.Should().Be("www.connector123.de"); } private async Task CreateContext() diff --git a/tests/portalbackend/PortalBackend.DBAccess.Tests/ConnectorRepositoryTests.cs b/tests/portalbackend/PortalBackend.DBAccess.Tests/ConnectorRepositoryTests.cs index 1fd8f8de4b..51f3f72e6b 100644 --- a/tests/portalbackend/PortalBackend.DBAccess.Tests/ConnectorRepositoryTests.cs +++ b/tests/portalbackend/PortalBackend.DBAccess.Tests/ConnectorRepositoryTests.cs @@ -73,10 +73,10 @@ public async Task GetAllCompanyConnectorsForCompanyId_ReturnsExpectedAppCount() x => x.Name == "Test Connector 6" && x.TechnicalUser!.Id == new Guid("cd436931-8399-4c1d-bd81-7dffb298c7ca") && x.TechnicalUser.Name == "test-user-service-accounts" - && x.ConnectorUrl == "www.google.de", + && x.ConnectorUrl == "www.connector6.de", x => x.Name == "Test Connector 1" && x.TechnicalUser == null - && x.ConnectorUrl == "www.google.de"); + && x.ConnectorUrl == "www.connector1.de"); } #endregion @@ -159,21 +159,24 @@ public async Task AttachAndModify_ReturnsExpected() #region GetConnectorByIdForIamUser - [Fact] - public async Task GetConnectorByIdForIamUser_ReturnsExpectedAppCount() + [Theory] + [InlineData("7e86a0b8-6903-496b-96d1-0ef508206839", "41fd2ab8-71cd-4546-9bef-a388d91b2542", true)] + [InlineData("7e86a0b8-6903-496b-96d1-0ef508206839", "2dc4249f-b5ca-4d42-bef1-7a7a950a4f87", true)] + [InlineData("7e86a0b8-6903-496b-96d1-0ef508206839", "deadbeef-dead-beef-dead-beefdeadbeef", false)] + public async Task GetConnectorByIdForIamUser_ReturnsExpected(Guid connectorId, Guid companyId, bool isProviderOrHost) { // Arrange var (sut, _) = await CreateSut(); // Act - var result = await sut.GetConnectorByIdForCompany(new Guid("7e86a0b8-6903-496b-96d1-0ef508206833"), _userCompanyId); + var result = await sut.GetConnectorByIdForCompany(connectorId, companyId); // Assert result.Should().NotBeNull(); - result.IsProviderCompany.Should().BeTrue(); - result.ConnectorData.Name.Should().Be("Test Connector 1"); + result.IsProvidingOrHostCompany.Should().Be(isProviderOrHost); + result.ConnectorData.Name.Should().Be("Test Connector 2"); result.ConnectorData.TechnicalUser.Should().BeNull(); - result.ConnectorData.ConnectorUrl.Should().Be("www.google.de"); + result.ConnectorData.ConnectorUrl.Should().Be("www.connector2.de"); } [Fact] @@ -189,20 +192,6 @@ public async Task GetConnectorByIdForIamUser_WithoutExistingId_ReturnsDefault() result.Should().Be(default); } - [Fact] - public async Task GetConnectorByIdForIamUser_WithoutMatchingUser_ReturnsIsProviderUserFalse() - { - // Arrange - var (sut, _) = await CreateSut(); - - // Act - var result = await sut.GetConnectorByIdForCompany(new Guid("5aea3711-cc54-47b4-b7eb-ba9f3bf1cb15"), Guid.NewGuid()); - - // Assert - result.Should().NotBeNull(); - result.IsProviderCompany.Should().BeFalse(); - } - #endregion #region GetConnectorInformationByIdForIamUser @@ -382,7 +371,7 @@ public async Task GetManagedConnectorsForIamUser_ReturnsExpectedAppCount() x.TechnicalUser!.Id == new Guid("d0c8ae19-d4f3-49cc-9cb4-6c766d4680f4") && x.TechnicalUser.Name == "sa-test" && x.TechnicalUser.Description == "SA with connector" && - x.ConnectorUrl == "www.google.de"); + x.ConnectorUrl == "www.connector3.de"); } [Fact] @@ -436,7 +425,7 @@ public async Task GetConnectorUpdateInformation_WithoutExistingConnector_Returns [Theory] [InlineData(new[] { "BPNL00000003AYRE", "BPNL00000003CRHK" }, 3, 2)] - [InlineData(new string[] { }, 4, 3)] + [InlineData(new string[] { }, 5, 3)] [InlineData(new[] { "not a bpn" }, 0, 0)] public async Task GetConnectorEndPointDataAsync_WithExistingConnector_ReturnsExpectedResult(IEnumerable bpns, int numResults, int numGroups) { @@ -463,6 +452,24 @@ public async Task GetConnectorEndPointDataAsync_WithExistingConnector_ReturnsExp } } } + [Fact] + public async Task GetConnectorEndPointDataAsync_CheckHostBPN_ReturnsExpectedResult() + { + // Arrange + var (sut, _) = await CreateSut(); + var hostBpn = new[] { "BPNL00000003LLHA", "BPNL00000003CRHK" }; + + // Act + var result = await sut.GetConnectorEndPointDataAsync(hostBpn).ToListAsync(); + + // Assert + result.Should().NotBeNull().And.HaveCount(3); + result.Where(x => x.BusinessPartnerNumber == "BPNL00000003LLHA").Should().HaveCount(2).And.Satisfy( + x => x.ConnectorEndpoint == "www.connector7.de", + x => x.ConnectorEndpoint == "www.connector43.de"); + result.Where(x => x.BusinessPartnerNumber == "BPNL00000003CRHK").Should().HaveCount(1).And.Satisfy( + x => x.ConnectorEndpoint == "www.connector6.de"); + } #endregion @@ -569,11 +576,12 @@ public async Task GetConnectorsWithMissingSdDocument_ReturnsExpectedConnectors() // Assert result.Should().NotBeNull(); - result.Content.Should().HaveCount(4).And.Satisfy( + result.Content.Should().HaveCount(5).And.Satisfy( x => x.Name == "Test Connector 7", x => x.Name == "Test Connector 6", x => x.Name == "Test Connector 5", - x => x.Name == "Test Connector 4"); + x => x.Name == "Test Connector 4", + x => x.Name == "Test Connector 43"); } #endregion @@ -604,7 +612,7 @@ public async Task CheckConnectorExists_WithExisting_ReturnsTrue() var (sut, _) = await CreateSut(); // Act - var result = await sut.CheckConnectorExists("Test Connector 6", "www.google.de").ConfigureAwait(false); + var result = await sut.CheckConnectorExists("Test Connector 6", "www.connector6.de").ConfigureAwait(false); // Assert result.Should().BeTrue(); diff --git a/tests/portalbackend/PortalBackend.DBAccess.Tests/OfferRepositoryTests.cs b/tests/portalbackend/PortalBackend.DBAccess.Tests/OfferRepositoryTests.cs index 516e08e59e..37a8cad302 100644 --- a/tests/portalbackend/PortalBackend.DBAccess.Tests/OfferRepositoryTests.cs +++ b/tests/portalbackend/PortalBackend.DBAccess.Tests/OfferRepositoryTests.cs @@ -450,6 +450,7 @@ public async Task GetServiceDetailByIdUntrackedAsync_ReturnsExpectedResult() x => technicalUserRoleDatas.Single(t => t.TechnicalUserProfileId == x.TechnicalUserProfileId).UserRoles.Count() == 1, x => technicalUserRoleDatas.Single(t => t.TechnicalUserProfileId == x.TechnicalUserProfileId).UserRoles.Count() == 2); offerDetail.LeadPictureId.Should().Be(new Guid("9685f744-9d90-4102-a949-fcd0bb86f951")); + offerDetail.ProviderUri.Should().Be("https://google.com"); } #endregion diff --git a/tests/portalbackend/PortalBackend.DBAccess.Tests/OfferSubscriptionRepositoryTest.cs b/tests/portalbackend/PortalBackend.DBAccess.Tests/OfferSubscriptionRepositoryTest.cs index 14c62f1310..95f6ca272c 100644 --- a/tests/portalbackend/PortalBackend.DBAccess.Tests/OfferSubscriptionRepositoryTest.cs +++ b/tests/portalbackend/PortalBackend.DBAccess.Tests/OfferSubscriptionRepositoryTest.cs @@ -122,13 +122,13 @@ public async Task GetAllBusinessAppDataForUserIdAsync_WithValidUser_ReturnsExpec var (sut, _) = await CreateSut(); // Act - var result = await sut.GetAllBusinessAppDataForUserIdAsync(new("ac1cf001-7fbc-1f2f-817f-bce058020006")).ToListAsync(); + var result = await sut.GetAllBusinessAppDataForUserIdAsync(new("8b42e6de-7b59-4217-a63c-198e83d93776")).ToListAsync(); // Assert - result.Should().NotBeNullOrEmpty(); - result.Should().HaveCount(1); - result.First().SubscriptionUrl.Should().Be("https://ec-qas.d13fe27.kyma.ondemand.com"); - result.First().OfferId.Should().Be(new Guid("a16e73b9-5277-4b69-9f8d-3b227495dfea")); + result.Should().ContainSingle().Which.Should().Match<(Guid OfferId, Guid SubscriptionId, string? OfferName, string SubscriptionUrl, Guid LeadPictureId, string Provider)>(x => + x.SubscriptionUrl == "https://ec-qas.d13fe27.kyma.ondemand.com" && + x.OfferId == new Guid("ac1cf001-7fbc-1f2f-817f-bce05744000b") + ); } #endregion @@ -243,93 +243,62 @@ public async Task GetOfferDetailsAndCheckUser_WithSubscriptionForOfferWithoutApp #endregion - #region GetSubscriptionDetailForProviderAsync + #region GetOfferSubscriptionDetailForProviderAsync [Fact] - public async Task GetSubscriptionDetailForProviderAsync_ReturnsExpected() + public async Task GetOfferSubscriptionDetailForAppProviderAsync_ReturnsExpected() { // Arrange var (sut, _) = await CreateSut(); // Act - var result = await sut.GetSubscriptionDetailsForProviderAsync(new Guid("a16e73b9-5277-4b69-9f8d-3b227495dfea"), new Guid("3DE6A31F-A5D1-4F60-AA3A-4B1A769BECBF"), _userCompanyId, OfferTypeId.SERVICE, new[] { new Guid("58f897ec-0aad-4588-8ffa-5f45d6638632") }); + var result = await sut.GetOfferSubscriptionDetailsForProviderAsync(new Guid("ac1cf001-7fbc-1f2f-817f-bce05744000b"), new Guid("0b2ca541-206d-48ad-bc02-fb61fbcb5552"), new Guid("0dcd8209-85e2-4073-b130-ac094fb47106"), OfferTypeId.APP, new[] { new Guid("7410693c-c893-409e-852f-9ee886ce94a6") }); // Assert result.Exists.Should().BeTrue(); result.IsUserOfCompany.Should().BeTrue(); - result.Details.Should().NotBeNull().And.Match(x => - x.Name == "SDE with EDC" && - x.Customer == "CX-Operator" && - x.Contact.SequenceEqual(new[] { "tobeadded@cx.com" }) && - x.OfferSubscriptionStatus == OfferSubscriptionStatusId.ACTIVE - && x.TechnicalUserData.All(x => x.Id == new Guid("d0c8ae19-d4f3-49cc-9cb4-6c766d4680f2") && x.Name == "sa-x-4")); - } - - [Fact] - public async Task GetSubscriptionDetailForProviderAsync_WithNotExistingId_ReturnsExpected() - { - // Arrange - var (sut, _) = await CreateSut(); - - // Act - var result = await sut.GetSubscriptionDetailsForProviderAsync(Guid.NewGuid(), new Guid("3DE6A31F-A5D1-4F60-AA3A-4B1A769BECBF"), _userCompanyId, OfferTypeId.SERVICE, new List()); - - // Assert - result.Exists.Should().BeFalse(); - result.IsUserOfCompany.Should().BeFalse(); - result.Details.Should().BeNull(); - } - - [Fact] - public async Task GetSubscriptionDetailForProviderAsync_WithWrongUser_ReturnsExpected() - { - // Arrange - var (sut, _) = await CreateSut(); - - // Act - var result = await sut.GetSubscriptionDetailsForProviderAsync(new Guid("a16e73b9-5277-4b69-9f8d-3b227495dfea"), new Guid("3DE6A31F-A5D1-4F60-AA3A-4B1A769BECBF"), Guid.NewGuid(), OfferTypeId.SERVICE, new List()); - - // Assert - result.Exists.Should().BeTrue(); - result.IsUserOfCompany.Should().BeFalse(); - result.Details.Should().BeNull(); + result.Details.Should().NotBeNull().And.Match(x => + x.Name == "Project Implementation: Earth Commerce" && + x.Customer == "Bayerische Motorenwerke AG" && + x.Bpn == "BPNL00000003AYRE" && + x.Contact.SequenceEqual(new[] { "test@email.com" }) && + x.OfferSubscriptionStatus == OfferSubscriptionStatusId.ACTIVE && + x.TenantUrl == "https://ec-qas.d13fe27.kyma.ondemand.com" && + x.AppInstanceId == "https://catenax-int-dismantler-s66pftcc.authentication.eu10.hana.ondemand.com" && + x.ProcessSteps.Count() == 0); } - #endregion - - #region GetAppSubscriptionDetailForProviderAsync - [Fact] - public async Task GetAppSubscriptionDetailForProviderAsync_ReturnsExpected() + public async Task GetOfferSubscriptionDetailForServiceProviderAsync_ReturnsExpected() { // Arrange var (sut, _) = await CreateSut(); // Act - var result = await sut.GetAppSubscriptionDetailsForProviderAsync(new Guid("a16e73b9-5277-4b69-9f8d-3b227495dfea"), new Guid("3DE6A31F-A5D1-4F60-AA3A-4B1A769BECBF"), _userCompanyId, OfferTypeId.SERVICE, new[] { new Guid("58f897ec-0aad-4588-8ffa-5f45d6638632") }); + var result = await sut.GetOfferSubscriptionDetailsForProviderAsync(new Guid("a16e73b9-5277-4b69-9f8d-3b227495dfea"), new Guid("3DE6A31F-A5D1-4F60-AA3A-4B1A769BECBF"), _userCompanyId, OfferTypeId.SERVICE, new[] { new Guid("58f897ec-0aad-4588-8ffa-5f45d6638632") }); // Assert result.Exists.Should().BeTrue(); result.IsUserOfCompany.Should().BeTrue(); - result.Details.Should().NotBeNull().And.Match(x => + result.Details.Should().NotBeNull().And.Match(x => x.Name == "SDE with EDC" && x.Customer == "CX-Operator" && x.Contact.SequenceEqual(new[] { "tobeadded@cx.com" }) && x.OfferSubscriptionStatus == OfferSubscriptionStatusId.ACTIVE && - x.TenantUrl == "https://ec-qas.d13fe27.kyma.ondemand.com" && - x.AppInstanceId == "https://catenax-int-dismantler-s66pftcc.authentication.eu10.hana.ondemand.com" && + x.TenantUrl == null && + x.AppInstanceId == null && x.ProcessSteps.Count() == 3 && x.ProcessSteps.Count(y => y.ProcessStepTypeId == ProcessStepTypeId.AWAIT_START_AUTOSETUP && y.ProcessStepStatusId == ProcessStepStatusId.TODO) == 1); } [Fact] - public async Task GetAppSubscriptionDetailForProviderAsync_WithNotExistingId_ReturnsExpected() + public async Task GetOfferSubscriptionDetailForProviderAsync_WithNotExistingId_ReturnsExpected() { // Arrange var (sut, _) = await CreateSut(); // Act - var result = await sut.GetAppSubscriptionDetailsForProviderAsync(Guid.NewGuid(), new Guid("3DE6A31F-A5D1-4F60-AA3A-4B1A769BECBF"), _userCompanyId, OfferTypeId.SERVICE, new List()); + var result = await sut.GetOfferSubscriptionDetailsForProviderAsync(Guid.NewGuid(), new Guid("3DE6A31F-A5D1-4F60-AA3A-4B1A769BECBF"), _userCompanyId, OfferTypeId.SERVICE, new List()); // Assert result.Exists.Should().BeFalse(); @@ -338,13 +307,13 @@ public async Task GetAppSubscriptionDetailForProviderAsync_WithNotExistingId_Ret } [Fact] - public async Task GetAppSubscriptionDetailForProviderAsync_WithWrongUserCompany_ReturnsExpected() + public async Task GetOfferSubscriptionDetailForProviderAsync_WithWrongUserCompany_ReturnsExpected() { // Arrange var (sut, _) = await CreateSut(); // Act - var result = await sut.GetAppSubscriptionDetailsForProviderAsync(new Guid("a16e73b9-5277-4b69-9f8d-3b227495dfea"), new Guid("3DE6A31F-A5D1-4F60-AA3A-4B1A769BECBF"), Guid.NewGuid(), OfferTypeId.SERVICE, new[] { new Guid("58f897ec-0aad-4588-8ffa-5f45d6638632") }); + var result = await sut.GetOfferSubscriptionDetailsForProviderAsync(new Guid("a16e73b9-5277-4b69-9f8d-3b227495dfea"), new Guid("3DE6A31F-A5D1-4F60-AA3A-4B1A769BECBF"), Guid.NewGuid(), OfferTypeId.SERVICE, new[] { new Guid("58f897ec-0aad-4588-8ffa-5f45d6638632") }); // Assert result.Exists.Should().BeTrue(); @@ -376,7 +345,7 @@ public async Task GetSubscriptionDetailForSubscriberAsync_ReturnsExpected() x.ConnectorData.SequenceEqual(new[]{ new SubscriptionAssignedConnectorData( new Guid("bd644d9c-ca12-4488-ae38-6eb902c9bec0"), "Test Connector 123", - "www.google.de")})); + "www.connector123.de")})); } [Fact] diff --git a/tests/portalbackend/PortalBackend.DBAccess.Tests/OfferSubscriptionViewTests.cs b/tests/portalbackend/PortalBackend.DBAccess.Tests/OfferSubscriptionViewTests.cs index a21fb09929..3b9ae1f273 100644 --- a/tests/portalbackend/PortalBackend.DBAccess.Tests/OfferSubscriptionViewTests.cs +++ b/tests/portalbackend/PortalBackend.DBAccess.Tests/OfferSubscriptionViewTests.cs @@ -56,16 +56,20 @@ public async Task OfferSubscriptionView_GetAll_ReturnsExpected() public async Task OfferSubscriptionView_GetSpecific_ReturnsExpected() { // Arrange - var subscriptionId = new Guid("3de6a31f-a5d1-4f60-aa3a-4b1a769becbf"); + var subscriptionId = new Guid("0b2ca541-206d-48ad-bc02-fb61fbcb5552"); var sut = await CreateContext(); // Act - var result = await sut.OfferSubscriptionView.SingleOrDefaultAsync(x => x.SubscriptionId == subscriptionId); - result.Should().NotBeNull(); - result!.SubscriptionId.Should().Be(subscriptionId); - result.OfferTypeId.Should().Be(OfferTypeId.SERVICE); - result.TechnicalUser.Should().Be(new Guid("d0c8ae19-d4f3-49cc-9cb4-6c766d4680f2")); - result.AppInstance.Should().Be(new Guid("ab25c218-9ab3-4f1a-b6f4-6394fbc33c5b")); + var result = await sut.OfferSubscriptionView.Where(x => x.SubscriptionId == subscriptionId).ToListAsync(); + result.Should().HaveCount(2) + .And.AllSatisfy(x => + x.Should().Match(x => + x.SubscriptionId == subscriptionId && + x.OfferTypeId == OfferTypeId.APP && + x.AppInstance == new Guid("ab25c218-9ab3-4f1a-b6f4-6394fbc33c5a"))) + .And.Satisfy( + x => x.TechnicalUser == new Guid("93eecd4e-ca47-4dd2-85bf-775ea72eb000"), + x => x.TechnicalUser == new Guid("d0c8ae19-d4f3-49cc-9cb4-6c766d4680f3")); } #endregion diff --git a/tests/portalbackend/PortalBackend.DBAccess.Tests/PortalBackend.DBAccess.Tests.csproj b/tests/portalbackend/PortalBackend.DBAccess.Tests/PortalBackend.DBAccess.Tests.csproj index fe9cd0a0e3..f4dceb5b8e 100644 --- a/tests/portalbackend/PortalBackend.DBAccess.Tests/PortalBackend.DBAccess.Tests.csproj +++ b/tests/portalbackend/PortalBackend.DBAccess.Tests/PortalBackend.DBAccess.Tests.csproj @@ -28,11 +28,11 @@ xUnit1030;xUnit1041 - + - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/portalbackend/PortalBackend.DBAccess.Tests/PortalDbContextTests.cs b/tests/portalbackend/PortalBackend.DBAccess.Tests/PortalDbContextTests.cs index e7ffdd4caa..2ddb707b04 100644 --- a/tests/portalbackend/PortalBackend.DBAccess.Tests/PortalDbContextTests.cs +++ b/tests/portalbackend/PortalBackend.DBAccess.Tests/PortalDbContextTests.cs @@ -94,7 +94,7 @@ public async Task SaveCreatedAuditableEntity_SetsLastEditorId() ca.DateLastChanged.Should().Be(now); var auditEntries = await sut.AuditCompanyApplication20231115.Where(x => x.Id == id).ToListAsync(); auditEntries.Should().ContainSingle().Which.Should().Match( - x => x.ApplicationStatusId == CompanyApplicationStatusId.CREATED && (x.DateCreated - before) < TimeSpan.FromSeconds(1) && x.AuditV1OperationId == AuditOperationId.INSERT && (x.AuditV1DateLastChanged - now) < TimeSpan.FromSeconds(1) && x.LastEditorId == new Guid("ac1cf001-7fbc-1f2f-817f-bce058020001")); + x => x.ApplicationStatusId == CompanyApplicationStatusId.CREATED && (x.DateCreated - before) < TimeSpan.FromSeconds(2) && x.AuditV1OperationId == AuditOperationId.INSERT && (x.AuditV1DateLastChanged - now) < TimeSpan.FromSeconds(2) && x.LastEditorId == new Guid("ac1cf001-7fbc-1f2f-817f-bce058020001")); await trans.RollbackAsync(); } @@ -124,8 +124,8 @@ public async Task SaveDeletedAuditableEntity_SetsLastEditorId() ca.DateLastChanged.Should().Be(later); var auditEntries = await sut.AuditCompanyApplication20231115.Where(x => x.Id == id).ToListAsync(); auditEntries.Should().HaveCount(2).And.Satisfy( - x => x.ApplicationStatusId == CompanyApplicationStatusId.CREATED && (x.DateCreated - before) < TimeSpan.FromSeconds(1) && x.AuditV1OperationId == AuditOperationId.INSERT && x.LastEditorId == new Guid("ac1cf001-7fbc-1f2f-817f-bce058020001"), - x => x.ApplicationStatusId == CompanyApplicationStatusId.CREATED && (x.DateCreated - before) < TimeSpan.FromSeconds(1) && x.AuditV1OperationId == AuditOperationId.DELETE && (x.AuditV1DateLastChanged - later) < TimeSpan.FromSeconds(1) && x.LastEditorId == new Guid("ac1cf001-7fbc-1f2f-817f-bce058020001")); + x => x.ApplicationStatusId == CompanyApplicationStatusId.CREATED && (x.DateCreated - before) < TimeSpan.FromSeconds(2) && x.AuditV1OperationId == AuditOperationId.INSERT && x.LastEditorId == new Guid("ac1cf001-7fbc-1f2f-817f-bce058020001"), + x => x.ApplicationStatusId == CompanyApplicationStatusId.CREATED && (x.DateCreated - before) < TimeSpan.FromSeconds(2) && x.AuditV1OperationId == AuditOperationId.DELETE && (x.AuditV1DateLastChanged - later) < TimeSpan.FromSeconds(2) && x.LastEditorId == new Guid("ac1cf001-7fbc-1f2f-817f-bce058020001")); await trans.RollbackAsync(); } diff --git a/tests/portalbackend/PortalBackend.DBAccess.Tests/Seeder/Data/app_subscription_details.unittest.json b/tests/portalbackend/PortalBackend.DBAccess.Tests/Seeder/Data/app_subscription_details.unittest.json index 2bdb86932e..c7e15ad196 100644 --- a/tests/portalbackend/PortalBackend.DBAccess.Tests/Seeder/Data/app_subscription_details.unittest.json +++ b/tests/portalbackend/PortalBackend.DBAccess.Tests/Seeder/Data/app_subscription_details.unittest.json @@ -6,13 +6,6 @@ "app_subscription_url": "https://ec-qas.d13fe27.kyma.ondemand.com", "last_editor_id": null }, - { - "id": "88b0661c-cc22-4a4a-9721-fc4f3cec21f9", - "offer_subscription_id": "3de6a31f-a5d1-4f60-aa3a-4b1a769becbf", - "app_instance_id": "ab25c218-9ab3-4f1a-b6f4-6394fbc33c5b", - "app_subscription_url": "https://ec-qas.d13fe27.kyma.ondemand.com", - "last_editor_id": null - }, { "id": "bedb45bf-7094-4da0-9e69-0695db782a16", "offer_subscription_id": "ed4de48d-fd4b-4384-a72f-ecae3c6cc5ba", diff --git a/tests/portalbackend/PortalBackend.DBAccess.Tests/Seeder/Data/connectors.unittest.json b/tests/portalbackend/PortalBackend.DBAccess.Tests/Seeder/Data/connectors.unittest.json index 0f53546dce..d09225b721 100644 --- a/tests/portalbackend/PortalBackend.DBAccess.Tests/Seeder/Data/connectors.unittest.json +++ b/tests/portalbackend/PortalBackend.DBAccess.Tests/Seeder/Data/connectors.unittest.json @@ -2,7 +2,7 @@ { "id": "7e86a0b8-6903-496b-96d1-0ef508206836", "name": "Test Connector 4", - "connector_url": "www.google.de", + "connector_url": "www.connector4.de", "type_id": 1, "status_id": 2, "provider_id": "ac861325-bc54-4583-bcdc-9e9f2a38ff84", @@ -13,7 +13,7 @@ { "id": "595a5784-3f28-4ec3-a986-651342d1be81", "name": "Test Connector 6", - "connector_url": "www.google.de", + "connector_url": "www.connector6.de", "type_id": 1, "status_id": 2, "provider_id": "2dc4249f-b5ca-4d42-bef1-7a7a950a4f87", @@ -25,7 +25,7 @@ { "id": "727365d6-5599-4598-a888-58733fa138e7", "name": "Test Connector 5", - "connector_url": "www.google.de", + "connector_url": "www.connector5.de", "type_id": 1, "status_id": 2, "provider_id": "ac861325-bc54-4583-bcdc-9e9f2a38ff84", @@ -36,7 +36,7 @@ { "id": "8e10b910-523c-435e-b700-4a0c7b31f044", "name": "Test Connector 7", - "connector_url": "www.google.de", + "connector_url": "www.connector7.de", "type_id": 1, "status_id": 2, "provider_id": "41fd2ab8-71cd-4546-9bef-a388d91b2542", @@ -47,7 +47,7 @@ { "id": "7e86a0b8-6903-496b-96d1-0ef508206833", "name": "Test Connector 1", - "connector_url": "www.google.de", + "connector_url": "www.connector1.de", "type_id": 1, "status_id": 1, "provider_id": "2dc4249f-b5ca-4d42-bef1-7a7a950a4f87", @@ -58,7 +58,7 @@ { "id": "7e86a0b8-6903-496b-96d1-0ef508206839", "name": "Test Connector 2", - "connector_url": "www.google.de", + "connector_url": "www.connector2.de", "type_id": 1, "status_id": 1, "provider_id": "41fd2ab8-71cd-4546-9bef-a388d91b2542", @@ -69,7 +69,7 @@ { "id": "7e86a0b8-6903-496b-96d1-0ef508206838", "name": "Test Connector 3", - "connector_url": "www.google.de", + "connector_url": "www.connector3.de", "type_id": 2, "status_id": 1, "provider_id": "41fd2ab8-71cd-4546-9bef-a388d91b2542", @@ -81,7 +81,7 @@ { "id": "4618c650-709c-4580-956a-85b76eecd4b8", "name": "Test Connector 666", - "connector_url": "www.google.de", + "connector_url": "www.connector666.de", "type_id": 2, "status_id": 1, "provider_id": "41fd2ab8-71cd-4546-9bef-a388d91b2542", @@ -92,7 +92,7 @@ { "id": "bd644d9c-ca12-4488-ae38-6eb902c9bec0", "name": "Test Connector 123", - "connector_url": "www.google.de", + "connector_url": "www.connector123.de", "type_id": 2, "status_id": 1, "provider_id": "2dc4249f-b5ca-4d42-bef1-7a7a950a4f88", @@ -103,7 +103,7 @@ { "id": "12481a39-ca13-4760-bbbb-f6ff98508007", "name": "Test Connector 42", - "connector_url": "www.google.de", + "connector_url": "www.connector42.de", "type_id": 1, "status_id": 1, "provider_id": "a45f3b2e-29f7-4b52-8bb2-15b204849d87", @@ -111,5 +111,16 @@ "location_id": "DE", "self_description_document_id": null, "sd_creation_process_id": "4a5059d9-c427-42b7-aa54-5e5a240946d3" + }, + { + "id": "12481a39-ca13-4760-bbbb-f6ff98508008", + "name": "Test Connector 43", + "connector_url": "www.connector43.de", + "type_id": 1, + "status_id": 2, + "provider_id": "a45f3b2e-29f7-4b52-8bb2-15b204849d87", + "host_id": "41fd2ab8-71cd-4546-9bef-a388d91b2542", + "location_id": "DE", + "self_description_document_id": null } ] diff --git a/tests/portalbackend/PortalBackend.DBAccess.Tests/Seeder/Data/identity_assigned_roles.unittest.json b/tests/portalbackend/PortalBackend.DBAccess.Tests/Seeder/Data/identity_assigned_roles.unittest.json index 67e4b02a52..77430f9f61 100644 --- a/tests/portalbackend/PortalBackend.DBAccess.Tests/Seeder/Data/identity_assigned_roles.unittest.json +++ b/tests/portalbackend/PortalBackend.DBAccess.Tests/Seeder/Data/identity_assigned_roles.unittest.json @@ -68,5 +68,15 @@ "identity_id": "8b42e6de-7b59-4217-a63c-198e83d93777", "user_role_id": "7410693c-c893-409e-852f-9ee886ce94a6", "last_editor_id": null - } + }, + { + "identity_id": "8b42e6de-7b59-4217-a63c-198e83d93776", + "user_role_id": "7410693c-c893-409e-852f-9ee886ce94a6", + "last_editor_id": null + }, + { + "identity_id": "8b42e6de-7b59-4217-a63c-198e83d93776", + "user_role_id": "efc20368-9e82-46ff-b88f-6495b9810253", + "last_editor_id": null + } ] diff --git a/tests/portalbackend/PortalBackend.DBAccess.Tests/Seeder/Data/offers.unittest.json b/tests/portalbackend/PortalBackend.DBAccess.Tests/Seeder/Data/offers.unittest.json index fc7e53aab8..4899b0b78c 100644 --- a/tests/portalbackend/PortalBackend.DBAccess.Tests/Seeder/Data/offers.unittest.json +++ b/tests/portalbackend/PortalBackend.DBAccess.Tests/Seeder/Data/offers.unittest.json @@ -36,7 +36,7 @@ "name": "Consulting Service - Data Readiness", "date_created": "2023-01-01 00:00:00.000000 +00:00", "date_released": "2023-01-01 00:00:00.000001 +00:00", - "marketing_url": null, + "marketing_url": "https://google.com", "contact_email": null, "contact_number": "0000", "provider_company_id": "2dc4249f-b5ca-4d42-bef1-7a7a950a4f87", diff --git a/tests/portalbackend/PortalBackend.DBAccess.Tests/Seeder/Data/technical_users.unittest.json b/tests/portalbackend/PortalBackend.DBAccess.Tests/Seeder/Data/technical_users.unittest.json index f6866ec5d7..3049e8ea9d 100644 --- a/tests/portalbackend/PortalBackend.DBAccess.Tests/Seeder/Data/technical_users.unittest.json +++ b/tests/portalbackend/PortalBackend.DBAccess.Tests/Seeder/Data/technical_users.unittest.json @@ -1,13 +1,4 @@ [ - { - "id": "d0c8ae19-d4f3-49cc-9cb4-6c766d4680f2", - "name": "sa-test", - "description": "SA for offer subscription", - "technical_user_type_id": 2, - "technical_user_kind_id": 1, - "offer_subscription_id": "3DE6A31F-A5D1-4F60-AA3A-4B1A769BECBF", - "client_client_id":"sa-x-4" - }, { "id": "d0c8ae19-d4f3-49cc-9cb4-6c766d4680f3", "name": "sa-test", diff --git a/tests/portalbackend/PortalBackend.DBAccess.Tests/Seeder/Data/user_roles.unittest.json b/tests/portalbackend/PortalBackend.DBAccess.Tests/Seeder/Data/user_roles.unittest.json index 3bfc0f7f23..c8cf3c65ab 100644 --- a/tests/portalbackend/PortalBackend.DBAccess.Tests/Seeder/Data/user_roles.unittest.json +++ b/tests/portalbackend/PortalBackend.DBAccess.Tests/Seeder/Data/user_roles.unittest.json @@ -14,19 +14,19 @@ { "id": "aabcdfeb-6669-4c74-89f0-19cda090873e", "user_role": "test", - "offer_id": "a16e73b9-5277-4b69-9f8d-3b227495dfea", + "offer_id": "9b957704-3505-4445-822c-d7ef80f27fcd", "last_editor_id": null }, { "id": "efc20368-9e82-46ff-b88f-6495b9810254", "user_role": "Company Admin", - "offer_id": "a16e73b9-5277-4b69-9f8d-3b227495dfea", + "offer_id": "9b957704-3505-4445-822c-d7ef80f27fcd", "last_editor_id": null }, { "id": "efc20368-9e82-46ff-b88f-6495b9810255", "user_role": "IT Admin", - "offer_id": "a16e73b9-5277-4b69-9f8d-3b227495dfea", + "offer_id": "9b957704-3505-4445-822c-d7ef80f27fcd", "last_editor_id": null }, { diff --git a/tests/portalbackend/PortalBackend.DBAccess.Tests/TechnicalUserRepositoryTests.cs b/tests/portalbackend/PortalBackend.DBAccess.Tests/TechnicalUserRepositoryTests.cs index 257ee388ff..9a2ffbaaa2 100644 --- a/tests/portalbackend/PortalBackend.DBAccess.Tests/TechnicalUserRepositoryTests.cs +++ b/tests/portalbackend/PortalBackend.DBAccess.Tests/TechnicalUserRepositoryTests.cs @@ -292,9 +292,9 @@ public async Task GetOwnCompanyServiceAccountsUntracked_WithOwnerTrue_ReturnsExp // Assert result.Should().NotBeNull(); - result!.Count.Should().Be(22); + result!.Count.Should().Be(21); result.Data.Should().HaveCount(10) - .And.AllSatisfy(x => x.Should().Match(y => + .And.AllSatisfy(x => x.Should().Match(y => y.TechnicalUserTypeId == TechnicalUserTypeId.OWN && y.UserStatusId == UserStatusId.ACTIVE)) .And.BeInAscendingOrder(x => x.Name) diff --git a/tests/portalbackend/PortalBackend.Migrations.Tests/PortalBackend.Migrations.Tests.csproj b/tests/portalbackend/PortalBackend.Migrations.Tests/PortalBackend.Migrations.Tests.csproj index 496cad676d..dfd9178e50 100644 --- a/tests/portalbackend/PortalBackend.Migrations.Tests/PortalBackend.Migrations.Tests.csproj +++ b/tests/portalbackend/PortalBackend.Migrations.Tests/PortalBackend.Migrations.Tests.csproj @@ -28,11 +28,11 @@ - + - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/processes/ApplicationChecklist.Executor.Tests/ApplicationChecklist.Executor.Tests.csproj b/tests/processes/ApplicationChecklist.Executor.Tests/ApplicationChecklist.Executor.Tests.csproj index 301cc54a2b..0cadb9a7f6 100644 --- a/tests/processes/ApplicationChecklist.Executor.Tests/ApplicationChecklist.Executor.Tests.csproj +++ b/tests/processes/ApplicationChecklist.Executor.Tests/ApplicationChecklist.Executor.Tests.csproj @@ -28,8 +28,8 @@ - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/processes/ApplicationChecklist.Library.Tests/ApplicationChecklist.Library.Tests.csproj b/tests/processes/ApplicationChecklist.Library.Tests/ApplicationChecklist.Library.Tests.csproj index 0f82b6639f..c6ab51a762 100644 --- a/tests/processes/ApplicationChecklist.Library.Tests/ApplicationChecklist.Library.Tests.csproj +++ b/tests/processes/ApplicationChecklist.Library.Tests/ApplicationChecklist.Library.Tests.csproj @@ -28,8 +28,8 @@ - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/processes/DimUserProcess.Executor.Tests/DimUserProcess.Executor.Tests.csproj b/tests/processes/DimUserProcess.Executor.Tests/DimUserProcess.Executor.Tests.csproj index ccdaae2288..677662815b 100644 --- a/tests/processes/DimUserProcess.Executor.Tests/DimUserProcess.Executor.Tests.csproj +++ b/tests/processes/DimUserProcess.Executor.Tests/DimUserProcess.Executor.Tests.csproj @@ -28,7 +28,7 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/processes/IdentityProviderProvisioning.Executor.Tests/IdentityProviderProvisioning.Executor.Tests.csproj b/tests/processes/IdentityProviderProvisioning.Executor.Tests/IdentityProviderProvisioning.Executor.Tests.csproj index 8bb9632eb7..160f4f0374 100644 --- a/tests/processes/IdentityProviderProvisioning.Executor.Tests/IdentityProviderProvisioning.Executor.Tests.csproj +++ b/tests/processes/IdentityProviderProvisioning.Executor.Tests/IdentityProviderProvisioning.Executor.Tests.csproj @@ -27,8 +27,8 @@ - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/processes/Invitation.Executor.Tests/Invitation.Executor.Tests.csproj b/tests/processes/Invitation.Executor.Tests/Invitation.Executor.Tests.csproj index 76091e52f7..cc4154e7a5 100644 --- a/tests/processes/Invitation.Executor.Tests/Invitation.Executor.Tests.csproj +++ b/tests/processes/Invitation.Executor.Tests/Invitation.Executor.Tests.csproj @@ -29,8 +29,8 @@ - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/processes/Mailing.Executor.Tests/Mailing.Executor.Tests.csproj b/tests/processes/Mailing.Executor.Tests/Mailing.Executor.Tests.csproj index 4a484a767f..e5e4fdf0c8 100644 --- a/tests/processes/Mailing.Executor.Tests/Mailing.Executor.Tests.csproj +++ b/tests/processes/Mailing.Executor.Tests/Mailing.Executor.Tests.csproj @@ -29,8 +29,8 @@ - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/processes/Mailing.Library.Tests/Mailing.Library.Tests.csproj b/tests/processes/Mailing.Library.Tests/Mailing.Library.Tests.csproj index d5d11c4592..778c17572d 100644 --- a/tests/processes/Mailing.Library.Tests/Mailing.Library.Tests.csproj +++ b/tests/processes/Mailing.Library.Tests/Mailing.Library.Tests.csproj @@ -32,8 +32,8 @@ - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/processes/NetworkRegistration.Executor.Tests/NetworkRegistration.Executor.Tests.csproj b/tests/processes/NetworkRegistration.Executor.Tests/NetworkRegistration.Executor.Tests.csproj index 90c87bc225..780ccb619b 100644 --- a/tests/processes/NetworkRegistration.Executor.Tests/NetworkRegistration.Executor.Tests.csproj +++ b/tests/processes/NetworkRegistration.Executor.Tests/NetworkRegistration.Executor.Tests.csproj @@ -28,8 +28,8 @@ - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/processes/NetworkRegistration.Library.Tests/NetworkRegistration.Library.Tests.csproj b/tests/processes/NetworkRegistration.Library.Tests/NetworkRegistration.Library.Tests.csproj index 5b94804cdf..d89a401379 100644 --- a/tests/processes/NetworkRegistration.Library.Tests/NetworkRegistration.Library.Tests.csproj +++ b/tests/processes/NetworkRegistration.Library.Tests/NetworkRegistration.Library.Tests.csproj @@ -28,8 +28,8 @@ - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/processes/OfferSubscription.Executor.Tests/OfferSubscription.Executor.Tests.csproj b/tests/processes/OfferSubscription.Executor.Tests/OfferSubscription.Executor.Tests.csproj index 1beca4c7bd..03098dc384 100644 --- a/tests/processes/OfferSubscription.Executor.Tests/OfferSubscription.Executor.Tests.csproj +++ b/tests/processes/OfferSubscription.Executor.Tests/OfferSubscription.Executor.Tests.csproj @@ -29,8 +29,8 @@ - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/processes/OfferSubscription.Library.Tests/OfferSubscription.Library.Tests.csproj b/tests/processes/OfferSubscription.Library.Tests/OfferSubscription.Library.Tests.csproj index a32d1eb7de..a6f7338017 100644 --- a/tests/processes/OfferSubscription.Library.Tests/OfferSubscription.Library.Tests.csproj +++ b/tests/processes/OfferSubscription.Library.Tests/OfferSubscription.Library.Tests.csproj @@ -29,8 +29,8 @@ - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/processes/Processes.Library.Tests/Processes.Library.Tests.csproj b/tests/processes/Processes.Library.Tests/Processes.Library.Tests.csproj index eb60d5acb4..079fc6a65b 100644 --- a/tests/processes/Processes.Library.Tests/Processes.Library.Tests.csproj +++ b/tests/processes/Processes.Library.Tests/Processes.Library.Tests.csproj @@ -28,8 +28,8 @@ - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/processes/Processes.Worker.Library.Tests/ProcessExecutionServiceTests.cs b/tests/processes/Processes.Worker.Library.Tests/ProcessExecutionServiceTests.cs index b9a8d18465..38a9b33a5d 100644 --- a/tests/processes/Processes.Worker.Library.Tests/ProcessExecutionServiceTests.cs +++ b/tests/processes/Processes.Worker.Library.Tests/ProcessExecutionServiceTests.cs @@ -507,11 +507,10 @@ public async Task ExecuteAsync_WithSystemException_Exits() await _service.ExecuteAsync(CancellationToken.None); // Assert - Environment.ExitCode.Should().Be(1); - A.CallTo(() => _mockLogger.Log(LogLevel.Information, A.That.IsNull(), A.That.Matches(x => x.StartsWith("start processing process")))).MustHaveHappenedOnceExactly(); + A.CallTo(() => _mockLogger.Log(LogLevel.Information, A.That.IsNull(), A.That.Matches(x => x.StartsWith("start processing process")))).MustHaveHappened(3, Times.Exactly); A.CallTo(() => _mockLogger.Log(LogLevel.Information, A.That.IsNotNull(), A._)).MustNotHaveHappened(); A.CallTo(() => _mockLogger.Log(LogLevel.Information, A.That.IsNull(), A.That.Matches(x => x.StartsWith("finished processing process")))).MustNotHaveHappened(); - A.CallTo(() => _mockLogger.Log(LogLevel.Error, A.That.Matches(e => e != null && e.Message == error.Message), $"processing failed with following Exception {error.Message}")).MustHaveHappenedOnceExactly(); + A.CallTo(() => _mockLogger.Log(LogLevel.Critical, A.That.Matches(e => e != null && e.Message == error.Message), A.That.StartsWith($"Critical error : processing process"))).MustHaveHappened(3, Times.Exactly); A.CallTo(() => _portalRepositories.SaveAsync()).MustNotHaveHappened(); } } diff --git a/tests/processes/Processes.Worker.Library.Tests/Processes.Worker.Library.Tests.csproj b/tests/processes/Processes.Worker.Library.Tests/Processes.Worker.Library.Tests.csproj index 7e18bed68e..78a3382ad7 100644 --- a/tests/processes/Processes.Worker.Library.Tests/Processes.Worker.Library.Tests.csproj +++ b/tests/processes/Processes.Worker.Library.Tests/Processes.Worker.Library.Tests.csproj @@ -28,8 +28,8 @@ - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/processes/SelfDescriptionCreation.Executor.Tests/SelfDescriptionCreation.Executor.Tests.csproj b/tests/processes/SelfDescriptionCreation.Executor.Tests/SelfDescriptionCreation.Executor.Tests.csproj index 78b1ef1218..dd6a5e45e6 100644 --- a/tests/processes/SelfDescriptionCreation.Executor.Tests/SelfDescriptionCreation.Executor.Tests.csproj +++ b/tests/processes/SelfDescriptionCreation.Executor.Tests/SelfDescriptionCreation.Executor.Tests.csproj @@ -29,8 +29,8 @@ - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/processes/UserProvisioning.Executor.Tests/UserProvisioning.Executor.Tests.csproj b/tests/processes/UserProvisioning.Executor.Tests/UserProvisioning.Executor.Tests.csproj index 58025ea557..82a3463672 100644 --- a/tests/processes/UserProvisioning.Executor.Tests/UserProvisioning.Executor.Tests.csproj +++ b/tests/processes/UserProvisioning.Executor.Tests/UserProvisioning.Executor.Tests.csproj @@ -27,8 +27,8 @@ - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/provisioning/Provisioning.DBAccess.Tests/Provisioning.DBAccess.Tests.csproj b/tests/provisioning/Provisioning.DBAccess.Tests/Provisioning.DBAccess.Tests.csproj index 124f4eb55a..e1368d9522 100644 --- a/tests/provisioning/Provisioning.DBAccess.Tests/Provisioning.DBAccess.Tests.csproj +++ b/tests/provisioning/Provisioning.DBAccess.Tests/Provisioning.DBAccess.Tests.csproj @@ -27,11 +27,11 @@ xUnit1030;xUnit1041 - + - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/provisioning/Provisioning.Library.Tests/Provisioning.Library.Tests.csproj b/tests/provisioning/Provisioning.Library.Tests/Provisioning.Library.Tests.csproj index 1755c71aba..fcf6694440 100644 --- a/tests/provisioning/Provisioning.Library.Tests/Provisioning.Library.Tests.csproj +++ b/tests/provisioning/Provisioning.Library.Tests/Provisioning.Library.Tests.csproj @@ -27,8 +27,8 @@ - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/provisioning/Provisioning.Library.Tests/UserProvisioningServiceAuxiliaryMethodsTests.cs b/tests/provisioning/Provisioning.Library.Tests/UserProvisioningServiceAuxiliaryMethodsTests.cs index 58f1243368..63f0d3dc7e 100644 --- a/tests/provisioning/Provisioning.Library.Tests/UserProvisioningServiceAuxiliaryMethodsTests.cs +++ b/tests/provisioning/Provisioning.Library.Tests/UserProvisioningServiceAuxiliaryMethodsTests.cs @@ -63,7 +63,7 @@ public UserProvisioningServiceAuxiliaryMethodsTests() #region GetCompanyNameIdpAliasData [Fact] - public async void TestCompanyNameIdpAliasDataFixtureSetup() + public async Task TestCompanyNameIdpAliasDataFixtureSetup() { var sut = new UserProvisioningService(null!, _portalRepositories); @@ -73,7 +73,7 @@ public async void TestCompanyNameIdpAliasDataFixtureSetup() } [Fact] - public async void TestCompanyNameIdpAliaswithNullCompanyNameAndEmailDataFixtureSetup() + public async Task TestCompanyNameIdpAliaswithNullCompanyNameAndEmailDataFixtureSetup() { A.CallTo(() => _identityProviderRepository.GetCompanyNameIdpAliasUntrackedAsync(A._, A._)) .Returns(_resultComposer.With( @@ -93,7 +93,7 @@ public async void TestCompanyNameIdpAliaswithNullCompanyNameAndEmailDataFixtureS } [Fact] - public async void TestCompanyNameIdpAliasDataNotFound() + public async Task TestCompanyNameIdpAliasDataNotFound() { ((Guid, string?, string?), (Guid, string?, string?, string?), (string?, bool)) notfound = default; @@ -109,7 +109,7 @@ public async void TestCompanyNameIdpAliasDataNotFound() } [Fact] - public async void TestCompanyNameIdpAliasDataIdpAliasNullThrows() + public async Task TestCompanyNameIdpAliasDataIdpAliasNullThrows() { A.CallTo(() => _identityProviderRepository.GetCompanyNameIdpAliasUntrackedAsync(A._, A._)) .Returns(_resultComposer.With( @@ -128,7 +128,7 @@ public async void TestCompanyNameIdpAliasDataIdpAliasNullThrows() } [Fact] - public async void TestCompanyNameIdpAliasDataCompanyNameNullThrows() + public async Task TestCompanyNameIdpAliasDataCompanyNameNullThrows() { var companyId = _fixture.Create(); @@ -154,7 +154,7 @@ public async void TestCompanyNameIdpAliasDataCompanyNameNullThrows() #region GetCompanyNameIdpAliasData [Fact] - public async void TestGetCompanyNameSharedIdpAliasDataFixtureSetup() + public async Task TestGetCompanyNameSharedIdpAliasDataFixtureSetup() { var sut = new UserProvisioningService(null!, _portalRepositories); @@ -164,7 +164,7 @@ public async void TestGetCompanyNameSharedIdpAliasDataFixtureSetup() } [Fact] - public async void TestGetCompanyNameSharedIdpwithNullCompanyNameAndEmailAliasDataFixtureSetup() + public async Task TestGetCompanyNameSharedIdpwithNullCompanyNameAndEmailAliasDataFixtureSetup() { // Arrange var data = ( @@ -185,8 +185,9 @@ public async void TestGetCompanyNameSharedIdpwithNullCompanyNameAndEmailAliasDat result.Should().NotBeNull(); result.NameCreatedBy.Should().Be("Dear User"); } + [Fact] - public async void TestGetCompanyNameSharedIdpAliasDataNotFound() + public async Task TestGetCompanyNameSharedIdpAliasDataNotFound() { var notfound = default(((Guid, string?, string?), (Guid, string?, string?, string?), IEnumerable<(Guid Id, string Alias)>)); @@ -202,7 +203,7 @@ public async void TestGetCompanyNameSharedIdpAliasDataNotFound() } [Fact] - public async void TestGetCompanyNameSharedIdpAliasDataForApplicationIdNotFound() + public async Task TestGetCompanyNameSharedIdpAliasDataForApplicationIdNotFound() { var notfound = default(((Guid, string?, string?), (Guid, string?, string?, string?), IEnumerable<(Guid Id, string Alias)>)); @@ -220,7 +221,7 @@ public async void TestGetCompanyNameSharedIdpAliasDataForApplicationIdNotFound() } [Fact] - public async void TestGetCompanyNameSharedIdpAliasDataNoIdpAliasThrows() + public async Task TestGetCompanyNameSharedIdpAliasDataNoIdpAliasThrows() { A.CallTo(() => _identityProviderRepository.GetCompanyNameIdpAliaseUntrackedAsync(A._, A._, A._, A._)) .Returns(_sharedIdpComposer.With(x => x.IdpAliase, Enumerable.Empty<(Guid Id, string Alias)>()).Create()); @@ -234,7 +235,7 @@ public async void TestGetCompanyNameSharedIdpAliasDataNoIdpAliasThrows() } [Fact] - public async void TestGetCompanyNameSharedIdpAliasDataMultipleIdpAliaseThrows() + public async Task TestGetCompanyNameSharedIdpAliasDataMultipleIdpAliaseThrows() { A.CallTo(() => _identityProviderRepository.GetCompanyNameIdpAliaseUntrackedAsync(A._, A._, A._, A._)) .Returns(_sharedIdpComposer.With(x => x.IdpAliase, _fixture.CreateMany<(Guid Id, string Alias)>(2)).Create()); @@ -248,7 +249,7 @@ public async void TestGetCompanyNameSharedIdpAliasDataMultipleIdpAliaseThrows() } [Fact] - public async void TestGetCompanyNameSharedIdpAliasDataCompanyNameNullThrows() + public async Task TestGetCompanyNameSharedIdpAliasDataCompanyNameNullThrows() { var companyId = _fixture.Create(); diff --git a/tests/registration/ApplicationActivation.Library.Tests/ApplicationActivation.Library.Tests.csproj b/tests/registration/ApplicationActivation.Library.Tests/ApplicationActivation.Library.Tests.csproj index 110df26656..274effdb74 100644 --- a/tests/registration/ApplicationActivation.Library.Tests/ApplicationActivation.Library.Tests.csproj +++ b/tests/registration/ApplicationActivation.Library.Tests/ApplicationActivation.Library.Tests.csproj @@ -28,8 +28,8 @@ - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/registration/Registration.Service.Tests/Registration.Service.Tests.csproj b/tests/registration/Registration.Service.Tests/Registration.Service.Tests.csproj index 919e45d780..85cbcda714 100644 --- a/tests/registration/Registration.Service.Tests/Registration.Service.Tests.csproj +++ b/tests/registration/Registration.Service.Tests/Registration.Service.Tests.csproj @@ -30,8 +30,8 @@ - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/shared/Tests.Shared/Tests.Shared.csproj b/tests/shared/Tests.Shared/Tests.Shared.csproj index 58a48a40f3..1764788cf2 100644 --- a/tests/shared/Tests.Shared/Tests.Shared.csproj +++ b/tests/shared/Tests.Shared/Tests.Shared.csproj @@ -28,7 +28,7 @@ - + diff --git a/tests/web/Web.Identity.Tests/Web.Identity.Tests.csproj b/tests/web/Web.Identity.Tests/Web.Identity.Tests.csproj index 044a3936c7..7b85e680b7 100644 --- a/tests/web/Web.Identity.Tests/Web.Identity.Tests.csproj +++ b/tests/web/Web.Identity.Tests/Web.Identity.Tests.csproj @@ -28,8 +28,8 @@ - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/web/Web.PublicInfos.Tests/Web.PublicInfos.Tests.csproj b/tests/web/Web.PublicInfos.Tests/Web.PublicInfos.Tests.csproj index e2fbf6b410..1b8a821b45 100644 --- a/tests/web/Web.PublicInfos.Tests/Web.PublicInfos.Tests.csproj +++ b/tests/web/Web.PublicInfos.Tests/Web.PublicInfos.Tests.csproj @@ -28,8 +28,8 @@ - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all