aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorivarlovlie <git@ivarlovlie.no>2021-04-01 19:15:10 +0200
committerivarlovlie <git@ivarlovlie.no>2021-04-01 19:15:10 +0200
commit9c440d7aa4a776be9051489a40944d779d032d96 (patch)
tree361dad714d6c12db43dc42c1371d1c20d31dcb27
parent04c25edf1498fcbce7c01cd7626c4cf4ce73e71a (diff)
downloaddotnet-vipps-ecommerce-9c440d7aa4a776be9051489a40944d779d032d96.tar.xz
dotnet-vipps-ecommerce-9c440d7aa4a776be9051489a40944d779d032d96.zip
add tests project, move configuration verification to VippsConfiguration.cs
-rw-r--r--src/IOL.VippsEcommerce.Tests/IOL.VippsEcommerce.Tests.csproj27
-rw-r--r--src/IOL.VippsEcommerce.Tests/Integration/InitialisationTest.cs10
-rw-r--r--src/IOL.VippsEcommerce.sln14
-rw-r--r--src/IOL.VippsEcommerce/Models/VippsConfiguration.cs28
-rw-r--r--src/IOL.VippsEcommerce/VippsEcommerceService.cs28
5 files changed, 84 insertions, 23 deletions
diff --git a/src/IOL.VippsEcommerce.Tests/IOL.VippsEcommerce.Tests.csproj b/src/IOL.VippsEcommerce.Tests/IOL.VippsEcommerce.Tests.csproj
new file mode 100644
index 0000000..1410a3d
--- /dev/null
+++ b/src/IOL.VippsEcommerce.Tests/IOL.VippsEcommerce.Tests.csproj
@@ -0,0 +1,27 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+ <PropertyGroup>
+ <TargetFramework>net5.0</TargetFramework>
+
+ <IsPackable>false</IsPackable>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="5.0.1" />
+ <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.7.1" />
+ <PackageReference Include="xunit" Version="2.4.1" />
+ <PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
+ <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
+ <PrivateAssets>all</PrivateAssets>
+ </PackageReference>
+ <PackageReference Include="coverlet.collector" Version="1.3.0">
+ <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
+ <PrivateAssets>all</PrivateAssets>
+ </PackageReference>
+ </ItemGroup>
+
+ <ItemGroup>
+ <ProjectReference Include="..\IOL.VippsEcommerce\IOL.VippsEcommerce.csproj" />
+ </ItemGroup>
+
+</Project>
diff --git a/src/IOL.VippsEcommerce.Tests/Integration/InitialisationTest.cs b/src/IOL.VippsEcommerce.Tests/Integration/InitialisationTest.cs
new file mode 100644
index 0000000..b327baa
--- /dev/null
+++ b/src/IOL.VippsEcommerce.Tests/Integration/InitialisationTest.cs
@@ -0,0 +1,10 @@
+using Xunit;
+
+namespace IOL.VippsEcommerce.Tests.Integration
+{
+ public class InitialisationTest
+ {
+ [Fact]
+ public void Fail_On_Invalid_Minimal_Configuration() { }
+ }
+} \ No newline at end of file
diff --git a/src/IOL.VippsEcommerce.sln b/src/IOL.VippsEcommerce.sln
index 27ecda2..a7c58aa 100644
--- a/src/IOL.VippsEcommerce.sln
+++ b/src/IOL.VippsEcommerce.sln
@@ -7,6 +7,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IOL.VippsEcommerce", "IOL.V
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IOL.VippsEcommerce.Client", "IOL.VippsEcommerce.Client\IOL.VippsEcommerce.Client.csproj", "{A9D97F08-B3F6-42B0-81A8-6856E56C7582}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IOL.VippsEcommerce.Tests", "IOL.VippsEcommerce.Tests\IOL.VippsEcommerce.Tests.csproj", "{1212AFB0-3AE4-4FBE-9DA0-A78445838C7C}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -44,5 +46,17 @@ Global
{A9D97F08-B3F6-42B0-81A8-6856E56C7582}.Release|x64.Build.0 = Release|Any CPU
{A9D97F08-B3F6-42B0-81A8-6856E56C7582}.Release|x86.ActiveCfg = Release|Any CPU
{A9D97F08-B3F6-42B0-81A8-6856E56C7582}.Release|x86.Build.0 = Release|Any CPU
+ {1212AFB0-3AE4-4FBE-9DA0-A78445838C7C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1212AFB0-3AE4-4FBE-9DA0-A78445838C7C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1212AFB0-3AE4-4FBE-9DA0-A78445838C7C}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {1212AFB0-3AE4-4FBE-9DA0-A78445838C7C}.Debug|x64.Build.0 = Debug|Any CPU
+ {1212AFB0-3AE4-4FBE-9DA0-A78445838C7C}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {1212AFB0-3AE4-4FBE-9DA0-A78445838C7C}.Debug|x86.Build.0 = Debug|Any CPU
+ {1212AFB0-3AE4-4FBE-9DA0-A78445838C7C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1212AFB0-3AE4-4FBE-9DA0-A78445838C7C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1212AFB0-3AE4-4FBE-9DA0-A78445838C7C}.Release|x64.ActiveCfg = Release|Any CPU
+ {1212AFB0-3AE4-4FBE-9DA0-A78445838C7C}.Release|x64.Build.0 = Release|Any CPU
+ {1212AFB0-3AE4-4FBE-9DA0-A78445838C7C}.Release|x86.ActiveCfg = Release|Any CPU
+ {1212AFB0-3AE4-4FBE-9DA0-A78445838C7C}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal
diff --git a/src/IOL.VippsEcommerce/Models/VippsConfiguration.cs b/src/IOL.VippsEcommerce/Models/VippsConfiguration.cs
index 4a78166..19ca140 100644
--- a/src/IOL.VippsEcommerce/Models/VippsConfiguration.cs
+++ b/src/IOL.VippsEcommerce/Models/VippsConfiguration.cs
@@ -122,6 +122,34 @@ namespace IOL.VippsEcommerce.Models
}
}
+ /// <summary>
+ /// Ensure that the configuration can be used to issue requests to the vipps api.
+ /// <exception cref="ArgumentNullException">Throws if a required value is null or whitespace.</exception>
+ /// </summary>
+ public void Verify() {
+ if (GetValue(VippsConfigurationKeyNames.VIPPS_API_URL).IsNullOrWhiteSpace()) {
+ throw new ArgumentNullException(VippsConfigurationKeyNames.VIPPS_API_URL,
+ "VippsEcommerceService: VIPPS_API_URL is not provided in configuration.");
+ }
+
+ if (GetValue(VippsConfigurationKeyNames.VIPPS_CLIENT_ID).IsNullOrWhiteSpace()) {
+ throw new ArgumentNullException(VippsConfigurationKeyNames.VIPPS_CLIENT_ID,
+ "VippsEcommerceService: VIPPS_CLIENT_ID is not provided in configuration.");
+ }
+
+ if (GetValue(VippsConfigurationKeyNames.VIPPS_CLIENT_SECRET).IsNullOrWhiteSpace()) {
+ throw new ArgumentNullException(VippsConfigurationKeyNames.VIPPS_CLIENT_SECRET,
+ "VippsEcommerceService: VIPPS_CLIENT_SECRET is not provided in configuration.");
+ }
+
+ if (GetValue(VippsConfigurationKeyNames.VIPPS_SUBSCRIPTION_KEY_PRIMARY).IsNullOrWhiteSpace()
+ && GetValue(VippsConfigurationKeyNames.VIPPS_SUBSCRIPTION_KEY_SECONDARY).IsNullOrWhiteSpace()) {
+ throw new ArgumentNullException(VippsConfigurationKeyNames.VIPPS_SUBSCRIPTION_KEY_PRIMARY
+ + VippsConfigurationKeyNames.VIPPS_SUBSCRIPTION_KEY_SECONDARY,
+ "VippsEcommerceService: Neither VIPPS_SUBSCRIPTION_KEY_PRIMARY nor VIPPS_SUBSCRIPTION_KEY_SECONDARY was provided in configuration.");
+ }
+ }
+
private string GetValueFromObject(string key) {
foreach (var prop in typeof(VippsConfiguration).GetProperties()) {
foreach (var attribute in prop.CustomAttributes) {
diff --git a/src/IOL.VippsEcommerce/VippsEcommerceService.cs b/src/IOL.VippsEcommerce/VippsEcommerceService.cs
index 594d73a..54e68a6 100644
--- a/src/IOL.VippsEcommerce/VippsEcommerceService.cs
+++ b/src/IOL.VippsEcommerce/VippsEcommerceService.cs
@@ -41,36 +41,18 @@ namespace IOL.VippsEcommerce
IOptions<VippsConfiguration> options
) {
Configuration = options.Value;
+ Configuration.Verify();
var vippsApiUrl = Configuration.GetValue(VippsConfigurationKeyNames.VIPPS_API_URL);
- if (vippsApiUrl.IsNullOrWhiteSpace()) {
- throw new ArgumentException("VippsEcommerceService: Api url is not provided in configuration.");
- }
-
client.BaseAddress = new Uri(vippsApiUrl);
_client = client;
_logger = logger;
-
_vippsClientId = Configuration.GetValue(VippsConfigurationKeyNames.VIPPS_CLIENT_ID);
- if (_vippsClientId.IsNullOrWhiteSpace()) {
- throw new ArgumentException("VippsEcommerceService: Client id is not provided in configuration.");
- }
-
_vippsClientSecret = Configuration.GetValue(VippsConfigurationKeyNames.VIPPS_CLIENT_SECRET);
- if (_vippsClientSecret.IsNullOrWhiteSpace()) {
- throw new ArgumentException("VippsEcommerceService: Client secret is not provided in configuration.");
- }
-
- var primarySubscriptionKey =
- Configuration.GetValue(VippsConfigurationKeyNames.VIPPS_SUBSCRIPTION_KEY_PRIMARY);
- var secondarySubscriptionKey =
- Configuration.GetValue(VippsConfigurationKeyNames.VIPPS_SUBSCRIPTION_KEY_SECONDARY);
- if (primarySubscriptionKey.IsNullOrWhiteSpace() && secondarySubscriptionKey.IsNullOrWhiteSpace()) {
- throw new
- ArgumentException("VippsEcommerceService: Neither primary nor secondary subscription key was provided in configuration.");
- }
-
client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key",
- primarySubscriptionKey ?? secondarySubscriptionKey);
+ Configuration.GetValue(VippsConfigurationKeyNames
+ .VIPPS_SUBSCRIPTION_KEY_PRIMARY)
+ ?? Configuration.GetValue(VippsConfigurationKeyNames
+ .VIPPS_SUBSCRIPTION_KEY_SECONDARY));
var msn = Configuration.GetValue(VippsConfigurationKeyNames.VIPPS_MSN);
if (msn.IsPresent()) {