public async Task PostBroadcasterConfigAsync_NotFound() { const int channelId = 123; const string broadcaster = "broadcaster"; _Log.Setup(s => s.LogInformation($"Checking that broadcaster '{broadcaster}' exists.")); const string endpoint = "https://twitch.tv/users"; const string clientId = "kdrgvhidhfskljecsemphgdhdfgfls"; const string accept = "application/json"; var getUserResponse = new GetUsersResponse { Users = new List <User>() }; _TwitchWrapper.Setup(s => s.GetUsers(endpoint, clientId, accept, broadcaster)).ReturnsAsync(getUserResponse); var errorMessage = $"Could not find streamer '{broadcaster}'."; _Log.Setup(s => s.LogInformation(errorMessage)); var inputContainer = new BroadcasterConfigContainer(); var result = await _Helper.PostBroadcasterConfigAsync(endpoint, clientId, accept, channelId, broadcaster, inputContainer); _Log.VerifyAll(); _TwitchWrapper.VerifyAll(); _Context.VerifyAll(); Assert.That(result.ErrorMessage, Is.EqualTo(errorMessage)); Assert.That(result.ChannelConfigContainer, Is.Null); }
public async Task PostBroadcasterConfigAsync() { const int channelId = 123; const string broadcaster = "broadcaster"; _Log.Setup(s => s.LogInformation($"Checking that broadcaster '{broadcaster}' exists.")); const string endpoint = "https://twitch.tv/users"; const string clientId = "kdrgvhidhfskljecsemphgdhdfgfls"; const string accept = "application/json"; const string displayName = "BrOaDcAsTeR"; var getUserResponse = new GetUsersResponse { Users = new List <User> { new User { DisplayName = displayName } } }; _TwitchWrapper.Setup(s => s.GetUsers(endpoint, clientId, accept, broadcaster)).ReturnsAsync(getUserResponse); _Log.Setup(s => s.LogInformation($"Found broadcaster '{broadcaster}' with display name '{displayName}'.")); _Log.Setup(s => s.LogInformation($"Posting broadcaster config for channel '{channelId}' broadcaster '{displayName}'.")); var inputContainer = new BroadcasterConfigContainer(); var outputContainer = new ChannelConfigContainer(); _Context.Setup(s => s.SetBroadcasterConfigAsync(channelId, displayName, inputContainer)).ReturnsAsync(outputContainer); _Log.Setup(s => s.LogInformation($"Posted broadcaster config for channel '{channelId}' broadcaster '{displayName}'.")); var result = await _Helper.PostBroadcasterConfigAsync(endpoint, clientId, accept, channelId, broadcaster, inputContainer); _Log.VerifyAll(); _TwitchWrapper.VerifyAll(); _Context.VerifyAll(); Assert.That(result.ErrorMessage, Is.Null.Or.Empty); Assert.That(result.ChannelConfigContainer, Is.EqualTo(outputContainer)); }
public void BuildStreamersText_SomeStreamers() { _ConfigWrapper.Setup(s => s.GetValue <bool>("EnableNumberOfClipsPerDay")).Returns(true); var broadcaster1 = new BroadcasterConfigContainer { Broadcaster = "broadcaster123" }; var broadcaster2 = new BroadcasterConfigContainer { Broadcaster = "anotherstreamer", NumberOfClipsPerDay = 4 }; var broadcaster3 = new BroadcasterConfigContainer { Broadcaster = "omegalulmydude" }; var broadcaster4 = new BroadcasterConfigContainer { Broadcaster = "zzzzzzzzzzz", NumberOfClipsPerDay = 1 }; var broadcasters = new List <BroadcasterConfigContainer> { broadcaster1, broadcaster2, broadcaster3, broadcaster4 }; var container = new ChannelConfigContainer { Broadcasters = broadcasters }; const string streamersBegin = "here's your list of streamers"; _ConfigWrapper.Setup(s => s["StreamersFieldBeginText"]).Returns(streamersBegin); const string newLineDelimiter = "NEWLINE"; _ConfigWrapper.Setup(s => s["NewLineDelimiter"]).Returns(newLineDelimiter); var streamerFormats = new List <string> { "```lessNEWLINE{0}```", "```diffNEWLINE{0}```", "```fixNEWLINE{0}```" }; _ConfigWrapper.Setup(s => s.Get <List <string> >("StreamersFormats")).Returns(streamerFormats); var result = _TopClipsModuleHelper.BuildStreamersText(container); _ConfigWrapper.VerifyAll(); const string expectedResult = "here's your list of streamers" + "```less\nanotherstreamer, 4 clips per day, any view count```" + "```diff\nbroadcaster123, no limit, any view count```" + "```fix\nomegalulmydude, no limit, any view count```" + "```less\nzzzzzzzzzzz, 1 clip per day, any view count```"; Assert.That(result, Is.EqualTo(expectedResult)); }
public async Task <PostBroadcasterConfigResponse> PostBroadcasterConfigAsync(string endpoint, string clientId, string accept, decimal channelId, string broadcaster, BroadcasterConfigContainer container) { _Log.LogInformation($"Checking that broadcaster '{broadcaster}' exists."); var userResponse = await _TwitchWrapper.GetUsers(endpoint, clientId, accept, broadcaster); if (!userResponse.Users.Any()) { var errorMessage = $"Could not find streamer '{broadcaster}'."; _Log.LogInformation(errorMessage); return(new PostBroadcasterConfigResponse(errorMessage)); } var displayName = userResponse.Users[0].DisplayName; _Log.LogInformation($"Found broadcaster '{broadcaster}' with display name '{displayName}'."); _Log.LogInformation($"Posting broadcaster config for channel '{channelId}' broadcaster '{displayName}'."); var result = await _Context.SetBroadcasterConfigAsync(channelId, displayName, container); _Log.LogInformation($"Posted broadcaster config for channel '{channelId}' broadcaster '{displayName}'."); return(new PostBroadcasterConfigResponse(result)); }
public async Task Of(string broadcaster, int?input = null, [Remainder] string option = null) { var match = await _FunctionWrapper.GetBroadcasterConfigAsync(Context.Channel.Id, broadcaster); BroadcasterConfigContainer container; var enableNumberOfClipsPerDay = _ConfigWrapper.GetValue <bool>("EnableNumberOfClipsPerDay"); if (!enableNumberOfClipsPerDay) //default to min views logic { container = ContainerFromMinViews(); } else if (string.IsNullOrEmpty(option)) //no default to assume, just return { return; } else { switch (option.ToLower()) { case "clips": case "clips per day": if (input.HasValue && input.Value > 0) { container = match.FromClipsPerDay(input); } else { container = match.FromClipsPerDay(null); } break; case "views": case "min views": container = ContainerFromMinViews(); break; default: container = new BroadcasterConfigContainer { ChannelId = Context.Channel.Id, Broadcaster = broadcaster }; break; } } BroadcasterConfigContainer ContainerFromMinViews() { if (input.HasValue && input.Value > 0) { return(match.FromMinViews(input)); } return(match.FromMinViews(null)); } var result = await _FunctionWrapper.PostBroadcasterConfigAsync(Context.Channel.Id, broadcaster, container); if (!string.IsNullOrEmpty(result.ErrorMessage)) { await ReplyAsync(message : result.ErrorMessage); } else { await ReplyAsync(result.ChannelConfigContainer); } }
public async Task <PostBroadcasterConfigResponse> PostBroadcasterConfigAsync(decimal channelId, string broadcaster, BroadcasterConfigContainer container) { var requestUri = string.Format(_BroadcasterConfigEndpointFormat, channelId, broadcaster); var response = await _HttpClient.PostObjectWithHeaderAsync(requestUri, container, _FunctionsKeyHeaderName, _PostBroadcasterConfigFunctionKey); if (!response.IsSuccessStatusCode) { throw new FunctionHelperException($"Error posting broadcaster config for channel '{channelId}' broadcaster '{broadcaster}'. Status code '{response.StatusCode.ToString()}'. Reason phrase '{response.ReasonPhrase}'."); } var content = await response.Content.ReadAsStringAsync(); return(JsonConvert.DeserializeObject <PostBroadcasterConfigResponse>(content)); }