-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathGraphQlConfigurationExtensionsFixture.cs
More file actions
121 lines (107 loc) · 4.6 KB
/
GraphQlConfigurationExtensionsFixture.cs
File metadata and controls
121 lines (107 loc) · 4.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
using AutoFixture.Xunit2;
using FluentAssertions;
using GraphQL.Client.Abstractions;
using GraphQL.Client.Http;
using Microsoft.Extensions.DependencyInjection;
using NSubstitute;
using Sitecore.AspNetCore.SDK.AutoFixture.Attributes;
using Sitecore.AspNetCore.SDK.GraphQL.Client.Models;
using Sitecore.AspNetCore.SDK.GraphQL.Exceptions;
using Sitecore.AspNetCore.SDK.GraphQL.Extensions;
using Sitecore.AspNetCore.SDK.GraphQL.Properties;
using Xunit;
namespace Sitecore.AspNetCore.SDK.GraphQL.Tests.Extensions;
public class GraphQlConfigurationExtensionsFixture
{
[Theory]
[AutoNSubstituteData]
public void AddGraphQlClient_NullProperties_ThrowsExceptions(IServiceCollection serviceCollection)
{
Func<IServiceCollection> servicesNull =
() => GraphQlConfigurationExtensions.AddGraphQlClient(null!, null!);
Func<IServiceCollection> configNull =
() => serviceCollection.AddGraphQlClient(null!);
servicesNull.Should().Throw<ArgumentNullException>().WithParameterName("services");
configNull.Should().Throw<ArgumentNullException>().WithParameterName("configuration");
}
[Fact]
public void AddGraphQlClient_EmptyApiKey_InConfiguration_ThrowsExceptions()
{
var services = new ServiceCollection();
services.AddGraphQlClient(_ => { });
var sp = services.BuildServiceProvider();
Func<IGraphQLClient> act = () => sp.GetRequiredService<IGraphQLClient>();
act.Should().Throw<InvalidGraphQlConfigurationException>()
.WithMessage(Resources.Exception_MissingApiKeyAndContextId);
}
[Theory]
[AutoData]
public void AddGraphQlClient_EmptyEndpoint_WithApiKey_ThrowsExceptions(string apiKey)
{
var services = new ServiceCollection();
services.AddGraphQlClient(options =>
{
options.ApiKey = apiKey;
});
var sp = services.BuildServiceProvider();
Func<IGraphQLClient> act = () => sp.GetRequiredService<IGraphQLClient>();
act.Should().Throw<InvalidGraphQlConfigurationException>()
.WithMessage(Resources.Exception_MissingEndpoint);
}
[Theory]
[AutoData]
public void AddGraphQlClient_EmptyEndpointUri_WithContextId_UsesDefault(string contextId)
{
// Arrange
ServiceCollection serviceCollection = [];
// Act
serviceCollection.AddGraphQlClient(configuration =>
{
configuration.ContextId = contextId;
});
GraphQLHttpClient? graphQlClient = serviceCollection.BuildServiceProvider().GetService<IGraphQLClient>() as GraphQLHttpClient;
// Assert
graphQlClient!.Options.EndPoint!.OriginalString.Should().Contain(SitecoreGraphQlClientOptions.DefaultEdgeEndpoint.OriginalString);
}
[Theory]
[AutoData]
public void AddGraphQlClient_AddConfiguredGraphQlClient_To_ServiceCollection(string apiKey, Uri endpointUri, string defaultSiteName)
{
// Arrange
ServiceCollection serviceCollection = [];
// Act
serviceCollection.AddGraphQlClient(
configuration =>
{
configuration.ApiKey = apiKey;
configuration.EndPoint = endpointUri;
configuration.DefaultSiteName = defaultSiteName;
});
GraphQLHttpClient? graphQlClient = serviceCollection.BuildServiceProvider().GetService<IGraphQLClient>() as GraphQLHttpClient;
// Assert
graphQlClient.Should().NotBeNull();
graphQlClient!.Options.EndPoint.Should().Be(endpointUri);
graphQlClient.HttpClient.DefaultRequestHeaders.Contains("sc_apikey").Should().BeTrue();
apiKey.Should().Be(graphQlClient.HttpClient.DefaultRequestHeaders.GetValues("sc_apikey").FirstOrDefault());
}
[Theory]
[AutoData]
public void AddGraphQlClient_WithContext_To_ServiceCollection(string contextId, Uri endpointUri, string defaultSiteName)
{
// Arrange
ServiceCollection serviceCollection = [];
// Act
serviceCollection.AddGraphQlClient(
configuration =>
{
configuration.ContextId = contextId;
configuration.EndPoint = endpointUri;
configuration.DefaultSiteName = defaultSiteName;
});
GraphQLHttpClient? graphQlClient = serviceCollection.BuildServiceProvider().GetService<IGraphQLClient>() as GraphQLHttpClient;
// Assert
graphQlClient.Should().NotBeNull();
graphQlClient!.Options.EndPoint!.Host.Should().Be(endpointUri.Host);
graphQlClient.Options.EndPoint.Query.Should().Contain($"sitecoreContextId={contextId}");
}
}