public async Task When_response_is_successful_Should_return_correct_result() { // arrange var translatorResponse = new TranslatorResponse { SuccessfulTranslationsCount = new SuccessfulTranslationsCount { Total = 1 }, Contents = new TranslationContents { OriginalText = "text", TranslatedText = "translated text" } }; var restCLientMock = new Mock <IRestClient>(); restCLientMock .Setup(x => x.ExecuteAsync(It.IsAny <IRestRequest>(), It.IsAny <CancellationToken>())) .ReturnsAsync(new RestResponse { StatusCode = HttpStatusCode.OK, Content = JsonConvert.SerializeObject(translatorResponse), ResponseStatus = ResponseStatus.Completed }); var client = new FunTranslationsApiClient("http://localhost", restCLientMock.Object); // act var result = await client.GetTranslation("text"); // assert result.Should().Be("translated text"); }
public async static Task <TranslationData> Translate(string data, Language toLang) { System.Object[] body = new System.Object[] { new { Text = data } }; var requestBody = JsonConvert.SerializeObject(body); string uri = host + path + params_ + LanguageLookup.Languages[(int)toLang]; using (var client = new HttpClient()) using (var request = new HttpRequestMessage()) { request.Method = HttpMethod.Post; request.RequestUri = new Uri(uri); request.Content = new StringContent(requestBody, Encoding.UTF8, "application/json"); request.Headers.Add("Ocp-Apim-Subscription-Key", key); var response = await client.SendAsync(request); var responseBody = await response.Content.ReadAsStringAsync(); // remove [] surrounding json response TranslatorResponse result = JsonConvert.DeserializeObject <TranslatorResponse>(responseBody.Substring(1, responseBody.Length - 2)); TranslationData translationData = new TranslationData(); translationData.SecondaryLanguage = LanguageLookup.FindLanguage(result.Translations[0].To); translationData.SecondaryText = result.Translations[0].Text; translationData.PrimaryLanguage = LanguageLookup.FindLanguage(result.DetectedLanguage.Language); translationData.PrimaryText = data; return(translationData); } }