コード例 #1
0
        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));
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        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();
            }
        }