Skip to content

Commit f0e2d3d

Browse files
committed
Merge branch 'develop'
2 parents b1eeab7 + 42a9ac1 commit f0e2d3d

28 files changed

Lines changed: 1962 additions & 507 deletions

.github/workflows/build.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,14 @@ jobs:
2727
fetch-depth: 0
2828

2929
- name: Install .NET SDK 8.0.x
30-
uses: actions/setup-dotnet@v5
30+
uses: actions/setup-dotnet@v6
3131
with:
3232
dotnet-version: |
3333
8.0.x
3434
9.0.x
3535
3636
- name: Install .NET SDK
37-
uses: actions/setup-dotnet@v5
37+
uses: actions/setup-dotnet@v6
3838
with:
3939
global-json-file: global.json
4040

global.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
22
"sdk": {
3-
"version": "10.0.302"
3+
"version": "10.0.400"
44
}
55
}

src/ARI.TestWeb/ARI.TestWeb.csproj

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,17 @@
1212
<ItemGroup>
1313
<PackageReference Include="Devlead.Statiq" Version="2025.9.10.150" />
1414
<PackageReference Include="Statiq.Web" Version="1.0.0-beta.60" />
15-
<PackageReference Include="System.Security.Cryptography.Xml" Version="10.0.10" />
16-
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="8.19.2" />
17-
<PackageReference Include="System.Drawing.Common" Version="10.0.10" />
15+
<PackageReference Include="System.Security.Cryptography.Xml" Version="10.0.11" />
16+
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="8.22.0" />
17+
<PackageReference Include="System.Drawing.Common" Version="10.0.11" />
1818
<PackageReference Include="System.Data.SqlClient" Version="4.9.1" />
1919
<PackageReference Include="Azure.Identity" Version="1.21.0" />
2020
<PackageReference Include="Microsoft.Data.SqlClient" Version="7.0.2" />
2121
<PackageReference Include="Newtonsoft.Json" Version="13.0.4" />
22-
<PackageReference Include="System.Formats.Asn1" Version="10.0.10" />
23-
<PackageReference Include="System.DirectoryServices.Protocols" Version="10.0.10" />
22+
<PackageReference Include="System.Formats.Asn1" Version="10.0.11" />
23+
<PackageReference Include="System.DirectoryServices.Protocols" Version="10.0.11" />
2424
<PackageReference Include="Microsoft.Rest.ClientRuntime" Version="2.3.24" />
25-
<PackageReference Include="System.Text.Json" Version="10.0.10" />
25+
<PackageReference Include="System.Text.Json" Version="10.0.11" />
2626
</ItemGroup>
2727

2828
<ItemGroup>

src/ARI.Tests/ARI.Tests.csproj

Lines changed: 7 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -8,39 +8,7 @@
88
</PropertyGroup>
99

1010
<ItemGroup>
11-
<None Remove="Resources\GraphOrg.json" />
12-
<None Remove="Resources\Subscription1_ResourceGroup1_Resources.json" />
13-
<None Remove="Resources\Subscription1_ResourceGroup1_Site_Config.json" />
14-
<None Remove="Resources\Subscription1_ResourceGroup1_Site_Settings.json" />
15-
<None Remove="Resources\Subscription1_ResourceGroup2_Resources.json" />
16-
<None Remove="Resources\Subscription1_ResourceGroup2_Site_Config.json" />
17-
<None Remove="Resources\Subscription1_ResourceGroup2_Site_Settings.json" />
18-
<None Remove="Resources\Subscription1_ResourceGroup3_Resources.json" />
19-
<None Remove="Resources\Subscription1_ResourceGroup3_Site_Config.json" />
20-
<None Remove="Resources\Subscription1_ResourceGroup3_Site_Settings.json" />
21-
<None Remove="Resources\Subscription1_ResourceGroups.json" />
22-
<None Remove="Resources\Subscription2_ResourceGroup1_Resources.json" />
23-
<None Remove="Resources\Subscription2_ResourceGroups.json" />
24-
<None Remove="Resources\Subscriptions.json" />
25-
</ItemGroup>
26-
27-
<ItemGroup>
28-
<EmbeddedResource Include="Resources\GraphOrg.json" />
29-
<EmbeddedResource Include="Resources\Subscription1_ResourceGroup1_Site_Settings.json" />
30-
<EmbeddedResource Include="Resources\Subscription1_ResourceGroup1_Site_Config.json" />
31-
<EmbeddedResource Include="Resources\Subscription1_ResourceGroup2_Site_Settings.json" />
32-
<EmbeddedResource Include="Resources\Subscription1_ResourceGroup2_Site_Config.json" />
33-
<EmbeddedResource Include="Resources\Subscription1_ResourceGroup3_Resources.json" />
34-
<EmbeddedResource Include="Resources\Subscription1_ResourceGroup2_Resources.json" />
35-
<EmbeddedResource Include="Resources\Subscription1_ResourceGroup1_Resources.json" />
36-
<EmbeddedResource Include="Resources\Subscription1_ResourceGroup3_Site_Settings.json" />
37-
<EmbeddedResource Include="Resources\Subscription1_ResourceGroup3_Site_Config.json" />
38-
<EmbeddedResource Include="Resources\Subscription2_ResourceGroup1_Resources.json" />
39-
<EmbeddedResource Include="Resources\Subscription2_ResourceGroups.json" />
40-
<EmbeddedResource Include="Resources\Subscriptions.json" />
41-
<EmbeddedResource Include="Resources\TenantsServicePrinciple.json" />
42-
<EmbeddedResource Include="Resources\Subscription1_ResourceGroups.json" />
43-
<EmbeddedResource Include="Resources\TenantsUser.json" />
11+
<EmbeddedResource Include="Resources\**\*.*" />
4412
</ItemGroup>
4513

4614
<ItemGroup>
@@ -55,12 +23,13 @@
5523
<Using Include="ARI.Services.ARM" />
5624
<Using Include="ARI.Services.Markdown" />
5725
<Using Include="ARI.Extensions" />
26+
<Using Include="Devlead.Testing.MockHttp" />
5827
</ItemGroup>
5928

6029
<ItemGroup>
61-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.8.1" />
30+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.9.0" />
6231
<PackageReference Include="NUnit" Version="4.6.1" />
63-
<PackageReference Include="NUnit3TestAdapter" Version="6.2.0" />
32+
<PackageReference Include="NUnit3TestAdapter" Version="6.3.0" />
6433
<PackageReference Include="NUnit.Analyzers" Version="4.14.0">
6534
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
6635
<PrivateAssets>all</PrivateAssets>
@@ -69,18 +38,14 @@
6938
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
7039
<PrivateAssets>all</PrivateAssets>
7140
</PackageReference>
72-
<PackageReference Include="Verify.NUnit" Version="31.24.2" />
73-
<PackageReference Include="Devlead.Testing.MockHttp" Version="2026.7.15.880" />
41+
<PackageReference Include="Verify.NUnit" Version="32.0.0" />
42+
<PackageReference Include="Devlead.Testing.MockHttp" Version="2026.8.14.900" />
7443
<PackageReference Include="Cake.Testing" Version="6.2.0" />
75-
<PackageReference Include="NSubstitute" Version="6.0.0" />
44+
<PackageReference Include="NSubstitute" Version="6.2.0" />
7645
</ItemGroup>
7746

7847
<ItemGroup>
7948
<ProjectReference Include="..\ARI\ARI.csproj" />
8049
</ItemGroup>
8150

82-
<ItemGroup>
83-
<Folder Include="Extensions\" />
84-
</ItemGroup>
85-
8651
</Project>

src/ARI.Tests/Constants.cs

Lines changed: 2 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
1-
using static System.Net.WebRequestMethods;
1+
namespace ARI.Tests;
22

3-
namespace ARI.Tests;
4-
5-
public static class Constants
3+
public class Constants
64
{
75
public static class Tenant
86
{
@@ -47,13 +45,6 @@ public static class ResourceGroup1
4745

4846
public static class Request
4947
{
50-
public static class Method
51-
{
52-
public const string
53-
Post = "POST",
54-
Get = "GET";
55-
}
56-
5748
public static class Uri
5849
{
5950
public const string
@@ -103,79 +94,4 @@ public static class ResourceGroup1
10394
}
10495
}
10596
}
106-
107-
public static class Response
108-
{
109-
public static class Json
110-
{
111-
public static string TenantsServicePrinciple { get; } = GetResourceString($"{nameof(TenantsServicePrinciple)}.json");
112-
public static string TenantsUser { get; } = GetResourceString($"{nameof(TenantsUser)}.json");
113-
public static string GraphOrg { get; } = GetResourceString($"{nameof(GraphOrg)}.json");
114-
public static string Subscriptions { get; } = GetResourceString($"{nameof(Subscriptions)}.json");
115-
116-
public static class Subscription1
117-
{
118-
public static string ResourceGroups { get; } = GetResourceString($"{nameof(Subscription1)}_{nameof(ResourceGroups)}.json");
119-
public static class ResourceGroup1
120-
{
121-
public static string Resources { get; } = GetResourceString($"{nameof(Subscription1)}_{nameof(ResourceGroup1)}_{nameof(Resources)}.json");
122-
public static class Site
123-
{
124-
public static string Config { get; } = GetResourceString($"{nameof(Subscription1)}_{nameof(ResourceGroup1)}_{nameof(Site)}_{nameof(Config)}.json");
125-
public static string Settings { get; } = GetResourceString($"{nameof(Subscription1)}_{nameof(ResourceGroup1)}_{nameof(Site)}_{nameof(Settings)}.json");
126-
}
127-
}
128-
public static class ResourceGroup2
129-
{
130-
public static string Resources { get; } = GetResourceString($"{nameof(Subscription1)}_{nameof(ResourceGroup2)}_{nameof(Resources)}.json");
131-
public static class Site
132-
{
133-
public static string Config { get; } = GetResourceString($"{nameof(Subscription1)}_{nameof(ResourceGroup2)}_{nameof(Site)}_{nameof(Config)}.json");
134-
public static string Settings { get; } = GetResourceString($"{nameof(Subscription1)}_{nameof(ResourceGroup2)}_{nameof(Site)}_{nameof(Settings)}.json");
135-
}
136-
}
137-
public static class ResourceGroup3
138-
{
139-
public static string Resources { get; } = GetResourceString($"{nameof(Subscription1)}_{nameof(ResourceGroup3)}_{nameof(Resources)}.json");
140-
public static class Site
141-
{
142-
public static string Config { get; } = GetResourceString($"{nameof(Subscription1)}_{nameof(ResourceGroup3)}_{nameof(Site)}_{nameof(Config)}.json");
143-
public static string Settings { get; } = GetResourceString($"{nameof(Subscription1)}_{nameof(ResourceGroup3)}_{nameof(Site)}_{nameof(Settings)}.json");
144-
}
145-
}
146-
}
147-
148-
public static class Subscription2
149-
{
150-
public static string ResourceGroups { get; } = GetResourceString($"{nameof(Subscription2)}_{nameof(ResourceGroups)}.json");
151-
public static class ResourceGroup1
152-
{
153-
public static string Resources { get; } = GetResourceString($"{nameof(Subscription2)}_{nameof(ResourceGroup1)}_{nameof(Resources)}.json");
154-
}
155-
}
156-
}
157-
}
158-
159-
public static class MediaType
160-
{
161-
public const string
162-
Json = "application/json";
163-
}
164-
165-
private static string GetResourceString(string filename, Encoding? encoding = null)
166-
{
167-
using var stream = GetResourceStream(filename);
168-
using var reader = new StreamReader(stream, encoding ?? Encoding.UTF8);
169-
return reader.ReadToEnd();
170-
}
171-
172-
private static Stream GetResourceStream(string filename)
173-
{
174-
var resourceStream = typeof(ARIServiceProviderFixture)
175-
.Assembly
176-
.GetManifestResourceStream($"ARI.Tests.Resources.{filename}");
177-
178-
return resourceStream
179-
?? throw new Exception($"Failed to get stream for {filename}.");
180-
}
18197
}

src/ARI.Tests/Extensions/IServiceCollectionExtensions.cs

Lines changed: 3 additions & 123 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
using Cake.Core.Configuration;
33
using Cake.Core.Diagnostics;
44
using Cake.Core.IO;
5-
using VerifyTests.Http;
65

76
namespace ARI.Tests.Extensions;
87

@@ -14,14 +13,14 @@ public static IServiceCollection AddCakeFakes(
1413
)
1514
{
1615
var configuration = new FakeConfiguration();
17-
16+
1817
var environment = FakeEnvironment.CreateUnixEnvironment();
19-
18+
2019
var fileSystem = new FakeFileSystem(environment);
2120
configureFileSystem?.Invoke(fileSystem);
2221

2322
var globber = new Globber(fileSystem, environment);
24-
23+
2524
var log = new FakeLog();
2625

2726
var Context = Substitute.For<ICakeContext>();
@@ -40,123 +39,4 @@ public static IServiceCollection AddCakeFakes(
4039
.AddSingleton<ICakeRuntime>(environment.Runtime)
4140
.AddSingleton<ICakeContext>(Context);
4241
}
43-
44-
public static IServiceCollection AddMockHttpClient(this IServiceCollection services)
45-
{
46-
static HttpResponseMessage GetMockJsonResponse(string response)
47-
=> new()
48-
{
49-
Content = new StringContent(
50-
response,
51-
Encoding.UTF8,
52-
Constants.MediaType.Json
53-
)
54-
};
55-
56-
static MockHttpClient CreateClient()
57-
=> new (
58-
request => request switch
59-
{
60-
{
61-
Method.Method: Constants.Request.Method.Get,
62-
RequestUri.AbsoluteUri: Constants.Request.Uri.Tenants
63-
} => GetMockJsonResponse(Constants.Response.Json.TenantsServicePrinciple),
64-
65-
{
66-
Method.Method: Constants.Request.Method.Get,
67-
RequestUri.AbsoluteUri: Constants.Request.Uri.GraphOrg
68-
} => GetMockJsonResponse(Constants.Response.Json.GraphOrg),
69-
70-
{
71-
Method.Method: Constants.Request.Method.Get,
72-
RequestUri.AbsoluteUri: Constants.Request.Uri.Subscriptions
73-
} => GetMockJsonResponse(Constants.Response.Json.Subscriptions),
74-
75-
{
76-
Method.Method: Constants.Request.Method.Get,
77-
RequestUri.AbsoluteUri: Constants.Request.Uri.Subscription1.ResourceGroups
78-
} => GetMockJsonResponse(Constants.Response.Json.Subscription1.ResourceGroups),
79-
80-
{
81-
Method.Method: Constants.Request.Method.Get,
82-
RequestUri.AbsoluteUri: Constants.Request.Uri.Subscription2.ResourceGroups
83-
} => GetMockJsonResponse(Constants.Response.Json.Subscription2.ResourceGroups),
84-
85-
{
86-
Method.Method: Constants.Request.Method.Get,
87-
RequestUri.AbsoluteUri: Constants.Request.Uri.Subscription1.ResourceGroup1.Resources
88-
} => GetMockJsonResponse(Constants.Response.Json.Subscription1.ResourceGroup1.Resources),
89-
90-
{
91-
Method.Method: Constants.Request.Method.Get,
92-
RequestUri.AbsoluteUri: Constants.Request.Uri.Subscription1.ResourceGroup2.Resources
93-
} => GetMockJsonResponse(Constants.Response.Json.Subscription1.ResourceGroup2.Resources),
94-
95-
{
96-
Method.Method: Constants.Request.Method.Get,
97-
RequestUri.AbsoluteUri: Constants.Request.Uri.Subscription1.ResourceGroup3.Resources
98-
} => GetMockJsonResponse(Constants.Response.Json.Subscription1.ResourceGroup3.Resources),
99-
100-
{
101-
Method.Method: Constants.Request.Method.Get,
102-
RequestUri.AbsoluteUri: Constants.Request.Uri.Subscription2.ResourceGroup1.Resources
103-
} => GetMockJsonResponse(Constants.Response.Json.Subscription2.ResourceGroup1.Resources),
104-
105-
{
106-
Method.Method: Constants.Request.Method.Get,
107-
RequestUri.AbsoluteUri: Constants.Request.Uri.Subscription1.ResourceGroup1.Site.Config
108-
} => GetMockJsonResponse(Constants.Response.Json.Subscription1.ResourceGroup1.Site.Config),
109-
110-
{
111-
Method.Method: Constants.Request.Method.Get,
112-
RequestUri.AbsoluteUri: Constants.Request.Uri.Subscription1.ResourceGroup2.Site.Config
113-
} => GetMockJsonResponse(Constants.Response.Json.Subscription1.ResourceGroup2.Site.Config),
114-
115-
{
116-
Method.Method: Constants.Request.Method.Get,
117-
RequestUri.AbsoluteUri: Constants.Request.Uri.Subscription1.ResourceGroup3.Site.Config
118-
} => GetMockJsonResponse(Constants.Response.Json.Subscription1.ResourceGroup3.Site.Config),
119-
120-
{
121-
Method.Method: Constants.Request.Method.Post,
122-
RequestUri.AbsoluteUri: Constants.Request.Uri.Subscription1.ResourceGroup1.Site.Settings
123-
} => GetMockJsonResponse(Constants.Response.Json.Subscription1.ResourceGroup1.Site.Settings),
124-
125-
{
126-
Method.Method: Constants.Request.Method.Post,
127-
RequestUri.AbsoluteUri: Constants.Request.Uri.Subscription1.ResourceGroup2.Site.Settings
128-
} => GetMockJsonResponse(Constants.Response.Json.Subscription1.ResourceGroup2.Site.Settings),
129-
130-
{
131-
Method.Method: Constants.Request.Method.Post,
132-
RequestUri.AbsoluteUri: Constants.Request.Uri.Subscription1.ResourceGroup3.Site.Settings
133-
} => GetMockJsonResponse(Constants.Response.Json.Subscription1.ResourceGroup3.Site.Settings),
134-
135-
_ => new HttpResponseMessage
136-
{
137-
StatusCode = System.Net.HttpStatusCode.NotFound
138-
}
139-
}
140-
);
141-
142-
return services
143-
.AddSingleton<HttpClient>(
144-
_ => CreateClient()
145-
)
146-
.AddSingleton<IHttpClientFactory>(
147-
_ =>
148-
{
149-
var httpClientFactory = Substitute.For<IHttpClientFactory>();
150-
httpClientFactory
151-
.CreateClient(null!)
152-
.ReturnsForAnyArgs(_ => CreateClient());
153-
154-
httpClientFactory
155-
.CreateClient()
156-
.Returns(_ => CreateClient());
157-
158-
return httpClientFactory;
159-
}
160-
);;
161-
}
16242
}

0 commit comments

Comments
 (0)