public async Task DeleteVideo_FileDoesNotExist_InDatabase()
        {
            var options             = DbContextMock.GetOptions("DeleteVideo_FileDoesNotExist_InDatabase");
            var mockFile            = new Mock <IFormFile>();
            var mockFileCommands    = new Mock <IFileCommands>();
            var mockFileQueries     = new Mock <IFileQueries>();
            var mockCategoryQueries = new Mock <ICategoryQueries>();

            mockFileCommands
            .Setup(x => x.Delete("test"))
            .Returns(true);

            using (var context = new BubaTubeDbContext(options))
            {
                var uploadService = new VideoCommands(
                    context,
                    mockFileCommands.Object,
                    mockFileQueries.Object,
                    mockCategoryQueries.Object,
                    fakeMapper);

                bool isSuccess = await uploadService.Delete(1);

                Assert.False(isSuccess);
            }
        }
        public async Task DeleteVideo_FileDoesNotExist_OnFileSystem()
        {
            var options             = DbContextMock.GetOptions("DeleteVideo_FileDoesNotExist_OnFileSystem");
            var mockFile            = new Mock <IFormFile>();
            var mockFileCommands    = new Mock <IFileCommands>();
            var mockFileQueries     = new Mock <IFileQueries>();
            var mockCategoryQueries = new Mock <ICategoryQueries>();

            mockFileCommands
            .Setup(x => x.Delete("test"))
            .Returns(false);

            using (var context = new BubaTubeDbContext(options))
            {
                context.Videos.Add(new Video
                {
                    Title    = "test",
                    FileName = "test.mp4"
                });
                context.SaveChanges();

                int videoId = context.Videos.First().Id;

                var uploadService = new VideoCommands(
                    context,
                    mockFileCommands.Object,
                    mockFileQueries.Object,
                    mockCategoryQueries.Object,
                    fakeMapper);

                bool isSuccess = await uploadService.Delete(videoId);

                Assert.False(isSuccess);
            }
        }
        public async Task SavesPassedData()
        {
            var options                       = DbContextMock.GetOptions("SavesPassedData");
            var mockFile                      = new Mock <IFormFile>();
            var mockFileCommands              = new Mock <IFileCommands>();
            var mockFileQueries               = new Mock <IFileQueries>();
            var mockCategoryQueries           = new Mock <ICategoryQueries>();
            Func <VideoDTO, Video> fakeMapper = _ =>
                                                new Video
            {
                Title       = "testVideo",
                Description = "test",
                Likes       = 1,
                FileName    = @"Name.mp4"
            };
            var model      = this.GetVideoDto();
            var categories = new List <string>();

            mockCategoryQueries
            .Setup(mock => mock.TakeAllCategoryIds(categories))
            .Returns(new List <int>()
            {
                2
            });

            using (var actContext = new BubaTubeDbContext(options))
            {
                var uploadService = new VideoCommands(
                    actContext,
                    mockFileCommands.Object,
                    mockFileQueries.Object,
                    mockCategoryQueries.Object,
                    fakeMapper);

                await uploadService.Save(model, mockFile.Object);
            }

            using (var assertContext = new BubaTubeDbContext(options))
            {
                var savedModelInDb = assertContext.Videos.First();

                Assert.Equal(1, assertContext.Videos.Count());
                Assert.Equal(model.Title, savedModelInDb.Title);
                Assert.Equal(model.Description, savedModelInDb.Description);
                Assert.Equal(model.FileName, savedModelInDb.FileName);
            }
        }
        public async Task AddsListOfCategories()
        {
            var options             = DbContextMock.GetOptions("AddsListOfCategories");
            var mockFile            = new Mock <IFormFile>();
            var mockFileCommands    = new Mock <IFileCommands>();
            var mockFileQueries     = new Mock <IFileQueries>();
            var mockCategoryQueries = new Mock <ICategoryQueries>();
            var categories          = new List <string>()
            {
                "Test1"
            };

            mockCategoryQueries
            .Setup(mock => mock.TakeAllCategoryIds(categories))
            .Returns(new List <int>()
            {
                2
            });

            using (var actContext = new BubaTubeDbContext(options))
            {
                var model = this.GetVideoDto();
                model.Categories = categories;

                var uploadVideoService = new VideoCommands(
                    actContext,
                    mockFileCommands.Object,
                    mockFileQueries.Object,
                    mockCategoryQueries.Object,
                    fakeMapper);

                await uploadVideoService.Save(model, mockFile.Object);
            }

            using (var assertContext = new BubaTubeDbContext(options))
            {
                Assert.Equal(2, assertContext.VideoCategory.First().CategoryId);
                Assert.Equal(1, assertContext.VideoCategory.Count());
            }
        }
        public async Task ApprovesVideo()
        {
            var options             = DbContextMock.GetOptions("ApprovesVideo");
            var mockFile            = new Mock <IFormFile>();
            var mockFileCommands    = new Mock <IFileCommands>();
            var mockFileQueries     = new Mock <IFileQueries>();
            var mockCategoryQueries = new Mock <ICategoryQueries>();

            using (var actContext = new BubaTubeDbContext(options))
            {
                actContext.Videos.Add(new Video
                {
                    Title    = "test",
                    FileName = "test"
                });
                actContext.SaveChanges();

                int videoId = actContext.Videos.First().Id;

                var uploadService = new VideoCommands(
                    actContext,
                    mockFileCommands.Object,
                    mockFileQueries.Object,
                    mockCategoryQueries.Object,
                    fakeMapper);

                bool isSuccess = await uploadService.Approve(videoId);

                Assert.True(isSuccess);
            }

            using (var assertContext = new BubaTubeDbContext(options))
            {
                Video video = assertContext.Videos
                              .First();

                Assert.True(video.IsApproved);
            }
        }
        public async Task CreatesNavigationProperty_VideoCategory()
        {
            var options             = DbContextMock.GetOptions("CreatesNavigationProperty_VideoCategory");
            var mockFile            = new Mock <IFormFile>();
            var mockFileCommands    = new Mock <IFileCommands>();
            var mockFileQueries     = new Mock <IFileQueries>();
            var mockCategoryQueries = new Mock <ICategoryQueries>();
            var categories          = new List <string>();

            using (var context = new BubaTubeDbContext(options))
            {
                context.Categories.AddRange(CategoryMockData.GetListOfCategoryModels());
                context.SaveChanges();

                var categoryFromDb = context.Categories
                                     .First(x => x.IsАpproved == true);
                mockCategoryQueries
                .Setup(mock => mock.TakeAllCategoryIds(categories))
                .Returns(new List <int>()
                {
                    categoryFromDb.Id
                });

                var model = this.GetVideoDto();
                model.Categories = categories;

                var uploadVideoService = new VideoCommands(
                    context,
                    mockFileCommands.Object,
                    mockFileQueries.Object,
                    mockCategoryQueries.Object,
                    fakeMapper);

                await uploadVideoService.Save(model, mockFile.Object);

                Assert.Equal(categoryFromDb.CategoryName,
                             context.VideoCategory.First().Category.CategoryName);
            }
        }