Extensions instead of partial classes
All checks were successful
Branch Build / build-test-deploy (push) Successful in 44s
All checks were successful
Branch Build / build-test-deploy (push) Successful in 44s
This commit is contained in:
@@ -39,6 +39,8 @@ namespace LinkMobility.Tests.Helpers
|
||||
public Queue<HttpResponseMessage> Responses { get; } = new();
|
||||
|
||||
public Mock<HttpClientHandler> Mock { get; }
|
||||
|
||||
public IProtectedMock<HttpClientHandler> Protected => Mock.Protected();
|
||||
}
|
||||
|
||||
internal class HttpRequestMessageCallback
|
||||
|
||||
@@ -145,7 +145,7 @@ namespace LinkMobility.Tests
|
||||
var client = GetClient();
|
||||
|
||||
// Act
|
||||
var response = await ReflectionHelper.InvokePrivateMethodAsync<TestClass>(client, "PostAsync", "test", _request, null, TestContext.CancellationToken);
|
||||
var response = await client.PostAsync<TestClass, TestClass>("test", _request, null, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(response);
|
||||
@@ -188,7 +188,7 @@ namespace LinkMobility.Tests
|
||||
var client = GetClient();
|
||||
|
||||
// Act
|
||||
var response = await ReflectionHelper.InvokePrivateMethodAsync<TestClass>(client, "PostAsync", "params/path", _request, queryParams, TestContext.CancellationToken);
|
||||
var response = await client.PostAsync<TestClass, TestClass>("params/path", _request, queryParams, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(response);
|
||||
@@ -256,7 +256,7 @@ namespace LinkMobility.Tests
|
||||
public void ShouldAssertClientOptions()
|
||||
{
|
||||
// Arrange + Act
|
||||
var client = GetClient();
|
||||
_ = GetClient();
|
||||
|
||||
// Assert
|
||||
VerifyNoOtherCalls();
|
||||
@@ -320,7 +320,7 @@ namespace LinkMobility.Tests
|
||||
// Act & Assert
|
||||
await Assert.ThrowsExactlyAsync<ObjectDisposedException>(async () =>
|
||||
{
|
||||
await ReflectionHelper.InvokePrivateMethodAsync<object>(client, "PostAsync", "/request/path", _request, null, TestContext.CancellationToken);
|
||||
await client.PostAsync<object, TestClass>("/request/path", _request, null, TestContext.CancellationToken);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -336,7 +336,7 @@ namespace LinkMobility.Tests
|
||||
// Act & Assert
|
||||
await Assert.ThrowsExactlyAsync<ArgumentNullException>(async () =>
|
||||
{
|
||||
await ReflectionHelper.InvokePrivateMethodAsync<object>(client, "PostAsync", path, _request, null, TestContext.CancellationToken);
|
||||
await client.PostAsync<object, TestClass>(path, _request, null, TestContext.CancellationToken);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -349,7 +349,7 @@ namespace LinkMobility.Tests
|
||||
// Act & Assert
|
||||
await Assert.ThrowsExactlyAsync<ArgumentException>(async () =>
|
||||
{
|
||||
await ReflectionHelper.InvokePrivateMethodAsync<object>(client, "PostAsync", "foo?bar=baz", _request, null, TestContext.CancellationToken);
|
||||
await client.PostAsync<object, TestClass>("foo?bar=baz", _request, null, TestContext.CancellationToken);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -366,7 +366,7 @@ namespace LinkMobility.Tests
|
||||
var client = GetClient();
|
||||
|
||||
// Act
|
||||
var response = await ReflectionHelper.InvokePrivateMethodAsync<TestClass>(client, "PostAsync", "/request/path", _request, null, TestContext.CancellationToken);
|
||||
var response = await client.PostAsync<TestClass, TestClass>("/request/path", _request, null, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(response);
|
||||
@@ -411,7 +411,7 @@ namespace LinkMobility.Tests
|
||||
var client = GetClient();
|
||||
|
||||
// Act
|
||||
var response = await ReflectionHelper.InvokePrivateMethodAsync<TestClass>(client, "PostAsync", "/request/path", stringContent, null, TestContext.CancellationToken);
|
||||
var response = await client.PostAsync<TestClass, HttpContent>("/request/path", stringContent, null, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(response);
|
||||
@@ -455,7 +455,7 @@ namespace LinkMobility.Tests
|
||||
var client = GetClient();
|
||||
|
||||
// Act
|
||||
var response = await ReflectionHelper.InvokePrivateMethodAsync<TestClass>(client, "PostAsync", "posting", null, null, TestContext.CancellationToken);
|
||||
var response = await client.PostAsync<TestClass, object>("posting", null, null, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(response);
|
||||
@@ -501,7 +501,7 @@ namespace LinkMobility.Tests
|
||||
// Act & Assert
|
||||
var ex = await Assert.ThrowsExactlyAsync<AuthenticationException>(async () =>
|
||||
{
|
||||
await ReflectionHelper.InvokePrivateMethodAsync<object>(client, "PostAsync", "foo", _request, null, TestContext.CancellationToken);
|
||||
await client.PostAsync<object, TestClass>("foo", _request, null, TestContext.CancellationToken);
|
||||
});
|
||||
Assert.IsNull(ex.InnerException);
|
||||
Assert.AreEqual($"HTTP auth missing: {statusCode}", ex.Message);
|
||||
@@ -524,7 +524,7 @@ namespace LinkMobility.Tests
|
||||
// Act & Assert
|
||||
var ex = await Assert.ThrowsExactlyAsync<ApplicationException>(async () =>
|
||||
{
|
||||
await ReflectionHelper.InvokePrivateMethodAsync<object>(client, "PostAsync", "foo", _request, null, TestContext.CancellationToken);
|
||||
await client.PostAsync<object, TestClass>("foo", _request, null, TestContext.CancellationToken);
|
||||
});
|
||||
Assert.IsNull(ex.InnerException);
|
||||
Assert.AreEqual($"Unknown HTTP response: {statusCode}", ex.Message);
|
||||
@@ -545,7 +545,7 @@ namespace LinkMobility.Tests
|
||||
// Act & Assert
|
||||
await Assert.ThrowsExactlyAsync<JsonReaderException>(async () =>
|
||||
{
|
||||
await ReflectionHelper.InvokePrivateMethodAsync<TestClass>(client, "PostAsync", "some-path", _request, null, TestContext.CancellationToken);
|
||||
await client.PostAsync<TestClass, TestClass>("some-path", _request, null, TestContext.CancellationToken);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -563,7 +563,7 @@ namespace LinkMobility.Tests
|
||||
var client = GetClient();
|
||||
|
||||
// Act
|
||||
string response = await ReflectionHelper.InvokePrivateMethodAsync<string>(client, "PostAsync", "path", _request, null, TestContext.CancellationToken);
|
||||
string response = await client.PostAsync<string, TestClass>("path", _request, null, TestContext.CancellationToken);
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(response);
|
||||
|
||||
@@ -42,10 +42,7 @@ namespace LinkMobility.Tests.Sms
|
||||
_clientOptionsMock.Setup(c => c.AllowRedirects).Returns(true);
|
||||
_clientOptionsMock.Setup(c => c.UseProxy).Returns(false);
|
||||
|
||||
_request = new SendBinaryMessageRequest(["436991234567"])
|
||||
{
|
||||
MessageContent = ["SGVsbG8gV29ybGQ="] // "Hello World" base64
|
||||
};
|
||||
_request = new SendBinaryMessageRequest(["SGVsbG8gV29ybGQ="], ["436991234567"]); // "Hello World" in Base64
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
@@ -87,14 +84,27 @@ namespace LinkMobility.Tests.Sms
|
||||
Assert.AreEqual("Scheme Parameter", callback.Headers["Authorization"]);
|
||||
Assert.AreEqual("LinkMobilityClient/1.0.0", callback.Headers["User-Agent"]);
|
||||
|
||||
_httpMessageHandlerMock.Mock
|
||||
.Protected()
|
||||
.Verify("SendAsync", Times.Once(), ItExpr.IsAny<HttpRequestMessage>(), ItExpr.IsAny<CancellationToken>());
|
||||
_httpMessageHandlerMock.Protected.Verify("SendAsync", Times.Once(), ItExpr.IsAny<HttpRequestMessage>(), ItExpr.IsAny<CancellationToken>());
|
||||
|
||||
_clientOptionsMock.VerifyGet(o => o.DefaultQueryParams, Times.Once);
|
||||
VerifyNoOtherCalls();
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void ShouldThrowOnInvalidContentCategoryForBinary()
|
||||
{
|
||||
// Arrange
|
||||
_request.ContentCategory = 0;
|
||||
var client = GetClient();
|
||||
|
||||
// Act & Assert
|
||||
var ex = Assert.ThrowsExactly<ArgumentException>(() => client.SendBinaryMessage(_request, TestContext.CancellationToken));
|
||||
Assert.AreEqual("contentCategory", ex.ParamName);
|
||||
Assert.StartsWith("Content category '0' is not valid.", ex.Message);
|
||||
|
||||
VerifyNoOtherCalls();
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public async Task ShouldSendBinaryMessageFullDetails()
|
||||
{
|
||||
@@ -145,9 +155,7 @@ namespace LinkMobility.Tests.Sms
|
||||
Assert.AreEqual("Scheme Parameter", callback.Headers["Authorization"]);
|
||||
Assert.AreEqual("LinkMobilityClient/1.0.0", callback.Headers["User-Agent"]);
|
||||
|
||||
_httpMessageHandlerMock.Mock
|
||||
.Protected()
|
||||
.Verify("SendAsync", Times.Once(), ItExpr.IsAny<HttpRequestMessage>(), ItExpr.IsAny<CancellationToken>());
|
||||
_httpMessageHandlerMock.Protected.Verify("SendAsync", Times.Once(), ItExpr.IsAny<HttpRequestMessage>(), ItExpr.IsAny<CancellationToken>());
|
||||
|
||||
_clientOptionsMock.VerifyGet(o => o.DefaultQueryParams, Times.Once);
|
||||
VerifyNoOtherCalls();
|
||||
@@ -167,6 +175,36 @@ namespace LinkMobility.Tests.Sms
|
||||
VerifyNoOtherCalls();
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void ShouldThrowOnNullMessageContentList()
|
||||
{
|
||||
// Arrange
|
||||
_request.MessageContent = null;
|
||||
var client = GetClient();
|
||||
|
||||
// Act & Assert
|
||||
var ex = Assert.ThrowsExactly<ArgumentException>(() => client.SendBinaryMessage(_request, TestContext.CancellationToken));
|
||||
|
||||
Assert.AreEqual("MessageContent", ex.ParamName);
|
||||
|
||||
VerifyNoOtherCalls();
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void ShouldThrowOnEmptyMessageContentList()
|
||||
{
|
||||
// Arrange
|
||||
_request.MessageContent = [];
|
||||
var client = GetClient();
|
||||
|
||||
// Act & Assert
|
||||
var ex = Assert.ThrowsExactly<ArgumentException>(() => client.SendBinaryMessage(_request, TestContext.CancellationToken));
|
||||
|
||||
Assert.AreEqual("MessageContent", ex.ParamName);
|
||||
|
||||
VerifyNoOtherCalls();
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void ShouldThrowOnInvalidMessageEncoding()
|
||||
{
|
||||
@@ -205,7 +243,7 @@ namespace LinkMobility.Tests.Sms
|
||||
// Act & Assert
|
||||
var ex = Assert.ThrowsExactly<ArgumentException>(() => client.SendBinaryMessage(_request, TestContext.CancellationToken));
|
||||
|
||||
Assert.AreEqual("RecipientAddressList", ex.ParamName);
|
||||
Assert.AreEqual("recipientAddressList", ex.ParamName);
|
||||
|
||||
VerifyNoOtherCalls();
|
||||
}
|
||||
@@ -224,7 +262,7 @@ namespace LinkMobility.Tests.Sms
|
||||
// Act & Assert
|
||||
var ex = Assert.ThrowsExactly<ArgumentException>(() => client.SendBinaryMessage(_request, TestContext.CancellationToken));
|
||||
|
||||
Assert.AreEqual("RecipientAddressList", ex.ParamName);
|
||||
Assert.AreEqual("recipientAddressList", ex.ParamName);
|
||||
Assert.StartsWith($"Recipient address '{recipient}' is not a valid MSISDN format.", ex.Message);
|
||||
|
||||
VerifyNoOtherCalls();
|
||||
|
||||
@@ -85,14 +85,27 @@ namespace LinkMobility.Tests.Sms
|
||||
Assert.AreEqual("Scheme Parameter", callback.Headers["Authorization"]);
|
||||
Assert.AreEqual("LinkMobilityClient/1.0.0", callback.Headers["User-Agent"]);
|
||||
|
||||
_httpMessageHandlerMock.Mock
|
||||
.Protected()
|
||||
.Verify("SendAsync", Times.Once(), ItExpr.IsAny<HttpRequestMessage>(), ItExpr.IsAny<CancellationToken>());
|
||||
_httpMessageHandlerMock.Protected.Verify("SendAsync", Times.Once(), ItExpr.IsAny<HttpRequestMessage>(), ItExpr.IsAny<CancellationToken>());
|
||||
|
||||
_clientOptionsMock.VerifyGet(o => o.DefaultQueryParams, Times.Once);
|
||||
VerifyNoOtherCalls();
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void ShouldThrowOnInvalidContentCategory()
|
||||
{
|
||||
// Arrange
|
||||
_request.ContentCategory = 0;
|
||||
var client = GetClient();
|
||||
|
||||
// Act & Assert
|
||||
var ex = Assert.ThrowsExactly<ArgumentException>(() => client.SendTextMessage(_request, TestContext.CancellationToken));
|
||||
Assert.AreEqual("contentCategory", ex.ParamName);
|
||||
Assert.StartsWith("Content category '0' is not valid.", ex.Message);
|
||||
|
||||
VerifyNoOtherCalls();
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public async Task ShouldSendTextMessageFullDetails()
|
||||
{
|
||||
@@ -145,9 +158,7 @@ namespace LinkMobility.Tests.Sms
|
||||
Assert.AreEqual("Scheme Parameter", callback.Headers["Authorization"]);
|
||||
Assert.AreEqual("LinkMobilityClient/1.0.0", callback.Headers["User-Agent"]);
|
||||
|
||||
_httpMessageHandlerMock.Mock
|
||||
.Protected()
|
||||
.Verify("SendAsync", Times.Once(), ItExpr.IsAny<HttpRequestMessage>(), ItExpr.IsAny<CancellationToken>());
|
||||
_httpMessageHandlerMock.Protected.Verify("SendAsync", Times.Once(), ItExpr.IsAny<HttpRequestMessage>(), ItExpr.IsAny<CancellationToken>());
|
||||
|
||||
_clientOptionsMock.VerifyGet(o => o.DefaultQueryParams, Times.Once);
|
||||
VerifyNoOtherCalls();
|
||||
@@ -192,7 +203,7 @@ namespace LinkMobility.Tests.Sms
|
||||
|
||||
// Act & Assert
|
||||
var ex = Assert.ThrowsExactly<ArgumentException>(() => client.SendTextMessage(req, TestContext.CancellationToken));
|
||||
Assert.AreEqual("RecipientAddressList", ex.ParamName);
|
||||
Assert.AreEqual("recipientAddressList", ex.ParamName);
|
||||
|
||||
VerifyNoOtherCalls();
|
||||
}
|
||||
@@ -211,7 +222,7 @@ namespace LinkMobility.Tests.Sms
|
||||
// Act & Assert
|
||||
var ex = Assert.ThrowsExactly<ArgumentException>(() => client.SendTextMessage(req, TestContext.CancellationToken));
|
||||
|
||||
Assert.AreEqual("RecipientAddressList", ex.ParamName);
|
||||
Assert.AreEqual("recipientAddressList", ex.ParamName);
|
||||
Assert.StartsWith($"Recipient address '{recipient}' is not a valid MSISDN format.", ex.Message);
|
||||
|
||||
VerifyNoOtherCalls();
|
||||
|
||||
33
test/LinkMobility.Tests/Utils/ValidationTest.cs
Normal file
33
test/LinkMobility.Tests/Utils/ValidationTest.cs
Normal file
@@ -0,0 +1,33 @@
|
||||
using AMWD.Net.Api.LinkMobility.Utils;
|
||||
|
||||
namespace LinkMobility.Tests.Utils
|
||||
{
|
||||
[TestClass]
|
||||
public class ValidationTest
|
||||
{
|
||||
[TestMethod]
|
||||
[DataRow("10000000")]
|
||||
[DataRow("12345678")]
|
||||
[DataRow("123456789012345")]
|
||||
[DataRow("14155552671")]
|
||||
public void ShouldValidateMSISDNSuccessful(string msisdn)
|
||||
{
|
||||
Assert.IsTrue(Validation.IsValidMSISDN(msisdn));
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
[DataRow(null)]
|
||||
[DataRow("")]
|
||||
[DataRow(" ")]
|
||||
[DataRow("012345678")]
|
||||
[DataRow("+123456789")]
|
||||
[DataRow("1234 5678")]
|
||||
[DataRow("1234567")]
|
||||
[DataRow("1234567890123456")]
|
||||
[DataRow("abc1234567")]
|
||||
public void ShouldValidateMSISDNNotSuccessful(string msisdn)
|
||||
{
|
||||
Assert.IsFalse(Validation.IsValidMSISDN(msisdn));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user