public async Task Run_ReturnsExpectedResult() { var now = DateTimeOffset.Now; _nowUtc.Setup(s => s.Invoke()) .Returns(now); _referenceDataResponse.Setup(s => s.Invoke(It.IsAny <HttpRequestMessage>(), It.IsAny <CancellationToken>())) .Returns <HttpRequestMessage, CancellationToken>(async(r, ct) => new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(await File.ReadAllTextAsync("Integration/fechoices.json")) }); _providerService.Setup(s => s.GetActiveProvidersAsync()) .Returns(async() => JsonConvert.DeserializeObject <IEnumerable <Provider> >(await File.ReadAllTextAsync("Integration/providers.json"))); _cosmosDbHelper.Setup(s => s.GetLiveApprenticeships(It.IsAny <DocumentClient>(), It.IsAny <string>())) .Returns(() => JsonConvert.DeserializeObject <List <Apprenticeship> >(File.ReadAllText("Integration/apprenticeships.json"))); var blobClient = new Mock <BlobClient>(); var blobLeaseClient = new Mock <BlobLeaseClient>(); var blobBytes = default(byte[]); blobClient.Setup(s => s.ExistsAsync(It.IsAny <CancellationToken>())) .ReturnsAsync(() => new MockResponse <bool>(true)); blobLeaseClient.Setup(s => s.AcquireAsync(It.IsAny <TimeSpan>(), It.IsAny <RequestConditions>(), It.IsAny <CancellationToken>())) .ReturnsAsync(() => new MockResponse <BlobLease>(BlobsModelFactory.BlobLease(new ETag(Guid.NewGuid().ToString()), DateTimeOffset.UtcNow, Guid.NewGuid().ToString()))); _blobStorageClient.Setup(s => s.GetBlobClient(It.Is <string>(blobName => blobName == new ExportKey(now)))) .Returns(blobClient.Object); _blobStorageClient.Setup(s => s.GetBlobLeaseClient(blobClient.Object, It.IsAny <string>())) .Returns(blobLeaseClient.Object); blobClient.Setup(s => s.UploadAsync(It.IsAny <Stream>(), It.IsAny <BlobHttpHeaders>(), It.IsAny <IDictionary <string, string> >(), It.IsAny <BlobRequestConditions>(), It.IsAny <IProgress <long> >(), It.IsAny <AccessTier?>(), It.IsAny <StorageTransferOptions>(), It.IsAny <CancellationToken>())) .Callback <Stream, BlobHttpHeaders, IDictionary <string, string>, BlobRequestConditions, IProgress <long>, AccessTier?, StorageTransferOptions, CancellationToken>((s, h, m, c, p, a, t, ct) => { using (var ms = new MemoryStream()) { s.CopyTo(ms); blobBytes = ms.ToArray(); } }); blobClient.Setup(s => s.DownloadAsync(It.IsAny <CancellationToken>())) .ReturnsAsync(() => new MockResponse <BlobDownloadInfo>(BlobsModelFactory.BlobDownloadInfo(content: new MemoryStream(blobBytes)))); await _generateProviderExportFunction.Run(new TimerInfo(new ScheduleStub(), new ScheduleStatus()), NullLogger.Instance, CancellationToken.None); var result = await _getApprenticeshipAsProviderFunction.Run(new Mock <HttpRequest>().Object, NullLogger.Instance, CancellationToken.None); var contentResult = result.Should().BeOfType <FileStreamResult>().Subject; contentResult.Should().NotBeNull(); contentResult.ContentType.Should().Be("application/json"); using var sr = new StreamReader(contentResult.FileStream); var resultJToken = JToken.Parse(await sr.ReadToEndAsync()); var expectedResultJToken = JToken.Parse(await File.ReadAllTextAsync("Integration/expectedresults.json")); var resultIsExpected = JToken.DeepEquals(resultJToken, expectedResultJToken); if (!resultIsExpected) { // Output the results so we can investigate further await File.WriteAllTextAsync("Integration/results.json", JsonConvert.SerializeObject(resultJToken, Formatting.Indented)); } resultIsExpected.Should().BeTrue(); }