/// <summary>
        ///     Single verification allows you verify individual emails and gather additional information pertaining to the email.
        ///     See: "https://developers.neverbounce.com/v4.0/reference#single-check"
        /// </summary>
        /// <param name="model"> SingleRequestModel</param>
        /// <returns>SingleResponseModel</returns>
        public async Task <SingleResponseModel> Check(SingleRequestModel model)
        {
            var client = new NeverBounceHttpClient(_client, _apiKey, _host);
            var result = await client.MakeRequest("GET", "/single/check", model);

            return(JsonConvert.DeserializeObject <SingleResponseModel>(result));
        }
Example #2
0
        /// <summary>
        ///     This method calls the parse job end point
        ///     See: "https://developers.neverbounce.com/v4.0/reference#jobs-parse"
        /// </summary>
        /// <param name="model">JobParseRequestModel</param>
        /// <returns>JobParseResponseModel</returns>
        public async Task <JobParseResponseModel> Parse(JobParseRequestModel model)
        {
            var client = new NeverBounceHttpClient(_client, _apiKey, _host);
            var result = await client.MakeRequest("POST", "/jobs/parse", model);

            return(JsonConvert.DeserializeObject <JobParseResponseModel>(result));
        }
        /// <summary>
        ///     Allows you to confirm front end (Javascript Widget) verification results
        ///     See: "https://developers.neverbounce.com/v4.0/reference#widget-poe-confirm"
        /// </summary>
        /// <param name="model"> POEConfirmRequestModel</param>
        /// <returns>POEConfirmResponseModel</returns>
        public async Task <POEConfirmResponseModel> Confirm(POEConfirmRequestModel model)
        {
            var client = new NeverBounceHttpClient(_client, _apiKey, _host);
            var result = await client.MakeRequest("POST", "/poe/confirm", model);

            return(JsonConvert.DeserializeObject <POEConfirmResponseModel>(result));
        }
Example #4
0
        /// <summary>
        ///     This method calls the create job end point using supplied data for input
        ///     See: "https://developers.neverbounce.com/v4.0/reference#jobs-create"
        /// </summary>
        /// <param name="model">JobCreateRequestModel</param>
        /// <returns>JobCreateResponseModel</returns>
        public async Task <JobCreateResponseModel> CreateFromSuppliedData(JobCreateSuppliedDataRequestModel model)
        {
            var client = new NeverBounceHttpClient(_client, _apiKey, _host);
            var result = await client.MakeRequest("POST", "/jobs/create", model);

            return(JsonConvert.DeserializeObject <JobCreateResponseModel>(result));
        }
Example #5
0
        /// <summary>
        ///     This method calls the job download endpoint; this endpoint returns the
        ///     CSV data for the job
        ///     See: "https://developers.neverbounce.com/v4.0/reference#jobs-download"
        /// </summary>
        /// <param name="model">JobDownloadRequestModel</param>
        /// <returns>string</returns>
        public async Task <string> Download(JobDownloadRequestModel model)
        {
            var client = new NeverBounceHttpClient(_client, _apiKey, _host);

            client.SetAcceptedType("application/octet-stream");
            return(await client.MakeRequest("GET", "/jobs/download", model));
        }
        /// <summary>
        ///     Account Info method allow to programmatically check your account's balance and how many jobs are currently running
        ///     on your account.
        ///     See: "https://developers.neverbounce.com/v4.0/reference#account-info"
        /// </summary>
        /// <returns>AccountInfoResponseModel</returns>
        public async Task <AccountInfoResponseModel> Info()
        {
            var model  = new RequestModel();
            var client = new NeverBounceHttpClient(_client, _apiKey, _host);
            var result = await client.MakeRequest("GET", "/account/info", model);

            return(JsonConvert.DeserializeObject <AccountInfoResponseModel>(result));
        }
        public void TestHttpStatusCode500ErrorHandling()
        {
            var clientMock = new Mock <IHttpClient>();

            clientMock.Setup(http => http.GetRequestHeaders()).Returns(new HttpClient().DefaultRequestHeaders);
            clientMock.Setup(http => http.GetAsync(It.IsAny <Uri>()))
            .Returns(Task.FromResult(new HttpResponseMessage(HttpStatusCode.ServiceUnavailable)));

            var httpClient = new NeverBounceHttpClient(clientMock.Object, "fake_api_key");

            Assert.ThrowsAsync <GeneralException>(async() =>
                                                  await httpClient.MakeRequest("GET", "/500", new RequestModel()));
        }
        public void TestBadReferrerErrorHandling()
        {
            var clientMock      = new Mock <IHttpClient>();
            var responseMessage = new HttpResponseMessage(HttpStatusCode.OK);

            responseMessage.Content =
                new StringContent(
                    "{\"status\": \"bad_referrer\", \"message\": \"The originator of this request is not trusted\", \"execution_time\":100}");
            responseMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
            clientMock.Setup(http => http.GetRequestHeaders()).Returns(new HttpClient().DefaultRequestHeaders);
            clientMock.Setup(http => http.GetAsync(It.IsAny <Uri>())).Returns(Task.FromResult(responseMessage));

            var httpClient = new NeverBounceHttpClient(clientMock.Object, "fake_api_key");
            var resp       = Assert.ThrowsAsync <BadReferrerException>(async() =>
                                                                       await httpClient.MakeRequest("GET", "/500", new RequestModel()));
        }
        public void TestBadlyFormattedJsonHandling()
        {
            var clientMock      = new Mock <IHttpClient>();
            var responseMessage = new HttpResponseMessage(HttpStatusCode.OK);

            responseMessage.Content = new StringContent("{notvalid json}");
            responseMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
            clientMock.Setup(http => http.GetRequestHeaders()).Returns(new HttpClient().DefaultRequestHeaders);
            clientMock.Setup(http => http.GetAsync(It.IsAny <Uri>())).Returns(Task.FromResult(responseMessage));

            var httpClient = new NeverBounceHttpClient(clientMock.Object, "fake_api_key");
            var resp       = Assert.ThrowsAsync <GeneralException>(async() =>
                                                                   await httpClient.MakeRequest("GET", "/500", new RequestModel()));

            StringAssert.Contains("(Internal error)", resp.Message);
        }
        public void TestTempUnavailErrorHandling()
        {
            var clientMock      = new Mock <IHttpClient>();
            var responseMessage = new HttpResponseMessage(HttpStatusCode.OK);

            responseMessage.Content =
                new StringContent(
                    "{\"status\": \"temp_unavail\", \"message\": \"Something went wrong\", \"execution_time\":100}");
            responseMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
            clientMock.Setup(http => http.GetRequestHeaders()).Returns(new HttpClient().DefaultRequestHeaders);
            clientMock.Setup(http => http.GetAsync(It.IsAny <Uri>())).Returns(Task.FromResult(responseMessage));

            var httpClient = new NeverBounceHttpClient(clientMock.Object, "fake_api_key");
            var resp       = Assert.ThrowsAsync <GeneralException>(async() =>
                                                                   await httpClient.MakeRequest("GET", "/500", new RequestModel()));
        }
        public void TestMismatchedContentTypeThrowsError()
        {
            var clientMock      = new Mock <IHttpClient>();
            var responseMessage = new HttpResponseMessage(HttpStatusCode.OK);

            responseMessage.Content = new StringContent("Hello!");
            responseMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("text/csv");
            clientMock.Setup(http => http.GetRequestHeaders()).Returns(new HttpClient().DefaultRequestHeaders);
            clientMock.Setup(http => http.GetAsync(It.IsAny <Uri>())).Returns(Task.FromResult(responseMessage));

            var httpClient = new NeverBounceHttpClient(clientMock.Object, "fake_api_key");

            httpClient.SetAcceptedType("text/html");
            var resp = Assert.ThrowsAsync <GeneralException>(async() =>
                                                             await httpClient.MakeRequest("GET", "/", new RequestModel()));
        }
        public void TestMatchContentType()
        {
            var clientMock      = new Mock <IHttpClient>();
            var responseMessage = new HttpResponseMessage(HttpStatusCode.OK);

            responseMessage.Content = new StringContent("Hello!");
            responseMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html");
            clientMock.Setup(http => http.GetRequestHeaders()).Returns(new HttpClient().DefaultRequestHeaders);
            clientMock.Setup(http => http.GetAsync(It.IsAny <Uri>())).Returns(Task.FromResult(responseMessage));

            var httpClient = new NeverBounceHttpClient(clientMock.Object, "fake_api_key");

            httpClient.SetAcceptedType("text/html");
            var resp = httpClient.MakeRequest("GET", "/", new RequestModel()).Result;

            Assert.AreEqual("Hello!", resp);
        }
        public void TestAuthFailureHandling()
        {
            var clientMock      = new Mock <IHttpClient>();
            var responseMessage = new HttpResponseMessage(HttpStatusCode.OK);

            responseMessage.Content =
                new StringContent(
                    "{\"status\": \"auth_failure\", \"message\": \"The key provided is invalid\", \"execution_time\":100}");
            responseMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
            clientMock.Setup(http => http.GetRequestHeaders()).Returns(new HttpClient().DefaultRequestHeaders);
            clientMock.Setup(http => http.GetAsync(It.IsAny <Uri>())).Returns(Task.FromResult(responseMessage));

            var httpClient = new NeverBounceHttpClient(clientMock.Object, "fake_api_key");
            var resp       = Assert.ThrowsAsync <AuthException>(async() =>
                                                                await httpClient.MakeRequest("GET", "/500", new RequestModel()));

            StringAssert.Contains("The key provided is invalid", resp.Message);
            StringAssert.Contains("(auth_failure)", resp.Message);
        }
        public void TestToQueryStringSimple()
        {
            var clientMock = new Mock <IHttpClient>();

            clientMock.Setup(http => http.GetRequestHeaders()).Returns(new HttpClient().DefaultRequestHeaders);
            var httpClient = new NeverBounceHttpClient(clientMock.Object, "fake_api_key");

            var query = new SingleRequestModel();

            query.key          = "fake_api_key";
            query.email        = "*****@*****.**";
            query.timeout      = 3000;
            query.address_info = true;
            query.credits_info = false;

            var resp = httpClient.ToQueryString(query);

            Assert.AreEqual(
                "email=support%40neverbounce.com&address_info=1&credits_info=0&timeout=3000&key=fake_api_key", resp);
        }
        public void TestJsonUnmarshalling()
        {
            var clientMock      = new Mock <IHttpClient>();
            var responseMessage = new HttpResponseMessage(HttpStatusCode.OK);

            responseMessage.Content = new StringContent("{\"status\": \"success\", \"execution_time\":100}");
            responseMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
            clientMock.Setup(http => http.GetRequestHeaders()).Returns(new HttpClient().DefaultRequestHeaders);
            clientMock.Setup(http => http.GetAsync(It.IsAny <Uri>())).Returns(Task.FromResult(responseMessage));

            var httpClient = new NeverBounceHttpClient(clientMock.Object, "fake_api_key");
            var resp       = httpClient.MakeRequest("GET", "/", new RequestModel()).Result;


            Assert.AreEqual("{\"status\": \"success\", \"execution_time\":100}", resp);
            var token = JObject.Parse(resp);

            Assert.AreEqual("success", token.SelectToken("status").ToString());
            Assert.AreEqual(100, (int)token.SelectToken("execution_time"));
        }