public void TestFailedAdvancedRequest()
        {
            //ARRANGE
            var expectedResponse = @"{
              ""status"": 4,
              ""status_message"":""invalid credentials""
            }";
            var expectedUri      = $"{ApiUrl}/ni/advanced/json?number=15555551212&api_key={ApiKey}&api_secret={ApiSecret}&";
            var request          = new AdvancedNumberInsightRequest {
                Number = "15555551212"
            };

            Setup(expectedUri, expectedResponse);
            //ACT
            var creds  = Request.Credentials.FromApiKeyAndSecret(ApiKey, ApiSecret);
            var client = new NexmoClient(creds);

            try
            {
                client.NumberInsightClient.GetNumberInsightAdvanced(request);
                //ASSERT
                Assert.True(false, "Auto fail because request returned without throwing exception");
            }
            catch (NumberInsights.NexmoNumberInsightResponseException ex)
            {
                //ASSERT
                Assert.Equal(4, ex.Response.Status);
                Assert.Equal("invalid credentials", ((AdvancedInsightsResponse)ex.Response).StatusMessage);
            }
        }
        public void Execute()
        {
            var VONAGE_API_KEY    = Environment.GetEnvironmentVariable("VONAGE_API_KEY") ?? "VONAGE_API_KEY";
            var VONAGE_API_SECRET = Environment.GetEnvironmentVariable("VONAGE_API_SECRET") ?? "VONAGE_API_SECRET";
            var INSIGHT_NUMBER    = Environment.GetEnvironmentVariable("INSIGHT_NUMBER") ?? "INSIGHT_NUMBER";

            var creds  = Credentials.FromApiKeyAndSecret(VONAGE_API_KEY, VONAGE_API_SECRET);
            var client = new VonageClient(creds);

            var request = new AdvancedNumberInsightRequest()
            {
                Number = INSIGHT_NUMBER
            };
            var response = client.NumberInsightClient.GetNumberInsightAdvanced(request);

            Console.WriteLine($"Advanced insights request status: {response.Status}");
        }
        public void TestAdvancedNIRequestSync(bool passCreds, bool kitchenSink)
        {//ARRANGE
            var expectedResponse = @"{
              ""status"": 0,
              ""status_message"": ""Success"",
              ""request_id"": ""aaaaaaaa-bbbb-cccc-dddd-0123456789ab"",
              ""international_format_number"": ""447700900000"",
              ""national_format_number"": ""07700 900000"",
              ""country_code"": ""GB"",
              ""country_code_iso3"": ""GBR"",
              ""country_name"": ""United Kingdom"",
              ""country_prefix"": ""44"",
              ""request_price"": ""0.04000000"",
              ""refund_price"": ""0.01500000"",
              ""remaining_balance"": ""1.23456789"",
              ""current_carrier"": {
                ""network_code"": ""12345"",
                ""name"": ""Acme Inc"",
                ""country"": ""GB"",
                ""network_type"": ""mobile""
              },
              ""original_carrier"": {
                ""network_code"": ""12345"",
                ""name"": ""Acme Inc"",
                ""country"": ""GB"",
                ""network_type"": ""mobile""
              },
              ""ported"": ""not_ported"",
              ""roaming"": {
                            ""status"": ""roaming"",
                ""roaming_country_code"": ""US"",
                ""roaming_network_code"": ""12345"",
                ""roaming_network_name"": ""Acme Inc""
              },
              ""caller_identity"": {
                            ""caller_type"": ""consumer"",
                ""caller_name"": ""John Smith"",
                ""first_name"": ""John"",
                ""last_name"": ""Smith""
              },
              ""caller_name"": ""John Smith"",
              ""last_name"": ""Smith"",
              ""first_name"": ""John"",
              ""caller_type"": ""consumer"",
              ""lookup_outcome"": 0,
              ""lookup_outcome_message"": ""Success"",
              ""valid_number"": ""valid"",
              ""reachable"": ""reachable""
            }";

            var expectedUri = $"{ApiUrl}/ni/advanced/json";
            AdvancedNumberInsightRequest request;

            if (kitchenSink)
            {
                expectedUri += $"?ip={HttpUtility.UrlEncode("123.0.0.255")}&cnam=true&number=15555551212&country=GB&api_key={ApiKey}&api_secret={ApiSecret}&";
                request      = new AdvancedNumberInsightRequest {
                    Cnam = true, Country = "GB", Number = "15555551212", Ip = "123.0.0.255"
                };
            }
            else
            {
                expectedUri += $"?number=15555551212&api_key={ApiKey}&api_secret={ApiSecret}&";
                request      = new AdvancedNumberInsightRequest
                {
                    Number = "15555551212"
                };
            }

            Setup(expectedUri, expectedResponse);

            //ACT
            var creds  = Request.Credentials.FromApiKeyAndSecret(ApiKey, ApiSecret);
            var client = new NexmoClient(creds);
            AdvancedInsightsResponse response;

            if (passCreds)
            {
                response = client.NumberInsightClient.GetNumberInsightAdvanced(request, creds);
            }
            else
            {
                response = client.NumberInsightClient.GetNumberInsightAdvanced(request);
            }

            //ASSERT
            Assert.Equal(NumberReachability.reachable, response.Reachable);
            Assert.Equal(NumberValidity.valid, response.ValidNumber);
            Assert.Equal("Success", response.LookupOutcomeMessage);
            Assert.Equal(0, response.LookupOutcome);
            Assert.Equal("John", response.FirstName);
            Assert.Equal(CallerType.consumer, response.CallerType);
            Assert.Equal("Smith", response.LastName);
            Assert.Equal("John Smith", response.CallerName);
            Assert.Equal("Smith", response.CallerIdentity.LastName);
            Assert.Equal("John", response.CallerIdentity.FirstName);
            Assert.Equal("John Smith", response.CallerIdentity.CallerName);
            Assert.Equal(CallerType.consumer, response.CallerIdentity.CallerType);
            Assert.Equal("Acme Inc", response.Roaming.RoamingNetworkName);
            Assert.Equal("12345", response.Roaming.RoamingNetworkCode);
            Assert.Equal("US", response.Roaming.RoamingCountryCode);
            Assert.Equal(RoamingStatus.roaming, response.Roaming.Status);
            Assert.Equal(PortedStatus.not_ported, response.Ported);
            Assert.Equal("12345", response.OriginalCarrier.NetworkCode);
            Assert.Equal("Acme Inc", response.OriginalCarrier.Name);
            Assert.Equal("GB", response.OriginalCarrier.Country);
            Assert.Equal("mobile", response.OriginalCarrier.NetworkType);
            Assert.Equal(0, response.Status);
            Assert.Equal("Success", response.StatusMessage);
            Assert.Equal("aaaaaaaa-bbbb-cccc-dddd-0123456789ab", response.RequestId);
            Assert.Equal("447700900000", response.InternationalFormatNumber);
            Assert.Equal("07700 900000", response.NationalFormatNumber);
            Assert.Equal("GB", response.CountryCode);
            Assert.Equal("GBR", response.CountryCodeIso3);
            Assert.Equal("United Kingdom", response.CountryName);
            Assert.Equal("44", response.CountryPrefix);
            Assert.Equal("0.04000000", response.RequestPrice);
            Assert.Equal("0.01500000", response.RefundPrice);
            Assert.Equal("1.23456789", response.RemainingBalance);
            Assert.Equal("12345", response.CurrentCarrier.NetworkCode);
            Assert.Equal("Acme Inc", response.CurrentCarrier.Name);
            Assert.Equal("GB", response.CurrentCarrier.Country);
            Assert.Equal("mobile", response.CurrentCarrier.NetworkType);
        }