diff --git a/.github/workflows/qodana.yml b/.github/workflows/qodana.yml index ad07567d..0507f2f1 100644 --- a/.github/workflows/qodana.yml +++ b/.github/workflows/qodana.yml @@ -15,6 +15,12 @@ on: schedule: - cron: '17 5 * * 0' # Random time workflow_dispatch: + inputs: + upload-result-as-artifact: + description: 'Upload Qodana result as artifact' + required: false + type: boolean + default: false concurrency: group: ${{ github.workflow }}-${{ github.ref }} @@ -27,6 +33,7 @@ jobs: runs-on: ubuntu-latest permissions: contents: write + pull-requests: write checks: write security-events: write steps: @@ -45,15 +52,21 @@ jobs: uses: JetBrains/qodana-action@v2024.3 with: pr-mode: false - args: | - --project-dir,src, - --save-report=false + post-pr-comment: true results-dir: ${{ runner.temp }}/qodana/results + use-annotations: true + use-caches: true cache-dir: ${{ runner.temp }}/qodana/caches primary-cache-key: ${{ runner.os }}-qodana-${{ github.ref }}-${{ hashFiles('**/*.csproj') }} additional-cache-key: ${{ runner.os }}-qodana-${{ github.ref }} + upload-result: ${{github.event_name == 'workflow_dispatch' && inputs.upload-result-as-artifact == true}} + github-token: ${{ github.token }} + args: | + --project-dir,src, + --save-report=false env: QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }} + QODANA_ENDPOINT: 'https://qodana.cloud' - name: 📊 upload sarif file for GitHub Advanced Security Dashboard uses: github/codeql-action/upload-sarif@v3 with: diff --git a/src/Objectivity.AutoFixture.XUnit2.Core.Tests/FixtureAssertionExtensions.cs b/src/Objectivity.AutoFixture.XUnit2.Core.Tests/FixtureAssertionExtensions.cs index a122eca3..957039b1 100644 --- a/src/Objectivity.AutoFixture.XUnit2.Core.Tests/FixtureAssertionExtensions.cs +++ b/src/Objectivity.AutoFixture.XUnit2.Core.Tests/FixtureAssertionExtensions.cs @@ -4,8 +4,7 @@ using System.Linq; using global::AutoFixture; - - using JetBrains.Annotations; + using global::AutoFixture.Kernel; using Objectivity.AutoFixture.XUnit2.Core.SpecimenBuilders; @@ -13,39 +12,39 @@ internal static class FixtureAssertionExtensions { - [AssertionMethod] internal static void ShouldNotThrowOnRecursion(this IFixture fixture) { // Ensure there is no behavior for throwing exception on recursive structures. - Assert.DoesNotContain(fixture.Behaviors, b => b is ThrowingRecursionBehavior); + Assert.DoesNotContain(fixture.Behaviors, IsSpecimenBuilderTransformation); } - [AssertionMethod] internal static void ShouldOmitRecursion(this IFixture fixture) { // Ensure there is a behavior added for omitting recursive types // on default recursion depth. - Assert.Single(fixture.Behaviors, b => b is OmitOnRecursionBehavior); + Assert.Single(fixture.Behaviors, IsSpecimenBuilderTransformation); } - [AssertionMethod] internal static void ShouldNotIgnoreVirtualMembers(this IFixture fixture) { - Assert.DoesNotContain(fixture.Customizations, s => s is IgnoreVirtualMembersSpecimenBuilder); + Assert.DoesNotContain(fixture.Customizations, IsSpecimenBuilder); } - [AssertionMethod] internal static void ShouldIgnoreVirtualMembers(this IFixture fixture) { - Assert.Single(fixture.Customizations, s => s is IgnoreVirtualMembersSpecimenBuilder); + Assert.Single(fixture.Customizations, IsSpecimenBuilder); } - [AssertionMethod] internal static void ShouldIgnoreVirtualMembers(this IFixture fixture, Type reflectedType) { - Assert.Single( - fixture.Customizations.OfType(), - c => c.ReflectedType == reflectedType); + bool IsReflectedOnType(IgnoreVirtualMembersSpecimenBuilder c) => c.ReflectedType == reflectedType; + Assert.Single(fixture.Customizations.OfType(), IsReflectedOnType); } + + private static bool IsSpecimenBuilderTransformation(ISpecimenBuilderTransformation b) + where T : ISpecimenBuilderTransformation => b is T; + + private static bool IsSpecimenBuilder(ISpecimenBuilder s) + where T : ISpecimenBuilder => s is T; } }