public async Task UserEpisodeViewCreatesNewViewObjectWhenUserHasNotViewedBefore()
        {
            var episodes = new List <Episode>();
            var episode  = new Episode()
            {
                Webtoon = new Webtoon()
                {
                    TitleNumber = "123",
                    Id          = "test"
                },
                EpisodeNumber = "pesho",
                Id            = "gosho"
            };
            var mockEpisodesService = new Mock <IEpisodesService>();

            mockEpisodesService.Setup(x => x.GetEpisodeId(episode.Webtoon.TitleNumber, episode.EpisodeNumber)).Returns(episode.Id);

            var episodeViews         = new List <EpisodeView>();
            var mockEpisodeViewsRepo = new Mock <IEpisodesViewsRepository>();

            mockEpisodeViewsRepo.Setup(x => x.All()).Returns(episodeViews.AsQueryable());
            mockEpisodeViewsRepo.Setup(x => x.AddAsync(It.IsAny <EpisodeView>())).Callback((EpisodeView episodeView) => episodeViews.Add(episodeView));

            var service = new EpisodesViewsService(mockEpisodeViewsRepo.Object, mockEpisodesService.Object);

            await service.UserEpisodeView("123", "pesho", "ivan");

            Assert.Single(episodeViews);
            Assert.Equal("ivan", episodeViews.First().ApplicationUserId);
            Assert.Equal("gosho", episodeViews.First().EpisodeId);
            Assert.Equal(1, episodeViews.First().ViewCount);
        }
        public void EpisodeTotalViewsReturnsProperValue()
        {
            var episodes = new List <Episode>();
            var episode  = new Episode()
            {
                Webtoon = new Webtoon()
                {
                    TitleNumber = "123",
                    Id          = "test"
                },
                EpisodeNumber = "pesho",
                Id            = "gosho"
            };
            var mockEpisodesService = new Mock <IEpisodesService>();

            mockEpisodesService.Setup(x => x.GetEpisodeId(episode.Webtoon.TitleNumber, episode.EpisodeNumber)).Returns(episode.Id);

            var episodeViews = new List <EpisodeView>();

            episodeViews.Add(new EpisodeView()
            {
                EpisodeId         = "gosho",
                ApplicationUserId = "ivan",
                ViewCount         = 4,
                LastViewedOn      = DateTime.UtcNow,
            });
            var mockEpisodeViewsRepo = new Mock <IEpisodesViewsRepository>();

            mockEpisodeViewsRepo.Setup(x => x.All()).Returns(episodeViews.AsQueryable());

            var service = new EpisodesViewsService(mockEpisodeViewsRepo.Object, mockEpisodesService.Object);

            Assert.Equal(4, service.EpisodeTotalViews("123", "pesho"));
        }
        public async Task UserEpisodeViewDoesNotUpdateViewCountWhenUserHasViewedEpisodeInTheLast24Hours()
        {
            var episodes = new List <Episode>();
            var episode  = new Episode()
            {
                Webtoon = new Webtoon()
                {
                    TitleNumber = "123",
                    Id          = "test"
                },
                EpisodeNumber = "pesho",
                Id            = "gosho"
            };
            var mockEpisodesService = new Mock <IEpisodesService>();

            mockEpisodesService.Setup(x => x.GetEpisodeId(episode.Webtoon.TitleNumber, episode.EpisodeNumber)).Returns(episode.Id);

            var episodeViews = new List <EpisodeView>();

            episodeViews.Add(new EpisodeView()
            {
                EpisodeId         = "gosho",
                ApplicationUserId = "ivan",
                ViewCount         = 4,
                LastViewedOn      = DateTime.UtcNow,
            });
            var mockEpisodeViewsRepo = new Mock <IEpisodesViewsRepository>();

            mockEpisodeViewsRepo.Setup(x => x.All()).Returns(episodeViews.AsQueryable());
            mockEpisodeViewsRepo.Setup(x => x.AddAsync(It.IsAny <EpisodeView>())).Callback((EpisodeView episodeView) => episodeViews.Add(episodeView));

            var service = new EpisodesViewsService(mockEpisodeViewsRepo.Object, mockEpisodesService.Object);

            await service.UserEpisodeView("123", "pesho", "ivan");

            Assert.Single(episodeViews);
            Assert.Equal("ivan", episodeViews.First().ApplicationUserId);
            Assert.Equal("gosho", episodeViews.First().EpisodeId);
            Assert.Equal(4, episodeViews.First().ViewCount);
        }