public void TestGet()
        {
            string orderId = "1234";

            using (var server = new HttpServer(new RequestHandler
            {
                EstimatedMethod = "GET",
                EstimatedPathAndQuery = $"/v1.0/accounts/{Helper.AccountId}/tnoptions/{orderId}",
                ContentToSend = new StringContent(TestXmlStrings.getTnOptions, Encoding.UTF8, "application/xml")
            }))
            {
                var client = Helper.CreateClient();
                var result = TnOptions.Get(client, orderId).Result;
                if (server.Error != null)
                {
                    throw server.Error;
                }

                Assert.IsNotNull(result);
                Assert.AreEqual("14", result.AccountId);
                Assert.AreEqual("2016-01-15T11:22:58.789Z", result.OrderCreateDate);
                Assert.AreEqual("jbm", result.CreatedByUser);
                Assert.AreEqual("409033ee-88ec-43e3-85f3-538f30733963", result.OrderId);
                Assert.AreEqual("2016-01-15T11:22:58.969Z", result.LastModifiedDate);
                Assert.AreEqual("COMPLETE", result.ProcessingStatus);
                Assert.AreEqual(3, result.TnOptionGroups.Count);
                Assert.AreEqual("on", result.TnOptionGroups[0].CallingNameDisplay);
                Assert.AreEqual("on", result.TnOptionGroups[0].Sms);
                Assert.AreEqual("2174101601", result.TnOptionGroups[0].TelephoneNumbers[0]);
                Assert.AreEqual("sip:[email protected]:5060", result.TnOptionGroups[2].FinalDestinationURI);
                Assert.AreEqual("2174101601", result.Warnings[0].TelephoneNumber);
                Assert.AreEqual("SMS is already Enabled or number is in processing.", result.Warnings[0].Description);
            }
        }
        public void TestListWithSummary()
        {
            using (var server = new HttpServer(new RequestHandler
            {
                EstimatedMethod = "GET",
                EstimatedPathAndQuery = $"/v1.0/accounts/{Helper.AccountId}/tnoptions?status=9199918388",
                ContentToSend = new StringContent(TestXmlStrings.listTnOptionsSummary, Encoding.UTF8, "application/xml")
            }))
            {
                var client = Helper.CreateClient();
                var result = TnOptions.List(client, new Dictionary <string, Object>
                {
                    { "status", "9199918388" }
                }).Result;
                if (server.Error != null)
                {
                    throw server.Error;
                }

                Assert.IsNotNull(result);
                Assert.AreEqual(2, result.TotalCount);
                Assert.AreEqual(2, result.TnOptionOrderSummaryList.Count);
                Assert.AreEqual("14", result.TnOptionOrderSummaryList[0].AccountId);
                Assert.AreEqual(2, result.TnOptionOrderSummaryList[0].CountOfTNs);
                Assert.AreEqual("jbm", result.TnOptionOrderSummaryList[0].UserId);
                Assert.AreEqual("2016-01-15T12:01:14.363Z", result.TnOptionOrderSummaryList[0].LastModifiedDate);
                Assert.AreEqual("2016-01-15T12:01:14.324Z", result.TnOptionOrderSummaryList[0].OrderDate);
                Assert.AreEqual("tn_option", result.TnOptionOrderSummaryList[0].OrderType);
                Assert.AreEqual("FAILED", result.TnOptionOrderSummaryList[0].OrderStatus);
                Assert.AreEqual("ddbdc72e-dc27-490c-904e-d0c11291b095", result.TnOptionOrderSummaryList[0].OrderId);
            }
        }
        public void TestListNoError()
        {
            using (var server = new HttpServer(new RequestHandler
            {
                EstimatedMethod = "GET",
                EstimatedPathAndQuery = $"/v1.0/accounts/{Helper.AccountId}/tnoptions?status=9199918388",
                ContentToSend = new StringContent(TestXmlStrings.listTnOptionsNoError, Encoding.UTF8, "application/xml")
            }))
            {
                var            client = Helper.CreateClient();
                TnOptionOrders result = null;
                try
                {
                    result = TnOptions.List(client, new Dictionary <string, Object>
                    {
                        { "status", "9199918388" }
                    }).Result;
                }
                catch (Exception ex)
                {
                    Assert.IsNull(ex, "No Error should be thrown");
                }
                if (server.Error != null)
                {
                    throw server.Error;
                }

                Assert.IsNotNull(result);
                Assert.AreEqual(2, result.TotalCount);
                Assert.AreEqual(2, result.TnOptionOrderList.Count);
                Assert.AreEqual("14", result.TnOptionOrderList[0].AccountId);
                Assert.AreEqual("2016-01-15T12:01:14.324Z", result.TnOptionOrderList[0].OrderCreateDate);
                Assert.AreEqual("jbm", result.TnOptionOrderList[0].CreatedByUser);
                Assert.AreEqual("ddbdc72e-dc27-490c-904e-d0c11291b095", result.TnOptionOrderList[0].OrderId);
                Assert.AreEqual("2016-01-15T12:01:14.363Z", result.TnOptionOrderList[0].LastModifiedDate);
                Assert.AreEqual("FAILED", result.TnOptionOrderList[0].ProcessingStatus);
                Assert.AreEqual(2, result.TnOptionOrderList[0].TnOptionGroups.Count);
            }
        }
        public void TestList()
        {
            using (var server = new HttpServer(new RequestHandler
            {
                EstimatedMethod = "GET",
                EstimatedPathAndQuery = $"/v1.0/accounts/{Helper.AccountId}/tnoptions?status=9199918388",
                ContentToSend = new StringContent(TestXmlStrings.listTnOptions, Encoding.UTF8, "application/xml")
            }))
            {
                var            client = Helper.CreateClient();
                TnOptionOrders result = null;
                try
                {
                    result = TnOptions.List(client, new Dictionary <string, Object>
                    {
                        { "status", "9199918388" }
                    }).Result;
                    throw new Exception("Should have found error");
                } catch (Exception ex)
                {
                    Assert.IsNotNull(ex);
                    if (ex.InnerException is BandwidthIrisException)
                    {
                        var exInner = (BandwidthIrisException)ex.InnerException;
                        Console.WriteLine(exInner.Message); //"Telephone number is not available"
                        Console.WriteLine(exInner.Body);
                    }
                }
                if (server.Error != null)
                {
                    throw server.Error;
                }

                Assert.IsNull(result);
            }
        }
        public void TestCreate()
        {
            var order = new TnOptionOrder
            {
                CustomerOrderId = "customerOrderId",
                TnOptionGroups  = new List <TnOptionGroup>
                {
                    new TnOptionGroup {
                        PortOutPasscode  = "a1b2c3",
                        TelephoneNumbers = new List <string>
                        {
                            "2018551020",
                            "2018551025"
                        }
                    },
                    new TnOptionGroup {
                        Sms = "on",
                        TelephoneNumbers = new List <string>
                        {
                            "2018551020",
                            "2018551025"
                        }
                    },
                    new TnOptionGroup {
                        CallForward      = "6042661720",
                        TelephoneNumbers = new List <string>
                        {
                            "2018551020",
                            "2018551025"
                        }
                    }
                }
            };

            using (var server = new HttpServer(new RequestHandler
            {
                EstimatedMethod = "POST",
                EstimatedPathAndQuery = $"/v1.0/accounts/{Helper.AccountId}/tnoptions",
                ContentToSend = new StringContent(TestXmlStrings.createTnOptionsResponse, Encoding.UTF8, "application/xml"),
                EstimatedContent = @"<?xml version=""1.0"" encoding=""utf-8""?>
<TnOptionOrder xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"">
  <CustomerOrderId>customerOrderId</CustomerOrderId>
  <TnOptionGroups>
    <TnOptionGroup>
      <PortOutPasscode>a1b2c3</PortOutPasscode>
      <TelephoneNumbers>
        <TelephoneNumber>2018551020</TelephoneNumber>
        <TelephoneNumber>2018551025</TelephoneNumber>
      </TelephoneNumbers>
    </TnOptionGroup>
    <TnOptionGroup>
      <Sms>on</Sms>
      <TelephoneNumbers>
        <TelephoneNumber>2018551020</TelephoneNumber>
        <TelephoneNumber>2018551025</TelephoneNumber>
      </TelephoneNumbers>
    </TnOptionGroup>
    <TnOptionGroup>
      <CallForward>6042661720</CallForward>
      <TelephoneNumbers>
        <TelephoneNumber>2018551020</TelephoneNumber>
        <TelephoneNumber>2018551025</TelephoneNumber>
      </TelephoneNumbers>
    </TnOptionGroup>
  </TnOptionGroups>
</TnOptionOrder>"
            }))
            {
                var client = Helper.CreateClient();
                var result = TnOptions.Create(client, order).Result;
                if (server.Error != null)
                {
                    throw server.Error;
                }

                Assert.IsNotNull(result.TnOptionOrder);
                Assert.AreEqual("2016-01-15T12:01:14.324Z", result.TnOptionOrder.OrderCreateDate);
                Assert.AreEqual("14", result.TnOptionOrder.AccountId);
                Assert.AreEqual("jbm", result.TnOptionOrder.CreatedByUser);
                Assert.AreEqual("ddbdc72e-dc27-490c-904e-d0c11291b095", result.TnOptionOrder.OrderId);
                Assert.AreEqual("2016-01-15T12:01:14.324Z", result.TnOptionOrder.LastModifiedDate);
                Assert.AreEqual("RECEIVED", result.TnOptionOrder.ProcessingStatus);
                Assert.IsNotNull(result.TnOptionOrder.TnOptionGroups);
                Assert.AreEqual(2, result.TnOptionOrder.TnOptionGroups.Count);
            }
        }