def testProcessDuplicateWord(self): json_file = open("files/direct_message1.json") message_json = simplejson.load(json_file) twitter_dm = DirectMessage.NewFromJsonDict(message_json) processMessage(twitter_dm) json_file = open("files/direct_message1.json") message_json = simplejson.load(json_file) twitter_dm = DirectMessage.NewFromJsonDict(message_json) processMessage(twitter_dm) query = Dictionary.all() results = query.fetch(1) self.assertEqual(1, len(results))
def testProcessMessageFromNonExistentUser(self): # Message from user "spammer" who doesn't exist in database # It must not be processed and must not be saved json_file = open("files/direct_message_spammer.json") message_json = simplejson.load(json_file) twitter_dm = DirectMessage.NewFromJsonDict(message_json) processMessage(twitter_dm) query = Dictionary.all() results = query.fetch(1) self.assertEqual(0, len(results)) self.assertEqual("spammer", twitter_dm.sender_screen_name) # Test integration with LearnList query = LearnList.all() ll_results = query.fetch(2) self.assertEqual(0, len(ll_results))
def testAddNewLearnListItem(self): # Preparing datastore by prepopulating some data user = User() user.username = "******" user.twitter = "ny_blin" user.total_points = 0 user.put() json_file = open("files/direct_message2.json") message_json = simplejson.load(json_file) twitter_dm = DirectMessage.NewFromJsonDict(message_json) processMessage(twitter_dm) query = LearnList.all().filter('twitter_user ='******'ny_blin') results = query.fetch(2) self.assertEqual(1, len(results)) self.assertEqual('ny_blin', results[0].twitter_user) self.assertEqual(2.5, results[0].interval_days) self.assertEqual(1.5, results[0].efactor) self.assertEqual(1, results[0].total_served) now_plus_two = datetime.date.today() +\ datetime.timedelta(days=2) self.assertEqual(now_plus_two, results[0].next_serve_date)
def testProcessMessageNormalAddForExistingUser(self): json_file = open("files/direct_message1.json") message_json = simplejson.load(json_file) twitter_dm = DirectMessage.NewFromJsonDict(message_json) processMessage(twitter_dm) query = Dictionary.all() results = query.fetch(1) self.assertEqual(1, len(results)) self.assertEqual("", results[0].pronounce) self.assertEqual("da_zbur", results[0].twitter_user) self.assertEqual(289180663729512448L, results[0].message_id) self.assertEqual("to advet", results[0].word) self.assertEqual(u"обращаться к,ссылаться на",\ results[0].meaning) self.assertEqual(0, results[0].served) self.assertEqual(None, results[0].source_lang) self.assertEqual(1, User.all().filter("twitter =",\ "da_zbur").get().total_points) # Test integration with LearnList query = LearnList.all() ll_results = query.fetch(2) self.assertEqual(1, len(ll_results)) # Check if LearnList references same object self.assertEqual(ll_results[0].dict_entry.key(), results[0].key())
def testAnswersIntegration(self): # I should collapse this code into something reusable # This is a big integration test for question/answers # Idea is that there are two answers: good and bad # Need to check if messages are being properly rescheduled and send Twitter = TwitterMockup() today = datetime.date.today() current_time = int(time.time()) u = self.createUser("da_zbur","enabled",10) u.use_questions = "yes" u.put() d1 = self.createDictEntry("da_zbur",2,"lucrative",\ u"profitable, moneymaking, remunerative","[LOO-kruh-tiv]") d2 = self.createDictEntry("da_zbur",2,"ferociously(en)",\ u"жестоко, яростно, свирепо, дико, неистово. Ужасно, невыносимо.") d3 = self.createDictEntry("da_zbur",2,"confounder",\ u"искажающий результаты фактор") l1 = self.createLearnListItem("da_zbur",d1,today,current_time) l2 = self.createLearnListItem("da_zbur",d2,today,current_time) l3 = self.createLearnListItem("da_zbur",d3,today,current_time) # forcing question to be asked l1.total_served = 4 l2.total_served = 6 l3.total_served = 8 l1.interval_days = 3.2 l1.efactor = 1.3 l2.interval_days = 7.4 l2.efactor = 0.98 l3.interval_days = 17.4 l3.efactor = 1.98 l1.put() l2.put() l3.put() buildDailyList(today, logging) # Keep in mind building daily list means serve times will be # randomly distributed throighout the day! l1.next_serve_time = current_time l2.next_serve_time = current_time l3.next_serve_time = current_time l2.put() l1.put() l3.put() messages_generator = sendMessagesGenerator(Twitter, logging) m_list = [] while True: try: message = messages_generator.next() except StopIteration: break m_list.append(message) q1 = Question.all().fetch(3)[0] q2 = Question.all().fetch(3)[1] q3 = Question.all().fetch(3)[2] # This is a good answer a1 = "lucrative: moneymaking, profitable" # This is crappy answer a2 = u"ferociously(en): ---" # This is multiword answer a3 = u"Confounder: искажающий результаты фактор" m1 = Twitter.api.PostDirectMessage("LangBotStage", a1, "da_zbur") m2 = Twitter.api.PostDirectMessage("LangBotStage", a2, "da_zbur") m3 = Twitter.api.PostDirectMessage("LangBotStage", a3, "da_zbur") processMessage(m1) processMessage(m2) processMessage(m3) q1 = Question.all().fetch(3)[0] q2 = Question.all().fetch(3)[1] q3 = Question.all().fetch(3)[2] # For good question self.assertEqual(today, q1.answer_received) self.assertEqual(6, q1.answer_rating) self.assertEqual(6, q1.lli_ref.latest_answer_rating) self.assertEqual(sys.maxint, q1.lli_ref.next_serve_time) self.assertEqual(1.6, q1.lli_ref.efactor) self.assertEqual(3.2*1.3, q1.lli_ref.interval_days) self.assertEqual("moneymaking, profitable", q1.answer_text) # For bad question self.assertEqual(today, q2.answer_received) self.assertEqual(-2, q2.answer_rating) self.assertEqual(-2, q2.lli_ref.latest_answer_rating) self.assertEqual(0, q2.lli_ref.next_serve_time) self.assertEqual(today, q2.lli_ref.next_serve_date) self.assertEqual("---", q2.answer_text) # For multiword answer self.assertEqual(today, q3.answer_received) self.assertEqual(2, q3.answer_rating) self.assertEqual(2, q3.lli_ref.latest_answer_rating) self.assertEqual(sys.maxint, q3.lli_ref.next_serve_time) self.assertEqual(u"искажающий результаты фактор", q3.answer_text) # Check total user points, assuming he had 0 self.assertEqual(6 , User.all().filter("twitter =","da_zbur").\ get().total_points)