Example #1
0
 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))
Example #2
0
 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))
Example #3
0
 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)      
Example #4
0
 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())
Example #5
0
    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)