public async Task ItShouldCallServices() { this.timestampCreator.Setup(v => v.Now()).Returns(Now); this.deleteTestUserAccounts.Setup(v => v.ExecuteAsync(ExpectedEndTime)).Returns(Task.FromResult(0)).Verifiable(); var files = new List <OrphanedFileData> { new OrphanedFileData(FileId.Random(), ChannelId.Random(), "p1"), new OrphanedFileData(FileId.Random(), ChannelId.Random(), "p2"), }; this.getFilesEligibleForGarbageCollection.Setup(v => v.ExecuteAsync(ExpectedEndTime)).ReturnsAsync(files); this.deleteBlobsForFile.Setup(v => v.ExecuteAsync(files[0])).Returns(Task.FromResult(0)).Verifiable(); this.deleteFileDbStatement.Setup(v => v.ExecuteAsync(files[0].FileId)).Returns(Task.FromResult(0)).Verifiable(); this.deleteBlobsForFile.Setup(v => v.ExecuteAsync(files[1])).Returns(Task.FromResult(0)).Verifiable(); this.deleteFileDbStatement.Setup(v => v.ExecuteAsync(files[1].FileId)).Returns(Task.FromResult(0)).Verifiable(); this.deleteOrphanedBlobContainers.Setup(v => v.ExecuteAsync(this.logger.Object, this.keepAliveHandler.Object, ExpectedEndTime, CancellationToken.None)) .Returns(Task.FromResult(0)) .Verifiable(); this.keepAliveHandler.Setup(v => v.KeepAliveAsync()).Returns(Task.FromResult(0)); await this.target.ExecuteAsync(this.logger.Object, this.keepAliveHandler.Object, CancellationToken.None); this.deleteTestUserAccounts.Verify(); this.deleteBlobsForFile.Verify(); this.deleteFileDbStatement.Verify(); this.deleteOrphanedBlobContainers.Verify(); this.keepAliveHandler.Verify(v => v.KeepAliveAsync(), Times.Exactly(2)); }
public async Task WhenCancelled_ItShouldStopProcessing() { this.timestampCreator.Setup(v => v.Now()).Returns(Now); this.deleteTestUserAccounts.Setup(v => v.ExecuteAsync(ExpectedEndTime)).Returns(Task.FromResult(0)).Verifiable(); var files = new List <OrphanedFileData> { new OrphanedFileData(FileId.Random(), ChannelId.Random(), "p1"), new OrphanedFileData(FileId.Random(), ChannelId.Random(), "p2"), }; this.getFilesEligibleForGarbageCollection.Setup(v => v.ExecuteAsync(ExpectedEndTime)).ReturnsAsync(files); var cts = new CancellationTokenSource(); this.deleteBlobsForFile.Setup(v => v.ExecuteAsync(files[0])).Returns(Task.FromResult(0)).Callback <OrphanedFileData>(a => cts.Cancel()); this.deleteFileDbStatement.Setup(v => v.ExecuteAsync(files[0].FileId)).Returns(Task.FromResult(0)).Verifiable(); this.keepAliveHandler.Setup(v => v.KeepAliveAsync()).Returns(Task.FromResult(0)); await this.target.ExecuteAsync(this.logger.Object, this.keepAliveHandler.Object, cts.Token); this.keepAliveHandler.Verify(v => v.KeepAliveAsync(), Times.Exactly(1)); }
public async Task WhenDeletingNonExistantFile_ItShouldNotModifyTheDatabase() { await this.DatabaseTestAsync(async testDatabase => { target = new DeleteFileDbStatement(testDatabase); await this.CreateEntitiesAsync(testDatabase); await testDatabase.TakeSnapshotAsync(); await this.target.ExecuteAsync(FileId.Random()); return(ExpectedSideEffects.None); }); }
private async Task CreateEntitiesAsync(TestDatabaseContext testDatabase) { using (var databaseContext = testDatabase.CreateContext()) { // Create header file var blogId = BlogId.Random(); var headerImageFileId = FileId.Random(); await databaseContext.CreateTestBlogAsync(UserId.Value, blogId.Value, headerImageFileId.Value); var headerImageFile = databaseContext.Files.First(v => v.Id == headerImageFileId.Value); headerImageFile.UploadStartedDate = IncludedDate; var channelId = ChannelId.Random(); var channel = ChannelTests.UniqueEntity(Random); channel.BlogId = blogId.Value; channel.Blog = databaseContext.Blogs.First(v => v.Id == blogId.Value); channel.Id = channelId.Value; databaseContext.Channels.Add(channel); // Create profile image file var user = databaseContext.Users.First(v => v.Id == UserId.Value); var profileImageFileId = FileId.Random(); var profileImageFile = this.CreateTestFileWithExistingUserAsync(UserId.Value, profileImageFileId.Value, IncludedDate); databaseContext.Files.Add(profileImageFile); user.ProfileImageFileId = profileImageFileId.Value; // Create image post file. var post1 = PostTests.UniqueFileOrImage(Random); var imageFileId = FileId.Random(); var image = this.CreateTestFileWithExistingUserAsync(UserId.Value, imageFileId.Value, IncludedDate); databaseContext.Files.Add(image); post1.PreviewImageId = imageFileId.Value; post1.PreviewImage = image; post1.ChannelId = channelId.Value; post1.Channel = channel; databaseContext.Posts.Add(post1); var post1File = new PostFile(post1.Id, post1, imageFileId.Value, image); databaseContext.PostFiles.Add(post1File); // Create file post file. var post2 = PostTests.UniqueFileOrImage(Random); var fileFileId = FileId.Random(); var file = this.CreateTestFileWithExistingUserAsync(UserId.Value, fileFileId.Value, IncludedDate); databaseContext.Files.Add(file); post2.ChannelId = channelId.Value; post2.Channel = channel; databaseContext.Posts.Add(post2); var post2File = new PostFile(post2.Id, post2, fileFileId.Value, file); databaseContext.PostFiles.Add(post2File); // Create files excluded because of date. var lateFile1 = this.CreateTestFileWithExistingUserAsync(UserId.Value, FileId.Random().Value, EndDate); databaseContext.Files.Add(lateFile1); var lateFile2 = this.CreateTestFileWithExistingUserAsync(UserId.Value, FileId.Random().Value, Now); databaseContext.Files.Add(lateFile2); // Create orphaned files. var orphanedFile1 = this.CreateTestFileWithExistingUserAsync(UserId.Value, OrphanedFileId1.Value, IncludedDate); databaseContext.Files.Add(orphanedFile1); var orphanedFile2 = this.CreateTestFileWithExistingUserAsync(UserId.Value, OrphanedFileId2.Value, IncludedDate); databaseContext.Files.Add(orphanedFile2); await databaseContext.SaveChangesAsync(); } }