public void Execute()
        {
            var VONAGE_APPLICATION_ID   = Environment.GetEnvironmentVariable("VONAGE_APPLICATION_ID") ?? "VONAGE_APPLICATION_ID";
            var VONAGE_PRIVATE_KEY_PATH = Environment.GetEnvironmentVariable("VONAGE_PRIVATE_KEY_PATH") ?? "VONAGE_PRIVATE_KEY_PATH";

            var credentials = Credentials.FromAppIdAndPrivateKeyPath(VONAGE_APPLICATION_ID, VONAGE_PRIVATE_KEY_PATH);
            var client      = new VonageClient(credentials);

            var DATE_END   = DateTime.UtcNow;
            var DATE_START = DATE_END.AddDays(-1);
            var request    = new CallSearchFilter()
            {
                DateStart = DATE_START, DateEnd = DATE_END
            };

            var response = client.VoiceClient.GetCalls(request);

            Console.WriteLine(response.Count);
        }
        public void TestListCalls(bool passCreds, bool kitchenSink)
        {
            var expectedResponse = @"{
                  ""count"": 100,
                  ""page_size"": 10,
                  ""record_index"": 0,
                  ""_links"": {
                                ""self"": {
                                    ""href"": ""/calls?page_size=10&record_index=20&order=asc""
                                }
                            },
                  ""_embedded"": {
                                ""calls"": [
                                  {
                        ""_links"": {
                          ""self"": {
                            ""href"": ""/calls/63f61863-4a51-4f6b-86e1-46edebcf9356""
                          }
                        },
                        ""uuid"": ""63f61863-4a51-4f6b-86e1-46edebcf9356"",
                        ""conversation_uuid"": ""CON-f972836a-550f-45fa-956c-12a2ab5b7d22"",
                        ""to"":
                          {
                            ""type"": ""phone"",
                            ""number"": ""447700900000""
                          }
                        ,
                        ""from"": 
                          {
                            ""type"": ""phone"",
                            ""number"": ""447700900001""
                          }
                        ,
                        ""status"": ""started"",
                        ""direction"": ""outbound"",
                        ""rate"": ""0.39"",
                        ""price"": ""23.40"",
                        ""duration"": ""60"",
                        ""start_time"": ""2020-01-01 12:00:00"",
                        ""end_time"": ""2020-01-01 12:00:00"",
                        ""network"": ""65512""
                      }
                    ]
                  }
                }";

            CallSearchFilter filter;
            string           expectedUri;

            if (kitchenSink)
            {
                expectedUri = $"{ApiUrl}/v1/calls?status=started&date_start={HttpUtility.UrlEncode("2016-11-14T07:45:14Z").ToUpper()}&date_end={HttpUtility.UrlEncode("2016-11-14T07:45:14Z").ToUpper()}&page_size=10&record_index=0&order=asc&conversation_uuid=CON-f972836a-550f-45fa-956c-12a2ab5b7d22&";
                filter      = new CallSearchFilter
                {
                    ConversationUuid = "CON-f972836a-550f-45fa-956c-12a2ab5b7d22",
                    DateStart        = DateTime.Parse("2016-11-14T07:45:14"),
                    DateEnd          = DateTime.Parse("2016-11-14T07:45:14"),
                    PageSize         = 10,
                    RecordIndex      = 0,
                    Order            = "asc",
                    Status           = "started"
                };
            }
            else
            {
                expectedUri = $"{ApiUrl}/v1/calls";
                filter      = new CallSearchFilter();
            }

            Setup(expectedUri, expectedResponse);

            var creds  = Request.Credentials.FromAppIdAndPrivateKey(AppId, PrivateKey);
            var client = new NexmoClient(creds);

            Common.PageResponse <CallList> callList;
            if (passCreds)
            {
                callList = client.VoiceClient.GetCalls(filter, creds);
            }
            else
            {
                callList = client.VoiceClient.GetCalls(filter);
            }

            var callRecord = callList.Embedded.Calls[0];

            Assert.True(100 == callList.Count);
            Assert.True(10 == callList.PageSize);
            Assert.True(0 == callList.PageIndex);
            Assert.Equal("/calls?page_size=10&record_index=20&order=asc", callList.Links.Self.Href);
            Assert.Equal("/calls/63f61863-4a51-4f6b-86e1-46edebcf9356", callRecord.Links.Self.Href);
            Assert.Equal("63f61863-4a51-4f6b-86e1-46edebcf9356", callRecord.Uuid);
            Assert.Equal("CON-f972836a-550f-45fa-956c-12a2ab5b7d22", callRecord.ConversationUuid);
            Assert.Equal("447700900000", callRecord.To.Number);
            Assert.Equal("phone", callRecord.To.Type);
            Assert.Equal("phone", callRecord.From.Type);
            Assert.Equal("447700900001", callRecord.From.Number);
            Assert.Equal("started", callRecord.Status);
            Assert.Equal("outbound", callRecord.Direction);
            Assert.Equal("0.39", callRecord.Rate);
            Assert.Equal("23.40", callRecord.Price);
            Assert.Equal("60", callRecord.Duration);
            Assert.Equal(DateTime.ParseExact("2020-01-01T12:00:00.000Z", "yyyy-MM-dd'T'HH:mm:ss.fff'Z'", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal |
                                             DateTimeStyles.AdjustToUniversal), (callRecord.StartTime));
            Assert.Equal(DateTime.ParseExact("2020-01-01T12:00:00.000Z", "yyyy-MM-dd'T'HH:mm:ss.fff'Z'", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal |
                                             DateTimeStyles.AdjustToUniversal), (callRecord.EndTime));
        }