def setUp(self):
        self._scenarios = [
            Scenario([
                Request('asker', 'hello', 'link', 'https://some_link.com'),
                Request('agent', 'world', 'same', ''),
            ]),
            Scenario([
                Request('asker', 'question_scenario_2', 'link',
                        'some_url_scenario_2'),
            ])
        ]

        self._mock_get_suggestions = Mock()
        self._mock_get_suggestions.side_effect = [[
            Suggestion('link', 'some_url'),
            Suggestion('link', 'another_url')
        ], [Suggestion('link', 'url_of_a_different_suggestions_response')
            ], [Suggestion('link', 'some_url_of_suggestion_scenario_2')]]

        self._mock_get_time = Mock()
        self._mock_get_time.side_effect = [
            datetime(2005, 12, 30, 6, 45, 1),
            datetime(2005, 12, 30, 6, 45, 2),
            datetime(2005, 12, 30, 6, 45, 4),
            datetime(2005, 12, 30, 6, 45, 7),
            datetime(2005, 12, 30, 6, 45, 11),
            datetime(2005, 12, 30, 6, 45, 16)
        ]

        self._scenario_runner = ScenariosRunner(self._mock_get_suggestions,
                                                self._mock_get_time)
Пример #2
0
 def test_fail_when_expected_link_and_no_suggestion_contains_the_link(self):
     request = Request(None, None, "link", "expected_link")
     suggestions = [
         Suggestion("link", "not_the_expected_link"),
         Suggestion("question", "question_data")
     ]
     self.assertFalse(
         analyse_link_or_question_with_request_data(request, suggestions))
Пример #3
0
 def test_fail_when_expected_question_and_no_suggestion_is_a_question(self):
     request = Request(None, None, "question", "")
     suggestions = [
         Suggestion("link", "someLink"),
         Suggestion("link", "someOtherLink")
     ]
     self.assertFalse(
         analyse_link_or_question_without_request_data(
             request, suggestions))
Пример #4
0
 def test_fail_when_expected_notlink_and_suggestion_contains_the_forbidden_link(
         self):
     request = Request(None, None, "notlink", "forbidden_url")
     suggestions = [
         Suggestion("link", "urlA"),
         Suggestion("link", "forbidden_url"),
         Suggestion("link", "urlC")
     ]
     self.assertFalse(
         analyse_notlink_with_request_data(request, suggestions))
Пример #5
0
 def test_pass_when_expected_notlink_and_suggestion_does_not_contain_the_forbidden_link(
         self):
     request = Request(None, None, "notlink", "url_not_in_the_suggestions")
     suggestions = [
         Suggestion("link", "urlA"),
         Suggestion("link", "urlB"),
         Suggestion("link", "urlC")
     ]
     self.assertTrue(analyse_notlink_with_request_data(
         request, suggestions))
Пример #6
0
 def test_when_not_found_then_get_selected_suggestion_returns_none(self):
     suggestions = [
         Suggestion("link", "some_dummy_url"),
         Suggestion("link", "more_dummy_url"),
         Suggestion("link", "another_dummy_url")
     ]
     request = Request(None, None, "link", "some_expected_url")
     actual_selected_suggestion = get_selected_suggestion(
         suggestions, request)
     self.assertIsNone(actual_selected_suggestion)
Пример #7
0
 def test_pass_when_expected_question_and_one_suggestion_is_a_question(
         self):
     request = Request(None, None, "question", "")
     suggestions = [
         Suggestion("link", "someLink"),
         Suggestion("question", "question_data")
     ]
     self.assertTrue(
         analyse_link_or_question_without_request_data(
             request, suggestions))
Пример #8
0
 def test_pass_when_expected_same_and_suggestions_are_the_same(self):
     request = Request(None, None, "same", "")
     previous_suggestions = [
         Suggestion("link", "urlA"),
         Suggestion("question", "question_data")
     ]
     current_suggestions = [
         Suggestion("link", "urlA"),
         Suggestion("question", "question_data")
     ]
     self.assertTrue(
         analyse_same(request, current_suggestions, previous_suggestions))
Пример #9
0
 def test_fail_when_expected_same_and_suggestions_are_different(self):
     request = Request(None, None, "same", "")
     previous_suggestions = [
         Suggestion("link", "urlA"),
         Suggestion("question", "question_data")
     ]
     current_suggestions = [
         Suggestion("link", "different_url"),
         Suggestion("question", "question_data")
     ]
     self.assertFalse(
         analyse_same(request, current_suggestions, previous_suggestions))
Пример #10
0
 def test_when_expecting_question_get_selected_suggestion_returns_first_question_and_position_one(
         self):
     suggestions = [
         Suggestion("link", "some_dummy_url"),
         Suggestion("link", "more_dummy_url"),
         Suggestion("question", "question_data")
     ]
     request = Request(None, None, "question", "")
     selected_suggestion = get_selected_suggestion(suggestions, request)
     self.assertIsNotNone(selected_suggestion)
     self.assertEquals(1, selected_suggestion[0])
     self.assertEquals(Suggestion("question", "question_data"),
                       selected_suggestion[1])
Пример #11
0
 def test_when_expecting_notlink_get_selected_suggestion_returns_first_nonforbidden_link_and_position(
         self):
     suggestions = [
         Suggestion("question", "dummy_question_data"),
         Suggestion("link", "forbidden_url"),
         Suggestion("link", "first_non_forbidden_url")
     ]
     request = Request(None, None, "notlink",
                       "forbidden_url_not_in_suggestions forbidden_url")
     selected_suggestion = get_selected_suggestion(suggestions, request)
     self.assertIsNotNone(selected_suggestion)
     self.assertEquals(2, selected_suggestion[0])
     self.assertEquals(Suggestion("link", "first_non_forbidden_url"),
                       selected_suggestion[1])
Пример #12
0
 def test_when_expecting_link_get_selected_suggestion_returns_first_matching_link_and_position(
         self):
     suggestions = [
         Suggestion("question", "dummy_question_data"),
         Suggestion("link", "some_dummy_url"),
         Suggestion("link", "expected_url")
     ]
     request = Request(None, None, "link",
                       "some_url_not_found expected_url")
     selected_suggestion = get_selected_suggestion(suggestions, request)
     self.assertIsNotNone(selected_suggestion)
     self.assertEquals(2, selected_suggestion[0])
     self.assertEquals(Suggestion("link", "expected_url"),
                       selected_suggestion[1])
Пример #13
0
 def test_when_found_then_get_selected_suggestion_returns_matching_suggestion(
         self):
     suggestions = [
         Suggestion("link", "some_dummy_url"),
         Suggestion("link", "some_expected_url"),
         Suggestion("link", "another_dummy_url")
     ]
     request = Request(None, None, "link", "some_expected_url")
     actual_selected_suggestion = get_selected_suggestion(
         suggestions, request)
     self.assertIsNotNone(actual_selected_suggestion)
     self.assertEquals(2, actual_selected_suggestion[0])
     self.assertEquals(Suggestion("link", "some_expected_url"),
                       actual_selected_suggestion[1])
Пример #14
0
 def test_getters(self):
     suggestions = [
         Suggestion('link', 'some_url'),
         Suggestion('link', 'another_url')
     ]
     suggestions_response = SuggestionsResponse(suggestions,
                                                timedelta(seconds=42))
     self.assertEquals('link',
                       suggestions_response.get_suggestions()[0].get_type())
     self.assertEquals('some_url',
                       suggestions_response.get_suggestions()[0].get_data())
     self.assertEquals('link',
                       suggestions_response.get_suggestions()[1].get_type())
     self.assertEquals('another_url',
                       suggestions_response.get_suggestions()[1].get_data())
     self.assertEquals(timedelta(seconds=42),
                       suggestions_response.get_response_time_duration())
Пример #15
0
 def test_analyze_with_one_successful_suggestions_response(self):
     expected_analysis = ['success(1-1)']
     request = Request('asker', 'What is Coveo?', 'link',
                       'https://www.coveo.com/')
     suggestion = Suggestion('link', 'https://www.coveo.com/')
     suggestions_responses_analyzer = SuggestionsResponsesAnalyzer(
         [Scenario([request])],
         [[SuggestionsResponse([suggestion], timedelta(seconds=0))]])
     self.assertEquals(expected_analysis,
                       suggestions_responses_analyzer.analyze_scenarios())
Пример #16
0
 def setUp(self):
     self._suggestions_3_links = [
         Suggestion('link', 'https://blog.coveo.com/goodbye-gsa-hello-intelligent-search-in-the-cloud/'),
         Suggestion('link', 'https://coveo.github.io/search-ui/interfaces/isearchendpointoptions.html'),
         Suggestion('link', 'https://onlinehelp.coveo.com/en/ces/7.0/administrator/about_net_conversion_scripts.htm')
     ]
     self._suggestions_3_questions = [
         Suggestion('question', 'What is your name?'),
         Suggestion('question', 'Did you try this?'),
         Suggestion('question', 'Hello?')
     ]
     suggestions_responses_for_each_scenario = [
         [
             SuggestionsResponse(self._suggestions_3_questions, timedelta(seconds=49)),
             SuggestionsResponse(self._suggestions_3_links, timedelta(seconds=49))
         ],
         [
             SuggestionsResponse(self._suggestions_3_questions, timedelta(seconds=54)),
             SuggestionsResponse(self._suggestions_3_questions, timedelta(seconds=48)),
             SuggestionsResponse(self._suggestions_3_questions, timedelta(seconds=48)),
             SuggestionsResponse(self._suggestions_3_links, timedelta(seconds=48)),
             SuggestionsResponse(self._suggestions_3_links, timedelta(seconds=48))
         ]
     ]
     self._scenarios = get_scenarios_from_csv_file(SCENARIO_FILE_PATH)
     self._metrics_analyzer = MetricsAnalyzer(self._scenarios, suggestions_responses_for_each_scenario)
     empty_suggestions_suggestions_responses_for_each_scenario = [
         [
             SuggestionsResponse([], timedelta(seconds=0)),
             SuggestionsResponse([], timedelta(seconds=0))
         ],
         [
             SuggestionsResponse([], timedelta(seconds=0)),
             SuggestionsResponse([], timedelta(seconds=0)),
             SuggestionsResponse([], timedelta(seconds=0)),
             SuggestionsResponse([], timedelta(seconds=0)),
             SuggestionsResponse([], timedelta(seconds=0))
         ]
     ]
     self._no_suggestions_responses_metrics_analyzer = \
         MetricsAnalyzer(self._scenarios, empty_suggestions_suggestions_responses_for_each_scenario)
     self._immediate_response_metrics_analyzer = \
         MetricsAnalyzer(self._scenarios, empty_suggestions_suggestions_responses_for_each_scenario)
Пример #17
0
 def test_average_selected_suggestion_position_only_counts_questions_when_expecting_questions(self):
     suggestions = [
         Suggestion('link', 'dummy_urlA'),
         Suggestion('link', 'dummy_urlB'),
         Suggestion('link', 'dummy_urlC'),
         Suggestion('question', 'dummy_questionA'),
         Suggestion('question', 'dummy_questionB'),
         Suggestion('question', 'dummy_questionC')
     ]
     request = Request(
         None,
         None,
         "question",
         ""
     )
     scenarios = [Scenario([request])]
     suggestions_responses_for_each_scenario = [[
         SuggestionsResponse(
             suggestions,
             timedelta(seconds=42)
         )
     ]]
     metrics_analyzer = MetricsAnalyzer(scenarios, suggestions_responses_for_each_scenario)
     self.assertEquals(1, metrics_analyzer.calculate_mean_position_of_selected_suggestions())
Пример #18
0
    def setUp(self):
        self._scenarios = get_scenarios_from_csv_file(SCENARIO_FILE_PATH)
        self._scenarios_starting_with_same = get_scenarios_from_csv_file(
            SCENARIOS_STARTING_WITH_SAME_FILE_PATH)

        suggestions_3_links = [
            Suggestion(
                'link',
                'https://blog.coveo.com/goodbye-gsa-hello-intelligent-search-in-the-cloud/'
            ),
            Suggestion(
                'link',
                'https://coveo.github.io/search-ui/interfaces/isearchendpointoptions.html'
            ),
            Suggestion(
                'link',
                'https://onlinehelp.coveo.com/en/ces/7.0/administrator/about_net_conversion_scripts.htm'
            )
        ]
        suggestions_3_questions = [
            Suggestion('question', 'What is your name?'),
            Suggestion('question', 'Did you try this?'),
            Suggestion('question', 'Hello?')
        ]
        suggestions_2_last_links = suggestions_3_links[1:]
        self._suggestions_responses_for_each_scenario = [
            [
                SuggestionsResponse(suggestions_3_questions,
                                    timedelta(seconds=49))
            ],
            [
                SuggestionsResponse(suggestions_3_links,
                                    timedelta(seconds=49)),
                SuggestionsResponse(suggestions_3_links,
                                    timedelta(seconds=49)),
                SuggestionsResponse(suggestions_3_links,
                                    timedelta(seconds=49)),
                SuggestionsResponse(suggestions_3_questions,
                                    timedelta(seconds=54)),
                SuggestionsResponse(suggestions_3_questions,
                                    timedelta(seconds=48)),
                SuggestionsResponse(suggestions_3_links,
                                    timedelta(seconds=48)),
                SuggestionsResponse(suggestions_3_links,
                                    timedelta(seconds=48)),
                SuggestionsResponse(suggestions_2_last_links,
                                    timedelta(seconds=48)),
                SuggestionsResponse(suggestions_3_links,
                                    timedelta(seconds=48)),
                SuggestionsResponse(suggestions_3_links, timedelta(seconds=48))
            ],
            [
                SuggestionsResponse(suggestions_3_questions,
                                    timedelta(seconds=48)),
                SuggestionsResponse(suggestions_3_questions,
                                    timedelta(seconds=48)),
                SuggestionsResponse(suggestions_3_links,
                                    timedelta(seconds=48)),
                SuggestionsResponse(suggestions_3_links,
                                    timedelta(seconds=48)),
                SuggestionsResponse(suggestions_3_questions,
                                    timedelta(seconds=48)),
                SuggestionsResponse(suggestions_3_questions,
                                    timedelta(seconds=48)),
                SuggestionsResponse(suggestions_3_questions,
                                    timedelta(seconds=48)),
                SuggestionsResponse(suggestions_3_links,
                                    timedelta(seconds=48)),
                SuggestionsResponse(suggestions_3_links,
                                    timedelta(seconds=48)),
                SuggestionsResponse(suggestions_3_questions,
                                    timedelta(seconds=48))
            ]
        ]

        self._suggestions_responses_starting_with_same = [
            [SuggestionsResponse(suggestions_3_links, timedelta(seconds=49))],
            [
                SuggestionsResponse([], timedelta(seconds=49)),
                SuggestionsResponse(suggestions_3_links, timedelta(seconds=49))
            ],
            [SuggestionsResponse(suggestions_3_links, timedelta(seconds=49))]
        ]
Пример #19
0
 def json_link_to_suggestion(json_link):
     return Suggestion('link', json_link['printableUri'])
Пример #20
0
 def json_question_to_suggestion(json_question):
     return Suggestion('question', json_question['text'])
Пример #21
0
 def get_suggestion(json_suggestion):
     is_link = 'printableUri' in json_suggestion
     suggestion_type = 'link' if is_link else 'question'
     data_json_field = 'printableUri' if is_link else 'title'
     return Suggestion(suggestion_type, json_suggestion[data_json_field])
Пример #22
0
 def json_link_to_suggestion(json_link):
     return Suggestion('link', json_link['uri'])