diff --git a/Vonage.Test/NumbersTests.cs b/Vonage.Test/NumbersTests.cs index afbace083..6c8000816 100644 --- a/Vonage.Test/NumbersTests.cs +++ b/Vonage.Test/NumbersTests.cs @@ -1,5 +1,4 @@ -using System; -using System.Net; +using System.Net; using System.Threading.Tasks; using FluentAssertions; using Vonage.Numbers; @@ -20,19 +19,6 @@ public NumbersTests() this.client = this.BuildVonageClient(credentials); } - [Fact] - public void BuyNumber() - { - const string expectedResponse = @"{""error-code"": ""200"",""error-code-label"": ""success""}"; - const string expectedRequestContent = "country=GB&msisdn=447700900000&"; - var expectedUri = $"{this.RestUrl}/number/buy?api_key={this.ApiKey}&api_secret={this.ApiSecret}"; - var request = new NumberTransactionRequest {Country = "GB", Msisdn = "447700900000"}; - this.Setup(expectedUri, expectedResponse, expectedRequestContent); - var response = this.client.NumbersClient.BuyANumber(request); - response.ErrorCode.Should().Be("200"); - response.ErrorCodeLabel.Should().Be("success"); - } - [Fact] public async Task BuyNumberAsync() { @@ -60,33 +46,6 @@ public async Task BuyNumberAsyncWithCredentials() response.ErrorCodeLabel.Should().Be("success"); } - [Fact] - public void BuyNumberWithCredentials() - { - const string expectedResponse = @"{""error-code"": ""200"",""error-code-label"": ""success""}"; - const string expectedRequestContent = "country=GB&msisdn=447700900000&target_api_key=12345&"; - var expectedUri = $"{this.RestUrl}/number/buy?api_key={this.ApiKey}&api_secret={this.ApiSecret}"; - this.Setup(expectedUri, expectedResponse, expectedRequestContent); - var request = new NumberTransactionRequest - {Country = "GB", Msisdn = "447700900000", TargetApiKey = "12345"}; - var response = this.client.NumbersClient.BuyANumber(request, this.credentials); - response.ErrorCode.Should().Be("200"); - response.ErrorCodeLabel.Should().Be("success"); - } - - [Fact] - public void CancelNumber() - { - const string expectedResponse = @"{""error-code"": ""200"",""error-code-label"": ""success""}"; - const string expectedRequestContent = "country=GB&msisdn=447700900000&"; - var expectedUri = $"{this.RestUrl}/number/cancel?api_key={this.ApiKey}&api_secret={this.ApiSecret}"; - var request = new NumberTransactionRequest {Country = "GB", Msisdn = "447700900000"}; - this.Setup(expectedUri, expectedResponse, expectedRequestContent); - var response = this.client.NumbersClient.CancelANumber(request); - response.ErrorCode.Should().Be("200"); - response.ErrorCodeLabel.Should().Be("success"); - } - [Fact] public async Task CancelNumberAsync() { @@ -115,21 +74,7 @@ public async Task CancelNumberAsyncWithCredentials() } [Fact] - public void CancelNumberWithCredentials() - { - const string expectedResponse = @"{""error-code"": ""200"",""error-code-label"": ""success""}"; - const string expectedRequestContent = "country=GB&msisdn=447700900000&target_api_key=12345&"; - var expectedUri = $"{this.RestUrl}/number/cancel?api_key={this.ApiKey}&api_secret={this.ApiSecret}"; - var request = new NumberTransactionRequest - {Country = "GB", Msisdn = "447700900000", TargetApiKey = "12345"}; - this.Setup(expectedUri, expectedResponse, expectedRequestContent); - var response = this.client.NumbersClient.CancelANumber(request, this.credentials); - response.ErrorCode.Should().Be("200"); - response.ErrorCodeLabel.Should().Be("success"); - } - - [Fact] - public void FailedPurchase() + public async Task FailedPurchase() { const string expectedResponse = @"{""error-code"": ""401"",""error-code-label"": ""authentication failed""}"; @@ -137,14 +82,14 @@ public void FailedPurchase() var expectedUri = $"{this.RestUrl}/number/buy?api_key={this.ApiKey}&api_secret={this.ApiSecret}"; this.Setup(expectedUri, expectedResponse, expectedRequestContent); var request = new NumberTransactionRequest {Country = "GB", Msisdn = "447700900000"}; - Action act = () => this.client.NumbersClient.BuyANumber(request); - act.Should().ThrowExactly() + var act = () => this.client.NumbersClient.BuyANumberAsync(request); + (await act.Should().ThrowExactlyAsync()) .Which.Response.Should().BeEquivalentTo(new NumberTransactionResponse {ErrorCode = "401", ErrorCodeLabel = "authentication failed"}); } [Fact] - public void GetAvailableNumbers() + public async Task GetAvailableNumbers() { const string expectedResponse = @"{""count"": 1234,""numbers"": [{""country"": ""GB"",""msisdn"": ""447700900000"",""type"": ""mobile-lvn"",""cost"": ""1.25"",""features"": [""VOICE"",""SMS""]}]}"; @@ -152,7 +97,7 @@ public void GetAvailableNumbers() $"{this.RestUrl}/number/search?country=GB&api_key={this.ApiKey}&api_secret={this.ApiSecret}&"; var request = new NumberSearchRequest {Country = "GB"}; this.Setup(expectedUri, expectedResponse); - var response = this.client.NumbersClient.GetAvailableNumbers(request); + var response = await this.client.NumbersClient.GetAvailableNumbersAsync(request); var number = response.Numbers[0]; Assert.Equal(1234, response.Count); Assert.Equal("GB", number.Country); @@ -207,50 +152,6 @@ public async Task GetAvailableNumbersAsyncWithCredentials() Assert.Equal("SMS", number.Features[1]); } - [Fact] - public void GetAvailableNumbersWithCredentials() - { - const string expectedResponse = - @"{""count"": 1234,""numbers"": [{""country"": ""GB"",""msisdn"": ""447700900000"",""type"": ""mobile-lvn"",""cost"": ""1.25"",""features"": [""VOICE"",""SMS""]}]}"; - var expectedUri = - $"{this.RestUrl}/number/search?country=GB&type=mobile-lvn&pattern=12345&search_pattern=1&features=SMS&size=10&index=1&api_key={this.ApiKey}&api_secret={this.ApiSecret}&"; - var request = new NumberSearchRequest - { - Country = "GB", Type = "mobile-lvn", Pattern = "12345", SearchPattern = SearchPattern.Contains, - Features = "SMS", Size = 10, Index = 1, - }; - this.Setup(expectedUri, expectedResponse); - var response = this.client.NumbersClient.GetAvailableNumbers(request, this.credentials); - var number = response.Numbers[0]; - Assert.Equal(1234, response.Count); - Assert.Equal("GB", number.Country); - Assert.Equal("447700900000", number.Msisdn); - Assert.Equal("mobile-lvn", number.Type); - Assert.Equal("1.25", number.Cost); - Assert.Equal("VOICE", number.Features[0]); - Assert.Equal("SMS", number.Features[1]); - } - - [Fact] - public void GetOwnedNumbers() - { - const string expectedResponse = - @"{""count"": 1234,""numbers"": [{""country"": ""GB"",""msisdn"": ""447700900000"",""type"": ""mobile-lvn"",""cost"": ""1.25"",""features"": [""VOICE"",""SMS""]}]}"; - var expectedUri = - $"{this.RestUrl}/account/numbers?country=GB&api_key={this.ApiKey}&api_secret={this.ApiSecret}&"; - var request = new NumberSearchRequest {Country = "GB"}; - this.Setup(expectedUri, expectedResponse); - var response = this.client.NumbersClient.GetOwnedNumbers(request); - var number = response.Numbers[0]; - Assert.Equal(1234, response.Count); - Assert.Equal("GB", number.Country); - Assert.Equal("447700900000", number.Msisdn); - Assert.Equal("mobile-lvn", number.Type); - Assert.Equal("1.25", number.Cost); - Assert.Equal("VOICE", number.Features[0]); - Assert.Equal("SMS", number.Features[1]); - } - [Fact] public async Task GetOwnedNumbersAsync() { @@ -295,43 +196,6 @@ public async Task GetOwnedNumbersAsyncWithCredentials() Assert.Equal("SMS", number.Features[1]); } - [Fact] - public void GetOwnedNumbersWithCredentials() - { - const string expectedResponse = - @"{""count"": 1234,""numbers"": [{""country"": ""GB"",""msisdn"": ""447700900000"",""type"": ""mobile-lvn"",""cost"": ""1.25"",""features"": [""VOICE"",""SMS""]}]}"; - var expectedUri = - $"{this.RestUrl}/account/numbers?country=GB&type=mobile-lvn&pattern=12345&search_pattern=1&features=SMS&size=10&index=1&api_key={this.ApiKey}&api_secret={this.ApiSecret}&"; - var request = new NumberSearchRequest - { - Country = "GB", Type = "mobile-lvn", Pattern = "12345", SearchPattern = SearchPattern.Contains, - Features = "SMS", Size = 10, Index = 1, - }; - this.Setup(expectedUri, expectedResponse); - var response = this.client.NumbersClient.GetOwnedNumbers(request, this.credentials); - var number = response.Numbers[0]; - Assert.Equal(1234, response.Count); - Assert.Equal("GB", number.Country); - Assert.Equal("447700900000", number.Msisdn); - Assert.Equal("mobile-lvn", number.Type); - Assert.Equal("1.25", number.Cost); - Assert.Equal("VOICE", number.Features[0]); - Assert.Equal("SMS", number.Features[1]); - } - - [Fact] - public void UpdateNumber() - { - const string expectedResponse = @"{""error-code"": ""200"",""error-code-label"": ""success""}"; - const string expectedRequestContent = "country=GB&msisdn=447700900000&"; - var expectedUri = $"{this.RestUrl}/number/update?api_key={this.ApiKey}&api_secret={this.ApiSecret}"; - var request = new UpdateNumberRequest {Country = "GB", Msisdn = "447700900000"}; - this.Setup(expectedUri, expectedResponse, expectedRequestContent); - var response = this.client.NumbersClient.UpdateANumber(request); - response.ErrorCode.Should().Be("200"); - response.ErrorCodeLabel.Should().Be("success"); - } - [Fact] public async Task UpdateNumberAsync() { @@ -370,30 +234,5 @@ public async Task UpdateNumberAsyncWithCredentials() response.ErrorCodeLabel.Should().Be("success"); } - [Fact] - public void UpdateNumberWithCredentials() - { - const string expectedResponse = @"{""error-code"": ""200"",""error-code-label"": ""success""}"; - var expectedUri = $"{this.RestUrl}/number/update?api_key={this.ApiKey}&api_secret={this.ApiSecret}"; - var expectedRequestContent = - $"country=GB&msisdn=447700900000&app_id=aaaaaaaa-bbbb-cccc-dddd-0123456789abc&moHttpUrl={WebUtility.UrlEncode("https://example.com/webhooks/inbound-sms")}&" + - $"moSmppSysType=inbound&voiceCallbackType=tel&voiceCallbackValue=447700900000&voiceStatusCallback={WebUtility.UrlEncode("https://example.com/webhooks/status")}&"; - var request = new UpdateNumberRequest - { - Country = "GB", - Msisdn = "447700900000", - AppId = "aaaaaaaa-bbbb-cccc-dddd-0123456789abc", - MoHttpUrl = "https://example.com/webhooks/inbound-sms", - MoSmppSysType = "inbound", - VoiceCallbackType = "tel", - VoiceCallbackValue = "447700900000", - VoiceStatusCallback = "https://example.com/webhooks/status", - }; - this.Setup(expectedUri, expectedResponse, expectedRequestContent); - var response = this.client.NumbersClient.UpdateANumber(request, this.credentials); - response.ErrorCode.Should().Be("200"); - response.ErrorCodeLabel.Should().Be("success"); - } - private Credentials BuildCredentials() => Credentials.FromApiKeyAndSecret(this.ApiKey, this.ApiSecret); } \ No newline at end of file diff --git a/Vonage/Numbers/INumbersClient.cs b/Vonage/Numbers/INumbersClient.cs index 8dc687f38..76a08c880 100644 --- a/Vonage/Numbers/INumbersClient.cs +++ b/Vonage/Numbers/INumbersClient.cs @@ -47,56 +47,7 @@ public interface INumbersClient /// /// Task UpdateANumberAsync(UpdateNumberRequest request, Credentials creds = null); - - /// - /// Transfer a number that you own to a subaccount. - /// - /// - /// - /// - /// - Task TransferANumberAsync(NumberTransferRequest request, string apiKey, Credentials creds = null); - - /// - /// Retrieve all the inbound numbers associated with your Vonage account. - /// - /// - /// - /// - NumbersSearchResponse GetOwnedNumbers(NumberSearchRequest request, Credentials creds = null); - - /// - /// Retrieve inbound numbers that are available for the specified country. - /// - /// - /// - /// - NumbersSearchResponse GetAvailableNumbers(NumberSearchRequest request, Credentials creds = null); - /// - /// Request to purchase a specific inbound number. - /// - /// - /// - /// - NumberTransactionResponse BuyANumber(NumberTransactionRequest request, Credentials creds = null); - - /// - /// Cancel your subscription for a specific inbound number. - /// - /// - /// - /// - NumberTransactionResponse CancelANumber(NumberTransactionRequest request, Credentials creds = null); - - /// - /// Change the behaviour of a number that you own. - /// - /// - /// - /// - NumberTransactionResponse UpdateANumber(UpdateNumberRequest request, Credentials creds = null); - /// /// Transfer a number that you own to a subaccount. /// @@ -104,5 +55,6 @@ public interface INumbersClient /// /// /// - NumberTransferResponse TransferANumber(NumberTransferRequest request, string apiKey, Credentials creds = null); + Task TransferANumberAsync(NumberTransferRequest request, string apiKey, + Credentials creds = null); } \ No newline at end of file diff --git a/Vonage/Numbers/NumbersClient.cs b/Vonage/Numbers/NumbersClient.cs index 0422ea729..1844c6c58 100644 --- a/Vonage/Numbers/NumbersClient.cs +++ b/Vonage/Numbers/NumbersClient.cs @@ -1,4 +1,3 @@ -using System; using System.Net.Http; using System.Threading.Tasks; using Vonage.Common; @@ -35,21 +34,6 @@ internal NumbersClient(Credentials credentials, Configuration configuration, ITi /// public Credentials Credentials { get; set; } - /// - [Obsolete("Favor asynchronous version instead.")] - public NumberTransactionResponse BuyANumber(NumberTransactionRequest request, Credentials creds = null) - { - var response = ApiRequest.Build(this.GetCredentials(creds), this.configuration, this.timeProvider) - .DoPostRequestUrlContentFromObject( - ApiRequest.GetBaseUri(ApiRequest.UriType.Rest, - this.configuration, $"/number/buy?{FormatQueryStringCredentials(creds ?? this.Credentials)}"), - request, - false - ); - ValidateNumbersResponse(response); - return response; - } - /// public async Task BuyANumberAsync(NumberTransactionRequest request, Credentials creds = null) @@ -65,21 +49,6 @@ public async Task BuyANumberAsync(NumberTransactionRe return response; } - /// - [Obsolete("Favor asynchronous version instead.")] - public NumberTransactionResponse CancelANumber(NumberTransactionRequest request, Credentials creds = null) - { - var response = ApiRequest.Build(this.GetCredentials(creds), this.configuration, this.timeProvider) - .DoPostRequestUrlContentFromObject( - ApiRequest.GetBaseUri(ApiRequest.UriType.Rest, - this.configuration, $"/number/cancel?{FormatQueryStringCredentials(creds ?? this.Credentials)}"), - request, - false - ); - ValidateNumbersResponse(response); - return response; - } - /// public async Task CancelANumberAsync(NumberTransactionRequest request, Credentials creds = null) @@ -95,16 +64,6 @@ public async Task CancelANumberAsync(NumberTransactio return response; } - /// - [Obsolete("Favor asynchronous version instead.")] - public NumbersSearchResponse GetAvailableNumbers(NumberSearchRequest request, Credentials creds = null) => - ApiRequest.Build(this.GetCredentials(creds), this.configuration, this.timeProvider) - .DoGetRequestWithQueryParameters( - ApiRequest.GetBaseUri(ApiRequest.UriType.Rest, this.configuration, "/number/search"), - AuthType.Query, - request - ); - /// public Task GetAvailableNumbersAsync(NumberSearchRequest request, Credentials creds = null) => @@ -115,16 +74,6 @@ public Task GetAvailableNumbersAsync(NumberSearchRequest request ); - /// - [Obsolete("Favor asynchronous version instead.")] - public NumbersSearchResponse GetOwnedNumbers(NumberSearchRequest request, Credentials creds = null) => - ApiRequest.Build(this.GetCredentials(creds), this.configuration, this.timeProvider) - .DoGetRequestWithQueryParameters( - ApiRequest.GetBaseUri(ApiRequest.UriType.Rest, this.configuration, "/account/numbers"), - AuthType.Query, - request - ); - /// public Task GetOwnedNumbersAsync(NumberSearchRequest request, Credentials creds = null) => @@ -135,19 +84,6 @@ public Task request ); - /// - [Obsolete("Favor asynchronous version instead.")] - public NumberTransferResponse TransferANumber(NumberTransferRequest request, string apiKey, - Credentials creds = null) => - ApiRequest.Build(this.GetCredentials(creds), this.configuration, this.timeProvider) - .DoRequestWithJsonContent( - HttpMethod.Post, - ApiRequest.GetBaseUri(ApiRequest.UriType.Api, this.configuration, - $"/accounts/{apiKey}/transfer-number"), - request, - AuthType.Basic - ); - /// public Task TransferANumberAsync(NumberTransferRequest request, string apiKey, Credentials creds = null) => @@ -160,21 +96,6 @@ public Task TransferANumberAsync(NumberTransferRequest r AuthType.Basic ); - /// - [Obsolete("Favor asynchronous version instead.")] - public NumberTransactionResponse UpdateANumber(UpdateNumberRequest request, Credentials creds = null) - { - var response = ApiRequest.Build(this.GetCredentials(creds), this.configuration, this.timeProvider) - .DoPostRequestUrlContentFromObject( - ApiRequest.GetBaseUri(ApiRequest.UriType.Rest, - this.configuration, $"/number/update?{FormatQueryStringCredentials(creds ?? this.Credentials)}"), - request, - false - ); - ValidateNumbersResponse(response); - return response; - } - /// public async Task UpdateANumberAsync(UpdateNumberRequest request, Credentials creds = null)