def test_counting(self): inputs = [ "count unread emails" ] client = JenniferTestClient(self.brain, inputs) client.run() self.assertEqual(len(client.output_list), 2) response = client.output_list[0] self.assertEqual("JenniferGmailPlugin", response.response_creator) # Make sure the time plugin responded self.assertTrue(isinstance(response, JenniferResponse)) self.assertEqual(len(response.segments), 1) segment = response.segments[0] self.assertTrue(isinstance(segment, JenniferTextResponseSegment)) self.assertIn("checking", response.to_text().lower()) response = client.output_list[1] self.assertEqual("JenniferGmailPlugin", response.response_creator) # Make sure the time plugin responded self.assertTrue(isinstance(response, JenniferResponse)) self.assertEqual(len(response.segments), 1) segment = response.segments[0] self.assertTrue(isinstance(segment, JenniferTextResponseSegment)) self.assertIn("you have 2 new emails", response.to_text().lower())
def test_multiple_can_respond(self, iphone_respond_mock, time_respond_mock): inputs = ['what is the time'] client = JenniferTestClient(self.brain, inputs) client.run() # Should have just run the time, because it's higher priority self.assertEqual(len(client.output_list), 1) # Make sure only one was caled self.assertTrue(time_respond_mock.called) self.assertFalse(iphone_respond_mock.called)
def test_multiple_can_respond(self, iphone_respond_mock, time_respond_mock): inputs = [ 'what is the time' ] client = JenniferTestClient(self.brain, inputs) client.run() # Should have just run the time, because it's higher priority self.assertEqual(len(client.output_list), 1) # Make sure only one was caled self.assertTrue(time_respond_mock.called) self.assertFalse(iphone_respond_mock.called)
def test_garbage_input(self): inputs = ["jashg asfsahf ashdf saf sd"] client = JenniferTestClient(self.brain, inputs) client.run() self.assertEqual(len(client.output_list), 1) response = client.output_list[0] self.assertTrue(isinstance(response, JenniferResponse)) self.assertEqual(len(response.segments), 1) segment = response.segments[0] self.assertTrue(isinstance(segment, JenniferTextResponseSegment)) self.assertEqual(response.to_text(), self.brain.UNSURE_TEXT)
def test_garbage_input(self): inputs = [ "jashg asfsahf ashdf saf sd" ] client = JenniferTestClient(self.brain, inputs) client.run() self.assertEqual(len(client.output_list), 1) response = client.output_list[0] self.assertTrue(isinstance(response, JenniferResponse)) self.assertEqual(len(response.segments), 1) segment = response.segments[0] self.assertTrue(isinstance(segment, JenniferTextResponseSegment)) self.assertEqual(response.to_text(), self.brain.UNSURE_TEXT)
def test_delete_read_email(self, delete_mock, read_mock): inputs = [ "read my emails", "yes", "no", # Email 1 "no", "yes", # Email 2 "no", "no", # Email 3 "no", "no", # Email 4 "no", "no", # Email 5 "no", "no", # Email 6 "no", "no", # Email 7 "no", "no", # Email 8 "no", "no", # Email 9 "no", "no", # Email 10 ] JenniferTestClient(self.brain, inputs) self.assertTrue(delete_mock.called) self.assertTrue(read_mock.called)
def test_delete_read_email(self, delete_mock, read_mock): inputs = [ "read my emails", "yes", "no", # Email 1 "no", "yes", # Email 2 "no", "no", # Email 3 "no", "no", # Email 4 "no", "no", # Email 5 "no", "no", # Email 6 "no", "no", # Email 7 "no", "no", # Email 8 "no", "no", # Email 9 "no", "no", # Email 10 ] client = JenniferTestClient(self.brain, inputs) client.run() self.assertTrue(delete_mock.called) self.assertTrue(read_mock.called)
def test_date_tomorrow(self): inputs = ["what is the date tomorrow?"] client = JenniferTestClient(self.brain, inputs) client.run() self.assertEqual(len(client.output_list), 1) response = client.output_list[0] self.assertEqual(JenniferTimePlugin.__name__, response.response_creator) # Make sure the time plugin responded self.assertTrue(isinstance(response, JenniferResponse)) self.assertEqual(len(response.segments), 1) segment = response.segments[0] self.assertTrue(isinstance(segment, JenniferTextResponseSegment)) now = datetime.datetime.now() + datetime.timedelta(days=1) should_be_in = [now.strftime(code) for code in ["%A", "%B", "%d", "%Y"]] for time_str in should_be_in: self.assertIn(time_str, response.to_text())
def test_check_email(self, delete_mock, read_mock): inputs = [ "read my emails", "no", "no", # Email 1 "no", "no", # Email 2 "no", "no", # Email 3 "no", "no", # Email 4 "no", "no", # Email 5 "no", "no", # Email 6 "no", "no", # Email 7 "no", "no", # Email 8 "no", "no", # Email 9 "no", "no", # Email 10 ] client = JenniferTestClient(self.brain, inputs) self.assertGreaterEqual(len(client.output_list), 1) response = client.output_list[0] self.assertEqual( "JenniferGmailPlugin", response.response_creator) # Make sure the time plugin responded self.assertTrue(isinstance(response, JenniferResponse)) self.assertEqual(len(response.segments), 1) segment = response.segments[0] self.assertTrue(isinstance(segment, JenniferTextResponseSegment)) self.assertIn("checking", response.to_text().lower()) response = client.output_list[1] self.assertEqual( "JenniferGmailPlugin", response.response_creator) # Make sure the time plugin responded self.assertTrue(isinstance(response, JenniferResponse)) self.assertEqual(len(response.segments), 1) segment = response.segments[0] self.assertTrue(isinstance(segment, JenniferTextResponseSegment)) self.assertIn("you have", response.to_text().lower()) self.assertIn("email", response.to_text().lower()) self.assertFalse(delete_mock.called) self.assertFalse(read_mock.called)
def test_time(self): inputs = ["what time is it?"] client = JenniferTestClient(self.brain, inputs) client.run() self.assertEqual(len(client.output_list), 1) response = client.output_list[0] self.assertEqual(JenniferTimePlugin.__name__, response.response_creator) self.assertTrue(isinstance(response, JenniferResponse)) self.assertEqual(len(response.segments), 1) segment = response.segments[0] self.assertTrue(isinstance(segment, JenniferTextResponseSegment)) now = datetime.datetime.now() should_be_in = [now.strftime(code) for code in ['%M', '%p']] for time_str in should_be_in: self.assertIn(time_str, response.to_text())
def test_check_email(self, delete_mock, read_mock): inputs = [ "read my emails", "no", "no", # Email 1 "no", "no", # Email 2 "no", "no", # Email 3 "no", "no", # Email 4 "no", "no", # Email 5 "no", "no", # Email 6 "no", "no", # Email 7 "no", "no", # Email 8 "no", "no", # Email 9 "no", "no", # Email 10 ] client = JenniferTestClient(self.brain, inputs) client.run() self.assertGreaterEqual(len(client.output_list), 1) response = client.output_list[0] self.assertEqual("JenniferGmailPlugin", response.response_creator) # Make sure the time plugin responded self.assertTrue(isinstance(response, JenniferResponse)) self.assertEqual(len(response.segments), 1) segment = response.segments[0] self.assertTrue(isinstance(segment, JenniferTextResponseSegment)) self.assertIn("checking", response.to_text().lower()) response = client.output_list[1] self.assertEqual("JenniferGmailPlugin", response.response_creator) # Make sure the time plugin responded self.assertTrue(isinstance(response, JenniferResponse)) self.assertEqual(len(response.segments), 1) segment = response.segments[0] self.assertTrue(isinstance(segment, JenniferTextResponseSegment)) self.assertIn("you have", response.to_text().lower()) self.assertIn("email", response.to_text().lower()) self.assertFalse(delete_mock.called) self.assertFalse(read_mock.called)
def test_time(self): inputs = [ "what time is it?" ] client = JenniferTestClient(self.brain, inputs) client.run() self.assertEqual(len(client.output_list), 1) response = client.output_list[0] self.assertEqual(JenniferTimePlugin.__name__, response.response_creator) self.assertTrue(isinstance(response, JenniferResponse)) self.assertEqual(len(response.segments), 1) segment = response.segments[0] self.assertTrue(isinstance(segment, JenniferTextResponseSegment)) now = datetime.datetime.now() should_be_in = [now.strftime(code) for code in ['%M', '%p']] for time_str in should_be_in: self.assertIn(time_str, response.to_text())
def test_date_tomorrow(self): inputs = ["what is the date tomorrow?"] client = JenniferTestClient(self.brain, inputs) client.run() self.assertEqual(len(client.output_list), 1) response = client.output_list[0] self.assertEqual( JenniferTimePlugin.__name__, response.response_creator) # Make sure the time plugin responded self.assertTrue(isinstance(response, JenniferResponse)) self.assertEqual(len(response.segments), 1) segment = response.segments[0] self.assertTrue(isinstance(segment, JenniferTextResponseSegment)) now = datetime.datetime.now() + datetime.timedelta(days=1) should_be_in = [ now.strftime(code) for code in ['%A', '%B', '%d', '%Y'] ] for time_str in should_be_in: self.assertIn(time_str, response.to_text())
def test_same_priority(self, iphone_respond_mock, time_respond_mock): inputs = [ 'what is the time', 'no', 'yes' ] client = JenniferTestClient(self.brain, inputs) client.run() # Should have said: # Which lesson applies? # Find my iPhone? # Time? # (time's response) self.assertEqual(len(client.output_list), 4) # Get first reponse, make sure it's "Which Lesson Applies?" response = client.output_list[0] self.assertTrue(isinstance(response, JenniferResponse)) self.assertEqual(len(response.segments), 1) self.assertEqual(response.to_text(), self.brain.MULTIPLE_LESSONS_APPLY) # Combine both of the verbose names: verbose_names = [JenniferTimePlugin.VERBOSE_NAME, JenniferFindMyIphonePlugin.VERBOSE_NAME] for indx in range(1,2): response = client.output_list[indx] # Make sure it's a response with one text segment self.assertTrue(isinstance(response, JenniferResponse)) self.assertEqual(len(response.segments), 1) # Make sure the segment has the verbose name self.assertTrue(response.to_text().replace('?', ''), verbose_names) # Make sure only one was called (Because they may have been presented to user in reverse order) self.assertTrue(iphone_respond_mock.called or time_respond_mock.called) self.assertFalse(iphone_respond_mock.called and time_respond_mock.called)
def test_same_priority(self, iphone_respond_mock, time_respond_mock): inputs = ['what is the time', 'no', 'yes'] client = JenniferTestClient(self.brain, inputs) client.run() # Should have said: # Which lesson applies? # Find my iPhone? # Time? # (time's response) self.assertEqual(len(client.output_list), 4) # Get first reponse, make sure it's "Which Lesson Applies?" response = client.output_list[0] self.assertTrue(isinstance(response, JenniferResponse)) self.assertEqual(len(response.segments), 1) self.assertEqual(response.to_text(), self.brain.MULTIPLE_LESSONS_APPLY) # Combine both of the verbose names: verbose_names = [ JenniferTimePlugin.VERBOSE_NAME, JenniferFindMyIphonePlugin.VERBOSE_NAME ] for indx in range(1, 2): response = client.output_list[indx] # Make sure it's a response with one text segment self.assertTrue(isinstance(response, JenniferResponse)) self.assertEqual(len(response.segments), 1) # Make sure the segment has the verbose name self.assertTrue(response.to_text().replace('?', ''), verbose_names) # Make sure only one was called (Because they may have been presented to user in reverse order) self.assertTrue(iphone_respond_mock.called or time_respond_mock.called) self.assertFalse(iphone_respond_mock.called and time_respond_mock.called)