public void TestHandleDownloadResponseStream() { using (ShimsContext.Create()) { var transactionLog = new TransactionLogType(); var transactionLogXml = GetXml(transactionLog); var zipFileName = String.Format("{0}", SevisBatchZipArchiveHandler.TRANSACTION_LOG_FILE_NAME); var entry = new System.IO.Compression.Fakes.ShimZipArchiveEntry { NameGet = () => zipFileName, Open = () => { var stream = new MemoryStream(); var writer = new StreamWriter(stream, Encoding.Unicode); writer.Write(transactionLogXml); writer.Flush(); stream.Seek(0, SeekOrigin.Begin); return(stream); } }; var entries = new List <ZipArchiveEntry>(); entries.Add(entry); var readonlyEntries = new ReadOnlyCollection <ZipArchiveEntry>(entries); var zipArchive = new System.IO.Compression.Fakes.ShimZipArchive { EntriesGet = () => readonlyEntries, }; var memoryStream = new MemoryStream(); Func <Stream, ZipArchive> zipArchiveDelegate = (s) => { Assert.IsTrue(Object.ReferenceEquals(memoryStream, s)); return(zipArchive); }; var user = new User(1); var dto = new SevisBatchProcessingDTO(); dto.BatchId = "batchId"; var handler = new ZipArchiveSevisApiResponseHandler(service.Object, zipArchiveDelegate); Action <User, string, string, IDS2019FileProvider> callback = (u, batchId, xml, fileProvider) => { Assert.IsTrue(Object.ReferenceEquals(u, user)); Assert.IsNotNull(fileProvider); Assert.IsInstanceOfType(fileProvider, typeof(SevisBatchZipArchiveHandler)); Assert.AreEqual(transactionLogXml, xml); Assert.AreEqual(dto.BatchId, batchId); }; service.Setup(x => x.ProcessTransactionLog(It.IsAny <User>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <IDS2019FileProvider>())) .Callback(callback); handler.HandleDownloadResponseStream(user, dto, memoryStream); } }