Skip to content

Commit

Permalink
Merge branch 'hotfix/v1.0.1'
Browse files Browse the repository at this point in the history
  • Loading branch information
zunkas committed Jul 8, 2021
2 parents dc2393a + 75301d9 commit d815839
Show file tree
Hide file tree
Showing 4 changed files with 121 additions and 113 deletions.
14 changes: 7 additions & 7 deletions .github/workflows/build_test_publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -171,13 +171,13 @@ jobs:
MerchantSettings:CheckoutValidationCallbackUri: https://uitest-${{ needs.variables.outputs.ENVIRONMENT }}-svea-webpay-sdk.eu.ngrok.io/api/svea/validation/{checkout.order.uri}


- name: Run SDK UI tests
if: ${{ github.event_name != 'pull_request' && needs.variables.outputs.ENVIRONMENT != 'dev'}}
run: dotnet test --configuration ${{ env.Configuration }} src/Samples/Sample.AspNetCore.SystemTests/Sample.AspNetCore.SystemTests.csproj
env:
Credentials:MerchantId: ${{ secrets.MERCHANT_ID }}
Credentials:Secret: ${{ secrets.MERCHANT_SECRET }}
SampleWebsite:Url: https://localhost:5001
#- name: Run SDK UI tests
# if: ${{ github.event_name != 'pull_request' && needs.variables.outputs.ENVIRONMENT != 'dev'}}
# run: dotnet test --configuration ${{ env.Configuration }} src/Samples/Sample.AspNetCore.SystemTests/Sample.AspNetCore.SystemTests.csproj
# env:
# Credentials:MerchantId: ${{ secrets.MERCHANT_ID }}
# Credentials:Secret: ${{ secrets.MERCHANT_SECRET }}
# SampleWebsite:Url: https://localhost:5001


- name: Archive Sample.AspNetCore
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
</PackageReference>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.8.0" />
<PackageReference Include="Selenium.WebDriver" Version="3.141.0" />
<PackageReference Include="Selenium.WebDriver.ChromeDriver" Version="86.0.4240.2200" />
<PackageReference Include="Selenium.WebDriver.ChromeDriver" Version="91.0.4472.10100" />
<PackageReference Include="System.Configuration.ConfigurationManager" Version="5.0.0" />
<PackageReference Include="System.IO" Version="4.3.0" />
<PackageReference Include="System.Net.Http" Version="4.3.4" />
Expand Down
110 changes: 57 additions & 53 deletions src/Svea.WebPay.SDK.Tests/UnitTests/EmailAddressTests.cs
Original file line number Diff line number Diff line change
@@ -1,67 +1,71 @@
using System;

using Xunit;

namespace Svea.WebPay.SDK.Tests.UnitTests
{
public class EmailAddressTests
{
private readonly string validAddress = "leia.ahlstrom@svea.com";
public class EmailAddressTests
{
private readonly string validAddress = "leia.ahlstrom@svea.com";


[Fact]
public void AddressValue_IsSetCorrectly_WhenGivenValidAddressString()
{
//ACT
var addressObject = new EmailAddress(this.validAddress);
[Fact]
public void AddressValue_IsSetCorrectly_WhenGivenValidAddressString()
{
//ACT
var addressObject = new EmailAddress(this.validAddress);

//ASSERT
Assert.Equal(this.validAddress, addressObject.ToString());
}
//ASSERT
Assert.Equal(this.validAddress, addressObject.ToString());
}


[Theory]
[InlineData("email@example.com")]
[InlineData("firstname.lastname@example.com")]
[InlineData("email@subdomain.example.com")]
[InlineData("firstname+lastname@example.com")]
[InlineData("email@123.123.123.123")]
[InlineData("\"email\"@example.com")]
[InlineData("1234567890@example.com")]
[InlineData("email@example-one.com")]
[InlineData("email@example.name")]
[InlineData("email@example.museum")]
[InlineData("email@example.co.jp")]
[InlineData("firstname-lastname@example.com")]
public void CreateNewEmailAddress_DoesNotThrow_WhenGivenValidAddressString(string address)
{
//ACT
var ex = Record.Exception(() => new EmailAddress(address));
[Theory]
[InlineData("a@a.com")]
[InlineData("a_@a.com")]
[InlineData("a_b@a.com")]
[InlineData("email@example.com")]
[InlineData("firstname.lastname@example.com")]
[InlineData("email@subdomain.example.com")]
[InlineData("firstname+lastname@example.com")]
[InlineData("email@123.123.123.123")]
[InlineData("\"email\"@example.com")]
[InlineData("1234567890@example.com")]
[InlineData("email@example-one.com")]
[InlineData("email@example.name")]
[InlineData("email@example.museum")]
[InlineData("email@example.co.jp")]
[InlineData("firstname-lastname@example.com")]
public void CreateNewEmailAddress_DoesNotThrow_WhenGivenValidAddressString(string address)
{
//ACT
var ex = Record.Exception(() => new EmailAddress(address));

//ASSERT
Assert.Null(ex);
}
//ASSERT
Assert.Null(ex);
}


[Theory]
[InlineData("plainaddress")]
[InlineData("#@%^%#$@#$@#.com")]
[InlineData("@example.com")]
[InlineData("Joe Smith <email@example.com>")]
[InlineData("email.example.com")]
[InlineData("email@example@example.com")]
[InlineData(".email@example.com")]
[InlineData("email.@example.com")]
[InlineData("email..email@example.com")]
[InlineData("あいうえお@example.com")]
[InlineData("email@example.com (Joe Smith)")]
[InlineData("email@example")]
[InlineData("email@-example.com")]
[InlineData("email@example..com")]
[InlineData("Abc..123@example.com")]
public void ThrowsArgumentException_WhenGivenInvalidAddressString(string address)
{
//ASSERT
Assert.Throws<ArgumentException>("emailAddress", () => new EmailAddress(address));
}
}
[Theory]
[InlineData("plainaddress")]
[InlineData("#@%^%#$@#$@#.com")]
[InlineData("@example.com")]
[InlineData("Joe Smith <email@example.com>")]
[InlineData("email.example.com")]
[InlineData("email@example@example.com")]
[InlineData(".email@example.com")]
[InlineData("email.@example.com")]
[InlineData("email..email@example.com")]
[InlineData("あいうえお@example.com")]
[InlineData("email@example.com (Joe Smith)")]
[InlineData("email@example")]
[InlineData("email@-example.com")]
[InlineData("email@example..com")]
[InlineData("Abc..123@example.com")]
public void ThrowsArgumentException_WhenGivenInvalidAddressString(string address)
{
//ASSERT
Assert.Throws<ArgumentException>("emailAddress", () => new EmailAddress(address));
}
}
}
108 changes: 56 additions & 52 deletions src/Svea.WebPay.SDK/EmailAddress.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,66 +4,70 @@

namespace Svea.WebPay.SDK
{
public class EmailAddress
{
public EmailAddress(string emailAddress)
{
if (!IsValidEmail(emailAddress))
throw new ArgumentException($"Invalid email address: {emailAddress}", nameof(emailAddress));
Value = emailAddress;
}
public class EmailAddress
{
public EmailAddress(string emailAddress)
{
if (!IsValidEmail(emailAddress))
{
throw new ArgumentException($"Invalid email address: {emailAddress}", nameof(emailAddress));
}

Value = emailAddress;
}

private string Value { get; }

private string Value { get; }

public static bool IsValidEmail(string emailAddress)
{
if (string.IsNullOrWhiteSpace(emailAddress))
return false;
try
{
// Normalize the domain
emailAddress = Regex.Replace(emailAddress, @"(@)(.+)$", DomainMapper,
RegexOptions.None, TimeSpan.FromMilliseconds(200));
}
catch (RegexMatchTimeoutException)
{
return false;
}
catch (ArgumentException)
{
return false;
}

try
{
return Regex.IsMatch(emailAddress,
@"^(?("")("".+?(?<!\\)""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" +
@"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-0-9a-z]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$",
RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(250));
}
catch (RegexMatchTimeoutException)
{
return false;
}
}
public static bool IsValidEmail(string emailAddress)
{
if (string.IsNullOrWhiteSpace(emailAddress))
{
return false;
}

private static string DomainMapper(Match match)
{
// Use IdnMapping class to convert Unicode domain names.
var idn = new IdnMapping();
try
{
// Normalize the domain
emailAddress = Regex.Replace(emailAddress, @"(@)(.+)$", DomainMapper,
RegexOptions.None, TimeSpan.FromMilliseconds(200));
}
catch (RegexMatchTimeoutException)
{
return false;
}
catch (ArgumentException)
{
return false;
}

// Pull out and process domain name (throws ArgumentException on invalid)
var domainName = idn.GetAscii(match.Groups[2].Value);
try
{
return Regex.IsMatch(emailAddress, @"^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|""(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*"")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])$",
RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(250));
}
catch (RegexMatchTimeoutException)
{
return false;
}
}

return match.Groups[1].Value + domainName;
}
private static string DomainMapper(Match match)
{
// Use IdnMapping class to convert Unicode domain names.
var idn = new IdnMapping();

// Pull out and process domain name (throws ArgumentException on invalid)
var domainName = idn.GetAscii(match.Groups[2].Value);

public override string ToString()
{
return Value;
}
}
return match.Groups[1].Value + domainName;
}


public override string ToString()
{
return Value;
}
}
}

0 comments on commit d815839

Please sign in to comment.