Skip to content

Commit 3f39568

Browse files
dennisdoomenDennis Doomen
andauthored
Release/1.0 (#26)
* Fix the pipeline * Various improvements after dogfooding * More dogfooding feedback * SAVEPOINT * Try fix attestations * Bump InspectCode version * Bump InspectCode version * Allow assertions on requests that matched * WithBodyHavingProperty did not work correctly with multiple requests * RespondsWithContent uses application/json as default --------- Co-authored-by: Dennis Doomen <dennis.doomen@greenchoice.nl>
1 parent 288d463 commit 3f39568

20 files changed

+1546
-564
lines changed

.editorconfig

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,10 @@ dotnet_diagnostic.CA2007.severity = none
253253
# Rationale: Although nice to have, this rule is not always practical in existing codebases.
254254
dotnet_diagnostic.CA2234.severity = suggestion
255255

256+
# Purpose: Use an overload that has a IEqualityComparer<string> or IComparer<string> parameter
257+
# Reason: Not needed for tests
258+
dotnet_diagnostic.MA0002.severity = none
259+
256260
# Purpose: Use string.Equals instead of Equals operator
257261
# Rationale: Does not improve readability
258262
dotnet_diagnostic.MA0006.severity = none

.github/workflows/build.yml

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,34 @@
11

22
name: Build
33

4-
on:
5-
push:
6-
branches:
7-
- 'main'
8-
tags:
9-
- '*'
10-
pull_request:
4+
on: [push, pull_request]
115

126
jobs:
137
build:
148
name: "Build, Test, Analyze and Publish"
159
runs-on: windows-latest
1610

11+
permissions:
12+
id-token: write
13+
attestations: write
14+
contents: write
15+
security-events: write
16+
actions: write
17+
1718
env:
1819
DOTNET_NOLOGO: false
1920

2021
steps:
21-
- uses: actions/checkout@v4
22+
- uses: actions/checkout@v5
2223
with:
2324
fetch-depth: 0
2425

2526
- name: Setup .NET SDKs
26-
uses: actions/setup-dotnet@v4
27+
uses: actions/setup-dotnet@v5
2728
with:
2829
dotnet-version: |
2930
3.0.x
30-
6.0.x
31+
8.0.x
3132
3233
- name: Run NUKE
3334
run: ./build.ps1
@@ -48,14 +49,27 @@ jobs:
4849
github-token: ${{ secrets.GITHUB_TOKEN }}
4950
file: TestResults/reports/lcov.info
5051

52+
- name: Check for NuGet package existence
53+
id: check_nupkg
54+
if: startsWith(github.ref, 'refs/tags/')
55+
uses: andstor/file-existence-action@v3
56+
with:
57+
files: "Artifacts/*.nupkg"
58+
59+
- name: Attest NuGet package
60+
uses: actions/attest-build-provenance@v3
61+
if: startsWith(github.ref, 'refs/tags/') && steps.check_nupkg.outputs.files_exists == 'true'
62+
with:
63+
subject-path: ./Artifacts/*.nupkg
64+
5165
- name: Upload SARIF file
52-
uses: github/codeql-action/upload-sarif@v3
66+
uses: github/codeql-action/upload-sarif@v4
5367
with:
5468
sarif_file: Artifacts/CodeIssues.sarif
5569

5670
- name: Upload artifacts
5771
if: always()
58-
uses: actions/upload-artifact@v4
72+
uses: actions/upload-artifact@v5
5973
with:
6074
name: windows-artifacts
6175
path: |
@@ -73,7 +87,7 @@ jobs:
7387

7488
steps:
7589
- name: Download Artifacts
76-
uses: actions/download-artifact@v4
90+
uses: actions/download-artifact@v5
7791
with:
7892
path: artifacts
7993

@@ -82,4 +96,4 @@ jobs:
8296
with:
8397
comment_mode: always
8498
files: "artifacts/**/**/*.trx"
85-
99+

.packageguard/cache.bin

7.3 KB
Binary file not shown.

Build/_build.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@
1515
<PackageReference Include="Nuke.Common" Version="9.0.4" />
1616
<PackageReference Include="Nuke.Components" Version="9.0.4" />
1717
<PackageDownload Include="ReportGenerator" Version="[5.2.0]" />
18-
<PackageDownload Include="GitVersion.Tool" Version="[6.0.2]" />
18+
<PackageDownload Include="GitVersion.Tool" Version="[6.5.0]" />
1919
<PackageDownload Include="PackageGuard" Version="[2.0.0]" />
20-
<PackageDownload Include="JetBrains.ReSharper.GlobalTools" Version="[2025.2.0]" />
20+
<PackageDownload Include="JetBrains.ReSharper.GlobalTools" Version="[2025.3.0.3]" />
2121
</ItemGroup>
2222

2323
</Project>

GitVersion.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,6 @@ branches:
88
pull-request:
99
regex: ((pull|pull\-requests|pr)[/-]|[/-](merge))
1010
label: pr
11+
hotfix:
12+
prevent-increment:
13+
when-current-commit-tagged: true

Mockly.ApiVerificationTests/ApprovedApi/FluentAssertions.Mockly.v7.net472.verified.txt

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,17 @@ namespace Mockly
55
{
66
public CapturedRequestAssertions(Mockly.CapturedRequest subject) { }
77
protected override string Identifier { get; }
8-
public void BeExpected(string because = "", params object[] becauseArgs) { }
9-
public void BeUnexpected(string because = "", params object[] becauseArgs) { }
8+
public FluentAssertions.AndConstraint<Mockly.CapturedRequestAssertions> BeExpected(string because = "", params object[] becauseArgs) { }
9+
public FluentAssertions.AndConstraint<Mockly.CapturedRequestAssertions> BeUnexpected(string because = "", params object[] becauseArgs) { }
1010
}
1111
public class ContainedRequestAssertions : FluentAssertions.Primitives.ReferenceTypeAssertions<Mockly.CapturedRequest, Mockly.ContainedRequestAssertions>
1212
{
13-
public ContainedRequestAssertions(Mockly.CapturedRequest request) { }
1413
protected override string Identifier { get; }
15-
public Mockly.ContainedRequestAssertions WithBody(string wildcard, string because = "", params object[] becauseArgs) { }
16-
public Mockly.ContainedRequestAssertions WithBodyEquivalentTo<T>(T expected, string because = "", params object[] becauseArgs) { }
17-
public Mockly.ContainedRequestAssertions WithBodyHavingPropertiesOf(System.Collections.Generic.IDictionary<string, string> expectation, string because = "", params object[] becauseArgs) { }
18-
public Mockly.ContainedRequestAssertions WithBodyMatchingJson(string json, string because = "", params object[] becauseArgs) { }
14+
public FluentAssertions.AndWhichConstraint<Mockly.ContainedRequestAssertions, Mockly.CapturedRequest> WithBody(string wildcard, string because = "", params object[] becauseArgs) { }
15+
public FluentAssertions.AndWhichConstraint<Mockly.ContainedRequestAssertions, Mockly.CapturedRequest> WithBodyEquivalentTo<T>(T expected, string because = "", params object[] becauseArgs) { }
16+
public FluentAssertions.AndWhichConstraint<Mockly.ContainedRequestAssertions, Mockly.CapturedRequest> WithBodyHavingPropertiesOf(System.Collections.Generic.IDictionary<string, string> expectation, string because = "", params object[] becauseArgs) { }
17+
public FluentAssertions.AndWhichConstraint<Mockly.ContainedRequestAssertions, Mockly.CapturedRequest> WithBodyHavingProperty(string key, string value, string because = "", params object[] becauseArgs) { }
18+
public FluentAssertions.AndWhichConstraint<Mockly.ContainedRequestAssertions, Mockly.CapturedRequest> WithBodyMatchingJson(string json, string because = "", params object[] becauseArgs) { }
1919
}
2020
public static class HttpMockAssertionExtensions
2121
{
@@ -27,14 +27,16 @@ namespace Mockly
2727
{
2828
public HttpMockAssertions(Mockly.HttpMock subject) { }
2929
protected override string Identifier { get; }
30-
public void HaveAllRequestsCalled(string because = "", params object[] becauseArgs) { }
30+
public FluentAssertions.AndConstraint<Mockly.HttpMockAssertions> HaveAllRequestsCalled(string because = "", params object[] becauseArgs) { }
3131
}
3232
public class RequestCollectionAssertions : FluentAssertions.Collections.GenericCollectionAssertions<Mockly.CapturedRequest>
3333
{
3434
public RequestCollectionAssertions(Mockly.RequestCollection subject) { }
3535
public Mockly.ContainedRequestAssertions ContainRequest(string because = "", params object[] becauseArgs) { }
3636
public Mockly.ContainedRequestAssertions ContainRequestFor(System.Uri uri, string because = "", params object[] becauseArgs) { }
3737
public Mockly.ContainedRequestAssertions ContainRequestFor(string urlPattern, string because = "", params object[] becauseArgs) { }
38-
public void NotContainUnexpectedCalls(string because = "", params object[] becauseArgs) { }
38+
public FluentAssertions.AndConstraint<Mockly.RequestCollectionAssertions> NotContainRequestFor(System.Uri uri, string because = "", params object[] becauseArgs) { }
39+
public FluentAssertions.AndConstraint<Mockly.RequestCollectionAssertions> NotContainRequestFor(string urlPattern, string because = "", params object[] becauseArgs) { }
40+
public FluentAssertions.AndConstraint<Mockly.RequestCollectionAssertions> NotContainUnexpectedCalls(string because = "", params object[] becauseArgs) { }
3941
}
4042
}

Mockly.ApiVerificationTests/ApprovedApi/FluentAssertions.Mockly.v7.net8.0.verified.txt

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,17 @@ namespace Mockly
55
{
66
public CapturedRequestAssertions(Mockly.CapturedRequest subject) { }
77
protected override string Identifier { get; }
8-
public void BeExpected(string because = "", params object[] becauseArgs) { }
9-
public void BeUnexpected(string because = "", params object[] becauseArgs) { }
8+
public FluentAssertions.AndConstraint<Mockly.CapturedRequestAssertions> BeExpected(string because = "", params object[] becauseArgs) { }
9+
public FluentAssertions.AndConstraint<Mockly.CapturedRequestAssertions> BeUnexpected(string because = "", params object[] becauseArgs) { }
1010
}
1111
public class ContainedRequestAssertions : FluentAssertions.Primitives.ReferenceTypeAssertions<Mockly.CapturedRequest, Mockly.ContainedRequestAssertions>
1212
{
13-
public ContainedRequestAssertions(Mockly.CapturedRequest request) { }
1413
protected override string Identifier { get; }
15-
public Mockly.ContainedRequestAssertions WithBody(string wildcard, string because = "", params object[] becauseArgs) { }
16-
public Mockly.ContainedRequestAssertions WithBodyEquivalentTo<T>(T expected, string because = "", params object[] becauseArgs) { }
17-
public Mockly.ContainedRequestAssertions WithBodyHavingPropertiesOf(System.Collections.Generic.IDictionary<string, string> expectation, string because = "", params object[] becauseArgs) { }
18-
public Mockly.ContainedRequestAssertions WithBodyMatchingJson(string json, string because = "", params object[] becauseArgs) { }
14+
public FluentAssertions.AndWhichConstraint<Mockly.ContainedRequestAssertions, Mockly.CapturedRequest> WithBody(string wildcard, string because = "", params object[] becauseArgs) { }
15+
public FluentAssertions.AndWhichConstraint<Mockly.ContainedRequestAssertions, Mockly.CapturedRequest> WithBodyEquivalentTo<T>(T expected, string because = "", params object[] becauseArgs) { }
16+
public FluentAssertions.AndWhichConstraint<Mockly.ContainedRequestAssertions, Mockly.CapturedRequest> WithBodyHavingPropertiesOf(System.Collections.Generic.IDictionary<string, string> expectation, string because = "", params object[] becauseArgs) { }
17+
public FluentAssertions.AndWhichConstraint<Mockly.ContainedRequestAssertions, Mockly.CapturedRequest> WithBodyHavingProperty(string key, string value, string because = "", params object[] becauseArgs) { }
18+
public FluentAssertions.AndWhichConstraint<Mockly.ContainedRequestAssertions, Mockly.CapturedRequest> WithBodyMatchingJson(string json, string because = "", params object[] becauseArgs) { }
1919
}
2020
public static class HttpMockAssertionExtensions
2121
{
@@ -27,14 +27,16 @@ namespace Mockly
2727
{
2828
public HttpMockAssertions(Mockly.HttpMock subject) { }
2929
protected override string Identifier { get; }
30-
public void HaveAllRequestsCalled(string because = "", params object[] becauseArgs) { }
30+
public FluentAssertions.AndConstraint<Mockly.HttpMockAssertions> HaveAllRequestsCalled(string because = "", params object[] becauseArgs) { }
3131
}
3232
public class RequestCollectionAssertions : FluentAssertions.Collections.GenericCollectionAssertions<Mockly.CapturedRequest>
3333
{
3434
public RequestCollectionAssertions(Mockly.RequestCollection subject) { }
3535
public Mockly.ContainedRequestAssertions ContainRequest(string because = "", params object[] becauseArgs) { }
3636
public Mockly.ContainedRequestAssertions ContainRequestFor(System.Uri uri, string because = "", params object[] becauseArgs) { }
3737
public Mockly.ContainedRequestAssertions ContainRequestFor(string urlPattern, string because = "", params object[] becauseArgs) { }
38-
public void NotContainUnexpectedCalls(string because = "", params object[] becauseArgs) { }
38+
public FluentAssertions.AndConstraint<Mockly.RequestCollectionAssertions> NotContainRequestFor(System.Uri uri, string because = "", params object[] becauseArgs) { }
39+
public FluentAssertions.AndConstraint<Mockly.RequestCollectionAssertions> NotContainRequestFor(string urlPattern, string because = "", params object[] becauseArgs) { }
40+
public FluentAssertions.AndConstraint<Mockly.RequestCollectionAssertions> NotContainUnexpectedCalls(string because = "", params object[] becauseArgs) { }
3941
}
4042
}

Mockly.ApiVerificationTests/ApprovedApi/FluentAssertions.Mockly.v8.net472.verified.txt

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,17 @@ namespace Mockly
55
{
66
public CapturedRequestAssertions(Mockly.CapturedRequest subject) { }
77
protected override string Identifier { get; }
8-
public void BeExpected(string because = "", params object[] becauseArgs) { }
9-
public void BeUnexpected(string because = "", params object[] becauseArgs) { }
8+
public FluentAssertions.AndConstraint<Mockly.CapturedRequestAssertions> BeExpected(string because = "", params object[] becauseArgs) { }
9+
public FluentAssertions.AndConstraint<Mockly.CapturedRequestAssertions> BeUnexpected(string because = "", params object[] becauseArgs) { }
1010
}
1111
public class ContainedRequestAssertions : FluentAssertions.Primitives.ReferenceTypeAssertions<Mockly.CapturedRequest, Mockly.ContainedRequestAssertions>
1212
{
13-
public ContainedRequestAssertions(Mockly.CapturedRequest request) { }
1413
protected override string Identifier { get; }
15-
public Mockly.ContainedRequestAssertions WithBody(string wildcard, string because = "", params object[] becauseArgs) { }
16-
public Mockly.ContainedRequestAssertions WithBodyEquivalentTo<T>(T expected, string because = "", params object[] becauseArgs) { }
17-
public Mockly.ContainedRequestAssertions WithBodyHavingPropertiesOf(System.Collections.Generic.IDictionary<string, string> expectation, string because = "", params object[] becauseArgs) { }
18-
public Mockly.ContainedRequestAssertions WithBodyMatchingJson(string json, string because = "", params object[] becauseArgs) { }
14+
public FluentAssertions.AndWhichConstraint<Mockly.ContainedRequestAssertions, Mockly.CapturedRequest> WithBody(string wildcard, string because = "", params object[] becauseArgs) { }
15+
public FluentAssertions.AndWhichConstraint<Mockly.ContainedRequestAssertions, Mockly.CapturedRequest> WithBodyEquivalentTo<T>(T expected, string because = "", params object[] becauseArgs) { }
16+
public FluentAssertions.AndWhichConstraint<Mockly.ContainedRequestAssertions, Mockly.CapturedRequest> WithBodyHavingPropertiesOf(System.Collections.Generic.IDictionary<string, string> expectation, string because = "", params object[] becauseArgs) { }
17+
public FluentAssertions.AndWhichConstraint<Mockly.ContainedRequestAssertions, Mockly.CapturedRequest> WithBodyHavingProperty(string key, string value, string because = "", params object[] becauseArgs) { }
18+
public FluentAssertions.AndWhichConstraint<Mockly.ContainedRequestAssertions, Mockly.CapturedRequest> WithBodyMatchingJson(string json, string because = "", params object[] becauseArgs) { }
1919
}
2020
public static class HttpMockAssertionExtensions
2121
{
@@ -27,14 +27,16 @@ namespace Mockly
2727
{
2828
public HttpMockAssertions(Mockly.HttpMock subject) { }
2929
protected override string Identifier { get; }
30-
public void HaveAllRequestsCalled(string because = "", params object[] becauseArgs) { }
30+
public FluentAssertions.AndConstraint<Mockly.HttpMockAssertions> HaveAllRequestsCalled(string because = "", params object[] becauseArgs) { }
3131
}
3232
public class RequestCollectionAssertions : FluentAssertions.Collections.GenericCollectionAssertions<Mockly.CapturedRequest>
3333
{
3434
public RequestCollectionAssertions(Mockly.RequestCollection subject) { }
3535
public Mockly.ContainedRequestAssertions ContainRequest(string because = "", params object[] becauseArgs) { }
3636
public Mockly.ContainedRequestAssertions ContainRequestFor(System.Uri uri, string because = "", params object[] becauseArgs) { }
3737
public Mockly.ContainedRequestAssertions ContainRequestFor(string urlPattern, string because = "", params object[] becauseArgs) { }
38-
public void NotContainUnexpectedCalls(string because = "", params object[] becauseArgs) { }
38+
public FluentAssertions.AndConstraint<Mockly.RequestCollectionAssertions> NotContainRequestFor(System.Uri uri, string because = "", params object[] becauseArgs) { }
39+
public FluentAssertions.AndConstraint<Mockly.RequestCollectionAssertions> NotContainRequestFor(string urlPattern, string because = "", params object[] becauseArgs) { }
40+
public FluentAssertions.AndConstraint<Mockly.RequestCollectionAssertions> NotContainUnexpectedCalls(string because = "", params object[] becauseArgs) { }
3941
}
4042
}

0 commit comments

Comments
 (0)