public void TestPostAsync_ValidInput_ReturnsLogData() { const string ExpectedDownloadUrl = "http://download.me"; var activity = new BackgroundActivityStatus { ActivityId = "activityId" }; var logDownload = new ExternalApiLogDownload(); var mockedNfieldConnection = new Mock <INfieldConnectionClient>(); var mockedHttpClient = CreateHttpClientMock(mockedNfieldConnection); mockedHttpClient.Setup(client => client.PostAsJsonAsync <ExternalApiLogDownload>( new Uri(ServiceAddress, "externalapilogdownload/"), logDownload)) .Returns(CreateTask(HttpStatusCode.OK, new StringContent(JsonConvert.SerializeObject(activity)))); mockedHttpClient .Setup(client => client.GetAsync(new Uri(ServiceAddress, $"BackgroundActivities/{activity.ActivityId}/"))) .Returns(CreateTask(HttpStatusCode.OK, new StringContent(JsonConvert.SerializeObject(new { Status = 2, DownloadDataUrl = ExpectedDownloadUrl })))); var target = new NfieldExternalApisLogService(); target.InitializeNfieldConnection(mockedNfieldConnection.Object); var result = target.PostAsync(logDownload).Result; Assert.Equal(ExpectedDownloadUrl, result); }
/// <summary> /// See <see cref="INfieldExternalApisLogService.PostAsync"/> /// </summary> public Task <string> PostAsync(ExternalApiLogDownload logDownloadRequest) { Ensure.ArgumentNotNull(logDownloadRequest, nameof(logDownloadRequest)); return(Client.PostAsJsonAsync(ExternalApiDownloadLogUri, logDownloadRequest) .ContinueWith(task => task.Result.Content.ReadAsStringAsync().Result) .ContinueWith(task => JsonConvert.DeserializeObject <BackgroundActivityStatus>(task.Result)) .ContinueWith(task => ConnectionClient.GetActivityResultAsync <string>(task.Result.ActivityId, "DownloadDataUrl").Result) .FlattenExceptions()); }