diff --git a/Vonage.Test.Unit/ConversionTest.cs b/Vonage.Test.Unit/ConversionTest.cs index 92bd31ab4..522890bef 100644 --- a/Vonage.Test.Unit/ConversionTest.cs +++ b/Vonage.Test.Unit/ConversionTest.cs @@ -14,7 +14,7 @@ public class ConversionTest : TestBase [InlineData(true)] public void SmsConversion(bool passCreds) { - var expectedUri = $"${ApiUrl}/conversions/sms"; + var expectedUri = $"{ApiUrl}/conversions/sms"; var expectedContent = "message-id=00A0B0C0&delivered=true×tamp=2020-01-01+12%3A00%3A00&api_key=testkey&api_secret=testSecret&"; var expectedResponse = ""; Setup(expectedUri, expectedResponse, expectedContent); @@ -38,7 +38,7 @@ public void SmsConversion(bool passCreds) [InlineData(true)] public void VoiceConversion(bool passCreds) { - var expectedUri = $"${ApiUrl}/conversions/sms"; + var expectedUri = $"{ApiUrl}/conversions/voice"; var expectedContent = "message-id=00A0B0C0&delivered=true×tamp=2020-01-01+12%3A00%3A00&api_key=testkey&api_secret=testSecret&"; var expectedResponse = ""; Setup(expectedUri, expectedResponse, expectedContent); @@ -62,7 +62,7 @@ public void VoiceConversion(bool passCreds) [InlineData(true)] public async void SmsConversionAsync(bool passCreds) { - var expectedUri = $"${ApiUrl}/conversions/sms"; + var expectedUri = $"{ApiUrl}/conversions/sms"; var expectedContent = "message-id=00A0B0C0&delivered=true×tamp=2020-01-01+12%3A00%3A00&api_key=testkey&api_secret=testSecret&"; var expectedResponse = ""; Setup(expectedUri, expectedResponse, expectedContent); @@ -86,7 +86,7 @@ public async void SmsConversionAsync(bool passCreds) [InlineData(true)] public async void VoiceConversionAsync(bool passCreds) { - var expectedUri = $"${ApiUrl}/conversions/sms"; + var expectedUri = $"{ApiUrl}/conversions/voice"; var expectedContent = "message-id=00A0B0C0&delivered=true×tamp=2020-01-01+12%3A00%3A00&api_key=testkey&api_secret=testSecret&"; var expectedResponse = ""; Setup(expectedUri, expectedResponse, expectedContent); diff --git a/Vonage.Test.Unit/MessagingTests.cs b/Vonage.Test.Unit/MessagingTests.cs index a578b2698..8ee284898 100644 --- a/Vonage.Test.Unit/MessagingTests.cs +++ b/Vonage.Test.Unit/MessagingTests.cs @@ -16,7 +16,7 @@ public class MessagingTests : TestBase public void SendSmsWithAllPropertiesSet(bool passCreds) { var expectedResponse = GetExpectedJson(); - var expectedUri = $"{RestUrl}/sms/json?"; + var expectedUri = $"{RestUrl}/sms/json"; var expectedRequestContent = $"from=AcmeInc&to=447700900000&text={HttpUtility.UrlEncode("Hello World!")}" + $"&ttl=900000&status-report-req=true&callback={HttpUtility.UrlEncode("https://example.com/sms-dlr")}&message-class=0" + $"&type=text&vcard=none&vcal=none&body=638265253311&udh=06050415811581&protocol-id=127&title=welcome&url={HttpUtility.UrlEncode("https://example.com")}" + @@ -69,7 +69,7 @@ public void SendSmsWithAllPropertiesSet(bool passCreds) public async Task SendSmsAsyncWithAllPropertiesSet(bool passCreds) { var expectedResponse = GetExpectedJson(); - var expectedUri = $"{RestUrl}/sms/json?"; + var expectedUri = $"{RestUrl}/sms/json"; var expectedRequestContent = $"from=AcmeInc&to=447700900000&text={HttpUtility.UrlEncode("Hello World!")}" + $"&ttl=900000&status-report-req=true&callback={HttpUtility.UrlEncode("https://example.com/sms-dlr")}&message-class=0" + $"&type=text&vcard=none&vcal=none&body=638265253311&udh=06050415811581&protocol-id=127&title=welcome&url={HttpUtility.UrlEncode("https://example.com")}" + @@ -133,7 +133,7 @@ public void SendSmsTypicalUsage() } ] }"; - var expectedUri = $"{RestUrl}/sms/json?"; + var expectedUri = $"{RestUrl}/sms/json"; var expectedRequestContent = $"from=AcmeInc&to=447700900000&text={HttpUtility.UrlEncode("Hello World!")}&api_key={ApiKey}&api_secret={ApiSecret}&"; Setup(expectedUri, expectedResponse, expectedRequestContent); var client = new VonageClient(Request.Credentials.FromApiKeyAndSecret(ApiKey, ApiSecret)); @@ -165,7 +165,7 @@ public void SendSmsTypicalUsageSimplified() } ] }"; - var expectedUri = $"{RestUrl}/sms/json?"; + var expectedUri = $"{RestUrl}/sms/json"; var expectedRequestContent = $"from=AcmeInc&to=447700900000&text={HttpUtility.UrlEncode("Hello World!")}&type=text&api_key={ApiKey}&api_secret={ApiSecret}&"; Setup(expectedUri, expectedResponse, expectedRequestContent); var client = new VonageClient(Request.Credentials.FromApiKeyAndSecret(ApiKey, ApiSecret)); @@ -184,7 +184,7 @@ public void SendSmsTypicalUsageSimplified() public async Task SendSmsTypicalUsageSimplifiedAsync() { var expectedResponse = GetExpectedJson(); - var expectedUri = $"{RestUrl}/sms/json?"; + var expectedUri = $"{RestUrl}/sms/json"; var expectedRequestContent = $"from=AcmeInc&to=447700900000&text={HttpUtility.UrlEncode("Hello World!")}&type=text&api_key={ApiKey}&api_secret={ApiSecret}&"; Setup(expectedUri, expectedResponse, expectedRequestContent); var client = new VonageClient(Request.Credentials.FromApiKeyAndSecret(ApiKey, ApiSecret)); @@ -216,7 +216,7 @@ public void SendSmsUnicode() } ] }"; - var expectedUri = $"{RestUrl}/sms/json?"; + var expectedUri = $"{RestUrl}/sms/json"; var expectedRequestContent = $"from=AcmeInc&to=447700900000&text={HttpUtility.UrlEncode("こんにちは世界")}&api_key={ApiKey}&api_secret={ApiSecret}&"; Setup(expectedUri, expectedResponse, expectedRequestContent); var client = new VonageClient(Request.Credentials.FromApiKeyAndSecret(ApiKey, ApiSecret)); @@ -235,7 +235,7 @@ public void SendSmsUnicode() public void SendSmsBadResponse() { var expectedResponse = GetExpectedJson(); - var expectedUri = $"{RestUrl}/sms/json?"; + var expectedUri = $"{RestUrl}/sms/json"; var expectedRequestContent = $"from=AcmeInc&to=447700900000&text={HttpUtility.UrlEncode("Hello World!")}&api_key={ApiKey}&api_secret={ApiSecret}&"; Setup(expectedUri, expectedResponse, expectedRequestContent); var client = new VonageClient(Request.Credentials.FromApiKeyAndSecret(ApiKey, ApiSecret)); @@ -252,7 +252,7 @@ public void SendSmsBadResponse() public async Task SendSmsAsyncBadResponse() { var expectedResponse = GetExpectedJson(); - var expectedUri = $"{RestUrl}/sms/json?"; + var expectedUri = $"{RestUrl}/sms/json"; var expectedRequestContent = $"from=AcmeInc&to=447700900000&text={HttpUtility.UrlEncode("Hello World!")}&api_key={ApiKey}&api_secret={ApiSecret}&"; Setup(expectedUri, expectedResponse, expectedRequestContent); var client = new VonageClient(Request.Credentials.FromApiKeyAndSecret(ApiKey, ApiSecret)); @@ -269,7 +269,7 @@ public async Task SendSmsAsyncBadResponse() public void NullMessagesResponse() { var expectedResponse = @""; - var expectedUri = $"{RestUrl}/sms/json?"; + var expectedUri = $"{RestUrl}/sms/json"; var expectedRequestContent = $"from=AcmeInc&to=447700900000&text={HttpUtility.UrlEncode("Hello World!")}&api_key={ApiKey}&api_secret={ApiSecret}&"; Setup(expectedUri, expectedResponse, expectedRequestContent); diff --git a/Vonage.Test.Unit/TestBase.cs b/Vonage.Test.Unit/TestBase.cs index 2950acc71..2cbe6dd7c 100644 --- a/Vonage.Test.Unit/TestBase.cs +++ b/Vonage.Test.Unit/TestBase.cs @@ -9,6 +9,7 @@ using System.Threading.Tasks; using Moq; using Moq.Protected; +using Xunit; namespace Vonage.Test.Unit { @@ -43,7 +44,7 @@ public class TestBase private static readonly string TestAssemblyName = ThisAssembly.GetName().Name; - public static string AssemblyDirectory + private static string AssemblyDirectory { get { @@ -55,55 +56,42 @@ public static string AssemblyDirectory } - public void Setup(string uri, string responseContent, string requestContent = null, HttpStatusCode expectedCode = HttpStatusCode.OK) + protected void Setup(string uri, string responseContent, string requestContent = null, HttpStatusCode expectedCode = HttpStatusCode.OK) { - typeof(Configuration).GetField("_client", BindingFlags.Instance | BindingFlags.NonPublic)?.SetValue(Configuration.Instance, null); - var mockHandler = new Mock(MockBehavior.Strict); - mockHandler - .Protected() - .Setup>(MockedMethod, - ItExpr.Is( - x => - string.Equals(x.RequestUri.AbsoluteUri, uri, StringComparison.OrdinalIgnoreCase) && - requestContent == null || - string.Equals(x.Content.ReadAsStringAsync().Result, requestContent, StringComparison.OrdinalIgnoreCase)), - ItExpr.IsAny() - ) - .ReturnsAsync(new HttpResponseMessage - { - StatusCode = expectedCode, - Content = new StringContent(responseContent) - }) - .Verifiable(); - Configuration.Instance.ClientHandler = mockHandler.Object; + Setup(uri, new StringContent(responseContent), expectedCode, requestContent); } - public void Setup(string uri, byte[] responseContent, HttpStatusCode expectedCode = HttpStatusCode.OK) + protected void Setup(string uri, byte[] responseContent, HttpStatusCode expectedCode = HttpStatusCode.OK) { Setup(uri, new StreamContent(new MemoryStream(responseContent)), expectedCode); } - private void Setup(string uri, HttpContent httpContent, HttpStatusCode expectedCode, string requestContent = null) { - typeof(Configuration).GetField("_client", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(Configuration.Instance, null); + typeof(Configuration).GetField("_client", BindingFlags.Instance | BindingFlags.NonPublic)?.SetValue(Configuration.Instance, null); Mock mockHandler = new Mock(MockBehavior.Strict); mockHandler .Protected() .Setup>(MockedMethod, - ItExpr.Is( - x => string.Equals(x.RequestUri.AbsoluteUri, uri, StringComparison.OrdinalIgnoreCase) && (requestContent == null) || - string.Equals(x.Content.ReadAsStringAsync().Result, requestContent, StringComparison.OrdinalIgnoreCase) - ), + ItExpr.IsAny(), ItExpr.IsAny()) - .ReturnsAsync(new HttpResponseMessage() + .Callback((actualHttpRequestMessage, cancellationToken) => + { + Assert.Equal(uri, actualHttpRequestMessage.RequestUri.AbsoluteUri, StringComparer.OrdinalIgnoreCase); + if (requestContent == null) + return; + + var actualContent = actualHttpRequestMessage.Content.ReadAsStringAsync().Result; + Assert.Equal(requestContent, actualContent, StringComparer.OrdinalIgnoreCase); + }) + .ReturnsAsync(new HttpResponseMessage { StatusCode = expectedCode, Content = httpContent }) .Verifiable(); - + Configuration.Instance.ClientHandler = mockHandler.Object; } diff --git a/Vonage.Test.Unit/VerifyTest.cs b/Vonage.Test.Unit/VerifyTest.cs index 11d517e78..03826ba0b 100644 --- a/Vonage.Test.Unit/VerifyTest.cs +++ b/Vonage.Test.Unit/VerifyTest.cs @@ -68,7 +68,7 @@ public void TestCheckVerification(bool passCreds, bool kitchenSink) ""currency"": ""EUR"", ""estimated_price_messages_sent"": ""0.03330000"" }"; - var expectedUri = $"{ApiUrl}/verify/json"; + var expectedUri = $"{ApiUrl}/verify/check/json"; string expectedRequestContent; VerifyCheckRequest request = new VerifyCheckRequest { Code = "1234", RequestId = "abcdef0123456789abcdef0123456789" }; @@ -330,7 +330,7 @@ public async void TestCheckVerificationAsync(bool passCreds, bool kitchenSink) ""currency"": ""EUR"", ""estimated_price_messages_sent"": ""0.03330000"" }"; - var expectedUri = $"{ApiUrl}/verify/json"; + var expectedUri = $"{ApiUrl}/verify/check/json"; string expectedRequestContent; VerifyCheckRequest request = new VerifyCheckRequest { Code = "1234", RequestId = "abcdef0123456789abcdef0123456789" }; diff --git a/Vonage.Test.Unit/VoiceTests.cs b/Vonage.Test.Unit/VoiceTests.cs index 16db7363a..157ac2346 100644 --- a/Vonage.Test.Unit/VoiceTests.cs +++ b/Vonage.Test.Unit/VoiceTests.cs @@ -15,7 +15,7 @@ public class VoiceTests : TestBase [InlineData(false)] public void CreateCall(bool passCreds) { - var expectedUri = "https://api.nexmo.com/v1/calls/"; + var expectedUri = "https://api.nexmo.com/v1/calls"; var expectedResponse = @"{ ""uuid"": ""63f61863-4a51-4f6b-86e1-46edebcf9356"", ""status"": ""started"", @@ -74,7 +74,7 @@ public void CreateCall(bool passCreds) [Fact] public void TestCreateCallWithRandomFromNumber() { - var expectedUri = "https://api.nexmo.com/v1/calls/"; + var expectedUri = "https://api.nexmo.com/v1/calls"; var expectedResponse = @"{ ""uuid"": ""63f61863-4a51-4f6b-86e1-46edebcf9356"", ""status"": ""started"", @@ -498,7 +498,7 @@ public void TestStartTalk(bool passCreds, bool kitchenSink) public void StopTalk(bool passCreds) { var uuid = "63f61863-4a51-4f6b-86e1-46edebcf9356"; - var expectedUri = $"{ApiUrl}/v1/calls/{uuid}/talk"; + var expectedUri = $"{ApiUrl}/v1/calls/{uuid}/stream"; var expectedResponse = @"{ ""message"": ""Talk stopped"", ""uuid"": ""63f61863-4a51-4f6b-86e1-46edebcf9356"" @@ -528,7 +528,7 @@ public void StopTalk(bool passCreds) public void TestStartDtmf(bool passCreds) { var uuid = "63f61863-4a51-4f6b-86e1-46edebcf9356"; - var expectedUri = $"{ApiUrl}/v1/calls/{uuid}/talk"; + var expectedUri = $"{ApiUrl}/v1/calls/{uuid}/dtmf"; var expectedResponse = @"{ ""message"": ""DTMF sent"", ""uuid"": ""63f61863-4a51-4f6b-86e1-46edebcf9356"" @@ -558,7 +558,7 @@ public void TestStartDtmf(bool passCreds) [InlineData(false)] public void TestGetRecordings(bool passCreds) { - var expectedUri = $"{ApiUrl}/v1/calls/63f61863-4a51-4f6b-86e1-46edebcf9356"; + var expectedUri = $"{ApiUrl}/v1/calls63f61863-4a51-4f6b-86e1-46edebcf9356"; var creds = Request.Credentials.FromAppIdAndPrivateKey(AppId, PrivateKey); var expectedResponse = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; Setup(expectedUri, expectedResponse); @@ -582,7 +582,7 @@ public void TestGetRecordings(bool passCreds) [Fact] public void CreateCallWithUnicodeCharecters() { - var expectedUri = "https://api.nexmo.com/v1/calls/"; + var expectedUri = "https://api.nexmo.com/v1/calls"; var expectedResponse = @"{ ""uuid"": ""63f61863-4a51-4f6b-86e1-46edebcf9356"", ""status"": ""started"", @@ -631,7 +631,7 @@ public void CreateCallWithUnicodeCharecters() [Fact] public void CreateCallWithStringParameters() { - var expectedUri = $"{ApiUrl}/v1/calls/"; + var expectedUri = $"{ApiUrl}/v1/calls"; var expectedResponse = @"{ ""uuid"": ""63f61863-4a51-4f6b-86e1-46edebcf9356"", ""status"": ""started"", @@ -655,20 +655,19 @@ public void CreateCallWithStringParameters() [Fact] public void CreateCallWithEndpointAndNcco() { - var expectedUri = $"{ApiUrl}/v1/calls/"; + var expectedUri = $"{ApiUrl}/v1/calls"; var expectedResponse = @"{ ""uuid"": ""63f61863-4a51-4f6b-86e1-46edebcf9356"", ""status"": ""started"", ""direction"": ""outbound"", ""conversation_uuid"": ""CON-f972836a-550f-45fa-956c-12a2ab5b7d22"" }"; - var expectedRequesetContent = @"{""to"":[{""number"":""14155550100"",""type"":""phone""}],""from"":{""number"":""14155550100"",""type"":""phone""},""ncco"":[{""text"":""Hello World"",""action"":""talk""}]}"; - Setup(expectedUri, expectedResponse, expectedRequesetContent); + var expectedRequestContent = @"{""to"":[{""number"":""14155550100"",""type"":""phone""}],""from"":{""number"":""14155550100"",""type"":""phone""},""ncco"":[{""text"":""Hello World"",""action"":""talk""}]}"; + Setup(expectedUri, expectedResponse, expectedRequestContent); var creds = Request.Credentials.FromAppIdAndPrivateKey(AppId, PrivateKey); var client = new VonageClient(creds); - CallResponse response; var toEndpoint = new PhoneEndpoint() { Number = "14155550100" }; - response = client.VoiceClient.CreateCall( + var response = client.VoiceClient.CreateCall( toEndpoint, "14155550100", new Voice.Nccos.Ncco(new Voice.Nccos.TalkAction { Text = "Hello World" })); @@ -683,7 +682,7 @@ public void CreateCallWithEndpointAndNcco() [InlineData(false)] public async Task CreateCallAsync(bool passCreds) { - var expectedUri = "https://api.nexmo.com/v1/calls/"; + var expectedUri = "https://api.nexmo.com/v1/calls"; var expectedResponse = @"{ ""uuid"": ""63f61863-4a51-4f6b-86e1-46edebcf9356"", ""status"": ""started"", @@ -1049,7 +1048,7 @@ public async Task TestStartTalkAsync(bool passCreds) public async Task StopTalkAsync(bool passCreds) { var uuid = "63f61863-4a51-4f6b-86e1-46edebcf9356"; - var expectedUri = $"{ApiUrl}/v1/calls/{uuid}/talk"; + var expectedUri = $"{ApiUrl}/v1/calls/{uuid}/stream"; var expectedResponse = @"{ ""message"": ""Talk stopped"", ""uuid"": ""63f61863-4a51-4f6b-86e1-46edebcf9356"" @@ -1079,7 +1078,7 @@ public async Task StopTalkAsync(bool passCreds) public async Task TestStartDtmfAsync(bool passCreds) { var uuid = "63f61863-4a51-4f6b-86e1-46edebcf9356"; - var expectedUri = $"{ApiUrl}/v1/calls/{uuid}/talk"; + var expectedUri = $"{ApiUrl}/v1/calls/{uuid}/dtmf"; var expectedResponse = @"{ ""message"": ""DTMF sent"", ""uuid"": ""63f61863-4a51-4f6b-86e1-46edebcf9356"" @@ -1109,7 +1108,7 @@ public async Task TestStartDtmfAsync(bool passCreds) [InlineData(false)] public async Task TestGetRecordingsAsync(bool passCreds) { - var expectedUri = $"{ApiUrl}/v1/calls/63f61863-4a51-4f6b-86e1-46edebcf9356"; + var expectedUri = $"{ApiUrl}/v1/calls63f61863-4a51-4f6b-86e1-46edebcf9356"; var creds = Request.Credentials.FromAppIdAndPrivateKey(AppId, PrivateKey); var expectedResponse = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; Setup(expectedUri, expectedResponse); @@ -1133,7 +1132,7 @@ public async Task TestGetRecordingsAsync(bool passCreds) [Fact] public async Task CreateCallWithStringParametersAsync() { - var expectedUri = $"{ApiUrl}/v1/calls/"; + var expectedUri = $"{ApiUrl}/v1/calls"; var expectedResponse = @"{ ""uuid"": ""63f61863-4a51-4f6b-86e1-46edebcf9356"", ""status"": ""started"", @@ -1157,15 +1156,15 @@ public async Task CreateCallWithStringParametersAsync() [Fact] public async Task CreateCallWithEndpointAndNccoAsync() { - var expectedUri = $"{ApiUrl}/v1/calls/"; + var expectedUri = $"{ApiUrl}/v1/calls"; var expectedResponse = @"{ ""uuid"": ""63f61863-4a51-4f6b-86e1-46edebcf9356"", ""status"": ""started"", ""direction"": ""outbound"", ""conversation_uuid"": ""CON-f972836a-550f-45fa-956c-12a2ab5b7d22"" }"; - var expectedRequesetContent = @"{""to"":[{""number"":""14155550100"",""type"":""phone""}],""from"":{""number"":""14155550100"",""type"":""phone""},""ncco"":[{""text"":""Hello World"",""action"":""talk""}]}"; - Setup(expectedUri, expectedResponse, expectedRequesetContent); + var expectedRequestContent = @"{""to"":[{""number"":""14155550100"",""type"":""phone""}],""from"":{""number"":""14155550100"",""type"":""phone""},""ncco"":[{""text"":""Hello World"",""action"":""talk""}]}"; + Setup(expectedUri, expectedResponse, expectedRequestContent); var creds = Request.Credentials.FromAppIdAndPrivateKey(AppId, PrivateKey); var client = new VonageClient(creds); var toEndpoint = new PhoneEndpoint { Number = "14155550100" }; @@ -1181,7 +1180,7 @@ public async Task CreateCallWithEndpointAndNccoAsync() [Fact] public async Task CreateCallAsyncWithWrongCredsThrowsAuthException() { - var expectedUri = $"{ApiUrl}/v1/calls/"; + var expectedUri = $"{ApiUrl}/v1/calls"; var expectedResponse = @"{ ""uuid"": ""63f61863-4a51-4f6b-86e1-46edebcf9356"", ""status"": ""started"", @@ -1206,7 +1205,7 @@ public async Task CreateCallAsyncWithWrongCredsThrowsAuthException() [Fact] public void CreateCallWithWrongCredsThrowsAuthException() { - var expectedUri = $"{ApiUrl}/v1/calls/"; + var expectedUri = $"{ApiUrl}/v1/calls"; var expectedResponse = @"{ ""uuid"": ""63f61863-4a51-4f6b-86e1-46edebcf9356"", ""status"": ""started"",