public void ReturnsListOfIds_WhenCategories_Present()
        {
            var options            = DbContextMock.GetOptions("ReturnsListOfIds_WhenCategories_Present");
            var searchedCategories = new List <string>()
            {
                "Test1", "Test2", "TestTest"
            };

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

                var categoryGetService = new CategoryQueries(context, fakeMapper);
                var result             = categoryGetService.TakeApprovedCategoryIds(searchedCategories);

                var test1FromDb = context.Categories
                                  .FirstOrDefault(x => x.CategoryName == "Test1");

                var test2FromDb = context.Categories
                                  .FirstOrDefault(x => x.CategoryName == "Test2");

                Assert.NotEmpty(result);
                Assert.Equal(2, result.Count());
                Assert.Contains(result, x => x == test1FromDb.Id);
                Assert.Contains(result, x => x == test2FromDb.Id);
            }
        }
        public void ReturnsEmptyListIfNoFavouriteVideosSaved()
        {
            var options = DbContextMock.GetOptions("ReturnsEmptyListIfNoFavouriteVideosSaved");

            using (var context = new BubaTubeDbContext(options))
            {
                context.Users.Add(new User()
                {
                    UserName = "******"
                });
                context.SaveChanges();

                var user = context.Users.First();

                var favoutiteVideoService = new FavouriteVideosQueries(context, fakeMapper);
                var userDto = new UserSearchDTO()
                {
                    Id = user.Id
                };

                var result = favoutiteVideoService.GetFavouriteVideos(userDto);

                Assert.Empty(result);
            }
        }
        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 void ReturnsRecentVideos()
        {
            var options = DbContextMock.GetOptions("ReturnsRecentVideos");

            using (var actContext = new BubaTubeDbContext(options))
            {
                actContext.Videos.AddRange(VideoMockData.GetApprovedVideos(10));
                actContext.Videos.AddRange(VideoMockData.GetDeletedVideos(10));

                actContext.SaveChanges();

                var videoQueries = new VideoQueries(actContext, fakeDTOMapper, fakePreviewDTOMapper);

                var resentVideos = videoQueries.MostResentVideos();

                Assert.Equal(10, resentVideos.Count);
            }
        }
        public void ReturnsEmptyList_WhenCategory_NotApproved()
        {
            var options            = DbContextMock.GetOptions("ReturnsEmptyList_WhenCategory_NotApproved");
            var searchedCategories = new List <string>()
            {
                "Test0"
            };

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

                var categoryGetService = new CategoryQueries(context, fakeMapper);
                var result             = categoryGetService.TakeApprovedCategoryIds(searchedCategories);

                Assert.Empty(result);
            }
        }
        public void ReturnsAllCategories()
        {
            var options            = DbContextMock.GetOptions("ReturnsAllCategories");
            var searchedCategories = new List <string>()
            {
                "Test0"
            };
            IList <int> result;

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

                var categoryGetService = new CategoryQueries(context, fakeMapper);
                result = categoryGetService.TakeAllCategoryIds(searchedCategories);

                Assert.Equal(1, result.Count);
            }
        }
        public void ReturnsListOfFavouriteVideosOfUser()
        {
            var options = DbContextMock.GetOptions("ReturnsListOfFavouriteVideosOfUser");

            using (var context = new BubaTubeDbContext(options))
            {
                context.Users.Add(new User()
                {
                    UserName = "******"
                });
                context.Videos.Add(new Video()
                {
                    Title    = "TestVideo",
                    FileName = "testVideo.mp4",
                    AuthorId = "123"
                });
                context.SaveChanges();

                var user  = context.Users.First();
                var video = context.Videos.First();
                context.UserVideo.Add(new UserVideo()
                {
                    UserId  = user.Id,
                    VideoId = video.Id
                });
                context.SaveChanges();

                var favoutiteVideoService = new FavouriteVideosQueries(context, fakeMapper);
                var userDto = new UserSearchDTO()
                {
                    Id = user.Id
                };

                var result = favoutiteVideoService.GetFavouriteVideos(userDto);

                Assert.NotEmpty(result);
                Assert.Single(result);
                Assert.Equal(video.Title, result.First().Title);
            }
        }
        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);
            }
        }
        public void ReturnsUsers_RegisteredInPeriod()
        {
            var options = DbContextMock.GetOptions("ReturnsUsers_RegisteredInPeriod ");
            IReadOnlyCollection <UserDTO> oneMonth;
            IReadOnlyCollection <UserDTO> threeMonth;
            IReadOnlyCollection <UserDTO> fourMonth;

            using (var context = new BubaTubeDbContext(options))
            {
                context.AddRange(UserMockData.GetListOfUserModels());
                context.SaveChanges();

                var userQueries = new UserQueries(context, fakeMapper);

                oneMonth   = userQueries.RegisterdInPeriod(DateTime.Now, DateTime.Now.AddDays(-1));
                threeMonth = userQueries.RegisterdInPeriod(DateTime.Now, DateTime.Now.AddMonths(-3));
                fourMonth  = userQueries.RegisterdInPeriod(DateTime.Now, DateTime.Now.AddMonths(-6));
            }

            Assert.Equal(0, oneMonth.Count);
            Assert.Equal(3, threeMonth.Count);
            Assert.Equal(6, fourMonth.Count);
        }
        public void ReturnsUsers_LastActivity()
        {
            var options = DbContextMock.GetOptions("ReturnsUsers_LastActivity");
            IReadOnlyCollection <UserDTO> lastOneMonth;
            IReadOnlyCollection <UserDTO> lastThreeMonth;
            IReadOnlyCollection <UserDTO> lastFourMonth;

            using (var context = new BubaTubeDbContext(options))
            {
                context.AddRange(UserMockData.GetListOfUserModels());
                context.SaveChanges();

                var userQueries = new UserQueries(context, fakeMapper);

                lastOneMonth   = userQueries.ByLastActivity(1);
                lastThreeMonth = userQueries.ByLastActivity(3);
                lastFourMonth  = userQueries.ByLastActivity(4);
            }

            Assert.Equal(1, lastOneMonth.Count);
            Assert.Equal(3, lastThreeMonth.Count);
            Assert.Equal(6, lastFourMonth.Count);
        }