public async Task ProcessRequest(EventWrapperRequest request) { try { await FindSimilar(request); } catch (Exception e) { if (request?.Event?.Channel != null) { await _slackClient.SendMessageAsync(request.Event.Channel, Phrases.SlackError); } _logger.LogError(e, e.Message); } }
public async Task ProcessRequest_MessageFromBot_Ignore() { //Arrange var slackEvent = new SlackEvent { BotId = "123456" }; var request = new EventWrapperRequest { Event = slackEvent }; // Act await _eventService.ProcessRequest(request); // Assert _elasticSearchService.VerifyNoOtherCalls(); _slackClientMock.VerifyNoOtherCalls(); }
public async Task ProcessRequest_EventTypeWrong_Ignore() { //Arrange var slackEvent = new SlackEvent { Type = "EmojiReaction" }; var request = new EventWrapperRequest { Event = slackEvent }; // Act await _eventService.ProcessRequest(request); // Assert _elasticSearchService.VerifyNoOtherCalls(); _slackClientMock.VerifyNoOtherCalls(); }
public async Task ProcessRequest_MessageTextIsEmpty_Ignore() { //Arrange var slackEvent = new SlackEvent { Text = string.Empty }; var request = new EventWrapperRequest { Event = slackEvent }; // Act await _eventService.ProcessRequest(request); // Assert _elasticSearchService.VerifyNoOtherCalls(); _slackClientMock.VerifyNoOtherCalls(); }
public EventServiceTests() { var elasticsearchSettingsMock = new Mock <IOptions <ElasticsearchSettings> >(); elasticsearchSettingsMock .SetupGet(m => m.Value) .Returns(() => new ElasticsearchSettings()); _elasticSearchService = new Mock <IElasticSearchService>(); _slackClientMock = new Mock <ISlackHttpClient>(); _searchableTextServiceMock = new Mock <ISearchableTextService>(); var logger = new Mock <ILogger <EventService> >(); _eventService = new EventService(_slackClientMock.Object, _elasticSearchService.Object, _searchableTextServiceMock.Object, logger.Object); var slackEvent = new SlackEvent { Text = "Hello from Slack!", Channel = "CBGJMA0TA", UserId = "UBJ6GC75K", Type = "message" }; _request = new EventWrapperRequest { Event = slackEvent }; _question = new SearchableQuestion { Id = Guid.NewGuid().ToString(), Text = "???" }; _answer = new SearchableAnswer() { Text = "???", Id = Guid.NewGuid().ToString(), QuestionId = Guid.NewGuid().ToString() }; }
private async Task FindSimilar(EventWrapperRequest request) { if (request == null) { throw new ArgumentNullException(nameof(request)); } if (request.Event.Type != "message") { return; } // ignore bot answers if (request.Event.BotId != null) { return; } var askedQuestion = request.Event?.Text; if (string.IsNullOrWhiteSpace(askedQuestion)) { return; } _logger.LogInformation("User with id {UserId} asked a question {Question}", request.Event.UserId, askedQuestion); var attachments = new List <AttachmentDto>(); // questions var similarQuestions = await Search <QuestionElasticSearchRequest, SearchableQuestion>( askedQuestion, NecessaryNumberOfQuestions, _elasticSearchService.SearchAsync <SearchableQuestion>); attachments.AddRange(similarQuestions.Select(CreateQuestionAttachment)); // confluence var confluencePages = await Search <ConfluenceElasticSearchRequest, SearchableConfluence>( askedQuestion, NecessaryNumberOfConfluencePages, _elasticSearchService.SearchWithTitleAsync <SearchableConfluence>); AddToAttachments(attachments, CreateConfluenceAttachment(confluencePages)); // jira var jiraIssues = await Search <JiraElasticSearchRequest, SearchableJira>( askedQuestion, NecessaryNumberOfJiraIssues, _elasticSearchService.SearchWithTitleAsync <SearchableJira>); AddToAttachments(attachments, CreateJiraAttachment(jiraIssues)); // answers if (similarQuestions.Count < NecessaryNumberOfQuestions) { var searchableAnswers = await Search <AnswerElasticSearchRequest, SearchableAnswer>( askedQuestion, NecessaryNumberOfAnswers, _elasticSearchService.SearchAsync <SearchableAnswer>); var searchableQuestions = await _searchableTextService .GetQuestionsAsync(searchableAnswers.Select(q => Guid.Parse(q.QuestionId))); AddToAttachments(attachments, CreateAnswersAttachment(searchableAnswers, searchableQuestions)); } // ask experts attachments.Add(CreateAskExpertsAttachment(askedQuestion)); await _slackClient.SendMessageAsync(request.Event.Channel, similarQuestions.Count != 0?Phrases.SimilarQuestions : null, attachments); }