public void IsReadyToPost(int?numberOfClipsPerDay, string nowString, string stampString, bool enableNumberOfClipsPerDay, bool expectedResult)
        {
            var stamp           = DateTime.Parse(stampString);
            var existingHistory = new BroadcasterHistoryContainer {
                Stamp = stamp
            };
            var existingHistories = new List <BroadcasterHistoryContainer> {
                existingHistory
            };
            var yesterday = DateTime.Parse(nowString).AddDays(-1);
            var pendingBroadcasterConfig = new PendingBroadcasterConfig {
                NumberOfClipsPerDay = numberOfClipsPerDay, ExistingHistories = existingHistories
            };
            var broadcasters = new List <PendingBroadcasterConfig> {
                pendingBroadcasterConfig
            };
            var pendingChannelConfigContainer = new PendingChannelConfigContainer {
                Broadcasters = broadcasters
            };
            var channelContainers = new List <PendingChannelConfigContainer> {
                pendingChannelConfigContainer
            };
            var result = _Helper.ReadyToPostContainers(channelContainers, yesterday, enableNumberOfClipsPerDay);
            var anyReadyBroadcasters = result.SelectMany(s => s.Broadcasters).Any();

            Assert.That(anyReadyBroadcasters, Is.EqualTo(expectedResult));
        }
        public async Task SendMessagesAsync(string title, int views, float duration, string createdAtString, string clipUrl, decimal?utcHourOffset, string expectedMessage)
        {
            var createdAt         = DateTime.Parse(createdAtString);
            var channel           = new Mock <IMessageChannel>();
            var insertedContainer = new ClipHistoryContainer {
                ClipUrl = clipUrl, Title = title, Views = views, Duration = duration, CreatedAt = createdAt
            };
            var userMessage = new Mock <IUserMessage>();

            channel.Setup(s => s.SendMessageAsync(expectedMessage, It.IsAny <bool>(), It.IsAny <Embed>(), It.IsAny <RequestOptions>())).ReturnsAsync(userMessage.Object);
            var unseenClips = new List <ClipHistoryContainer> {
                insertedContainer
            };
            var pendingChannelConfigContainer = new PendingChannelConfigContainer {
                UtcHourOffset = utcHourOffset
            };
            var   unseenChannelClipsContainer = new UnseenChannelClipsContainer(pendingChannelConfigContainer, unseenClips);
            var   channelContainer            = new ChannelContainer(unseenChannelClipsContainer, channel.Object);
            var   task = _Helper.SendMessagesAsync(channelContainer);
            await task;

            /*
             * TODO
             *
             * VerifyAll fails the test when ran in the cloud:
             *
             *  Moq.MockException : The following setups on mock 'Mock<Discord.IMessageChannel:00000002>' were not matched.
             */
            //channel.VerifyAll();
            Assert.That(task.IsCompletedSuccessfully, Is.True);
        }
        public void ClipsWithMinViews(int clipViews, int?globalMinViews, int?minViews, int expectedResult)
        {
            const int id   = 123;
            var       clip = new Clip {
                Views = clipViews
            };
            var clips = new List <Clip> {
                clip
            };
            var pendingClipContainer = new PendingClipContainer {
                Clips = clips, MinViews = minViews
            };
            var pendingClipContainers = new List <PendingClipContainer> {
                pendingClipContainer
            };
            var pendingChannelConfigContainer = new PendingChannelConfigContainer {
                ChannelId = id, GlobalMinViews = globalMinViews
            };
            var channelClipsContainer = new ChannelClipsContainer {
                PendingChannelConfigContainer = pendingChannelConfigContainer, PendingClipContainers = pendingClipContainers
            };
            var channelClipsContainers = new List <ChannelClipsContainer> {
                channelClipsContainer
            };
            var results = _Helper.ClipsWithMinViews(channelClipsContainers);

            Assert.That(results.Count(s => s.PendingChannelConfigContainer.ChannelId == id), Is.EqualTo(expectedResult));
        }
예제 #4
0
        static bool IsAfterTimeBetweenClips(PendingChannelConfigContainer channelContainer, DateTime now)
        {
            if (!channelContainer.TimeSpanBetweenClipsAsTicks.HasValue)
            {
                return(true);
            }
            var histories = channelContainer.Broadcasters.SelectMany(s => s.ExistingHistories).ToList();

            if (!histories.Any())
            {
                return(true);
            }
            var latestHistoryStamp = histories.Max(s => s.Stamp);
            var timeSinceLastPost  = now - latestHistoryStamp;

            return(timeSinceLastPost.Ticks >= channelContainer.TimeSpanBetweenClipsAsTicks.Value);
        }
        public async Task BuildClipContainers()
        {
            const string broadcaster = "broadcaster";
            var          pendingBroadcasterConfig = new PendingBroadcasterConfig {
                Broadcaster = broadcaster
            };
            var broadcasters = new List <PendingBroadcasterConfig> {
                pendingBroadcasterConfig
            };
            var container = new PendingChannelConfigContainer {
                Broadcasters = broadcasters
            };
            var containers = new List <PendingChannelConfigContainer> {
                container
            };
            const string topClipsEndpoint = "https://twitch.tv/topclips";
            const string clientId         = "123";
            const string accept           = "application/json";
            var          channelEndpoint  = $"{topClipsEndpoint}&channel={broadcaster}";
            var          clip             = new Clip();
            var          clips            = new List <Clip> {
                clip
            };
            var getClipsResponse = new GetClipsResponse {
                Clips = clips
            };

            _TwitchWrapper.Setup(s => s.GetClips(channelEndpoint, clientId, accept)).ReturnsAsync(getClipsResponse);
            var results = await _Helper.BuildClipContainers(topClipsEndpoint, clientId, accept, containers);

            _TwitchWrapper.VerifyAll();
            Assert.That(results.Count, Is.EqualTo(1));
            var result = results[0];

            Assert.That(result.PendingChannelConfigContainer, Is.EqualTo(container));
            Assert.That(result.PendingClipContainers[0].Clips, Contains.Item(clip));
        }
예제 #6
0
 public ChannelClipsContainer(PendingChannelConfigContainer pendingChannelConfigContainer, List <PendingClipContainer> pendingClipContainers)
 {
     PendingChannelConfigContainer = pendingChannelConfigContainer;
     PendingClipContainers         = pendingClipContainers;
 }
 public UnseenChannelClipsContainer(PendingChannelConfigContainer pendingChannelConfigContainer, List <ClipHistoryContainer> unseenClips)
 {
     PendingChannelConfigContainer = pendingChannelConfigContainer;
     UnseenClips = unseenClips;
 }