diff options
| author | ivarlovlie <git@ivarlovlie.no> | 2021-04-01 19:15:10 +0200 |
|---|---|---|
| committer | ivarlovlie <git@ivarlovlie.no> | 2021-04-01 19:15:10 +0200 |
| commit | 9c440d7aa4a776be9051489a40944d779d032d96 (patch) | |
| tree | 361dad714d6c12db43dc42c1371d1c20d31dcb27 | |
| parent | 04c25edf1498fcbce7c01cd7626c4cf4ce73e71a (diff) | |
| download | dotnet-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.csproj | 27 | ||||
| -rw-r--r-- | src/IOL.VippsEcommerce.Tests/Integration/InitialisationTest.cs | 10 | ||||
| -rw-r--r-- | src/IOL.VippsEcommerce.sln | 14 | ||||
| -rw-r--r-- | src/IOL.VippsEcommerce/Models/VippsConfiguration.cs | 28 | ||||
| -rw-r--r-- | src/IOL.VippsEcommerce/VippsEcommerceService.cs | 28 |
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()) { |
