script/lib/iri_tweet/tests.py
changeset 244 d4b7d6e2633f
parent 243 9213a63fa34a
child 254 2209e66bb50b
equal deleted inserted replaced
243:9213a63fa34a 244:d4b7d6e2633f
     1 from sqlalchemy import Column, Integer, String, ForeignKey, create_engine
     1 from sqlalchemy import Column, Integer, String, ForeignKey, create_engine
     2 from sqlalchemy.ext.declarative import declarative_base
     2 from sqlalchemy.ext.declarative import declarative_base
     3 from sqlalchemy.orm import relationship, backref
     3 from sqlalchemy.orm import relationship, backref
     4 import unittest #@UnresolvedImport
     4 import unittest #@UnresolvedImport
     5 from sqlalchemy.orm import sessionmaker
     5 from sqlalchemy.orm import sessionmaker
     6 from iri_tweet.utils import ObjectsBuffer
     6 from iri_tweet.utils import ObjectsBuffer, TwitterProcessor
       
     7 from iri_tweet import models
       
     8 import tempfile #@UnresolvedImport
       
     9 import os
     7 
    10 
     8 Base = declarative_base()
    11 Base = declarative_base()
     9 
    12 
    10 class User(Base):
    13 class User(Base):
    11     __tablename__ = 'users'
    14     __tablename__ = 'users'
    46     def setUp(self):
    49     def setUp(self):
    47         self.engine = create_engine('sqlite:///:memory:', echo=False)
    50         self.engine = create_engine('sqlite:///:memory:', echo=False)
    48         Base.metadata.create_all(self.engine)
    51         Base.metadata.create_all(self.engine)
    49         sessionMaker = sessionmaker(bind=self.engine)
    52         sessionMaker = sessionmaker(bind=self.engine)
    50         self.session = sessionMaker()
    53         self.session = sessionMaker()
       
    54 
       
    55     def tearDown(self):
       
    56         self.session.close()
       
    57         self.engine.dispose()
       
    58 
    51         
    59         
    52     def testCreateUser(self):
    60     def testCreateUser(self):
    53         ed_user = User('ed', 'Ed Jones', 'edspassword')
    61         ed_user = User('ed', 'Ed Jones', 'edspassword')
    54         self.session.add(ed_user)
    62         self.session.add(ed_user)
    55         self.assertTrue(ed_user.id is None)
    63         self.assertTrue(ed_user.id is None)
    56         self.session.commit()
    64         self.session.commit()
    57         self.assertTrue(ed_user.id is not None)
    65         self.assertTrue(ed_user.id is not None)
       
    66 
    58         
    67         
    59     def testSimpleBuffer(self):
    68     def testSimpleBuffer(self):
    60         obj_buffer = ObjectsBuffer()
    69         obj_buffer = ObjectsBuffer()
    61         obj_proxy = obj_buffer.add_object(User, ['ed1', 'Ed1 Jones', 'edspassword'], None, False)
    70         obj_proxy = obj_buffer.add_object(User, ['ed1', 'Ed1 Jones', 'edspassword'], None, False)
    62         self.assertTrue(obj_proxy.id() is None)
    71         self.assertTrue(obj_proxy.id() is None)
    63         obj_buffer.persists(self.session)
    72         obj_buffer.persists(self.session)
    64         self.assertTrue(obj_proxy.id() is None)
    73         self.assertTrue(obj_proxy.id() is None)
    65         self.session.commit()
    74         self.session.commit()
    66         self.assertTrue(obj_proxy.id() is not None)
    75         self.assertTrue(obj_proxy.id() is not None)
       
    76 
       
    77 
       
    78     def testSimpleBufferKwargs(self):
       
    79         obj_buffer = ObjectsBuffer()
       
    80         obj_proxy = obj_buffer.add_object(User, None, {'name':'ed1b', 'fullname':'Ed1b Jones', 'password':'edspassword'}, False)
       
    81         self.assertTrue(obj_proxy.id() is None)
       
    82         obj_buffer.persists(self.session)
       
    83         self.assertTrue(obj_proxy.id() is None)
       
    84         self.session.commit()
       
    85         self.assertTrue(obj_proxy.id() is not None)
       
    86 
    67         
    87         
    68     def testSimpleBufferFlush(self):
    88     def testSimpleBufferFlush(self):
    69         obj_buffer = ObjectsBuffer()
    89         obj_buffer = ObjectsBuffer()
    70         obj_proxy = obj_buffer.add_object(User, ['ed2', 'Ed2 Jones', 'edspassword'], None, True)
    90         obj_proxy = obj_buffer.add_object(User, ['ed2', 'Ed2 Jones', 'edspassword'], None, True)
    71         self.assertTrue(obj_proxy.id() is None)
    91         self.assertTrue(obj_proxy.id() is None)
    87         self.assertEquals(2, len(ed_user.addresses))
   107         self.assertEquals(2, len(ed_user.addresses))
    88         ed_user = self.session.query(User).filter_by(name='ed4').first()
   108         ed_user = self.session.query(User).filter_by(name='ed4').first()
    89         self.assertEquals(1, len(ed_user.addresses))
   109         self.assertEquals(1, len(ed_user.addresses))
    90 
   110 
    91         
   111         
       
   112 
       
   113 original_json = u'{"in_reply_to_user_id_str":null,"text":"RT @BieberEagle: \\"I love my haters. They spend so much time thinking about me. Aren\u2019t they sweet?\\" - Justin Bieber","contributors":null,"retweeted":false,"coordinates":null,"retweeted_status":{"in_reply_to_user_id_str":null,"text":"\\"I love my haters. They spend so much time thinking about me. Aren\u2019t they sweet?\\" - Justin Bieber","contributors":null,"retweeted":false,"coordinates":null,"retweet_count":"100+","source":"web","entities":{"user_mentions":[],"hashtags":[],"urls":[]},"truncated":false,"place":null,"id_str":"96638597737889792","in_reply_to_user_id":null,"in_reply_to_status_id":null,"favorited":false,"in_reply_to_status_id_str":null,"user":{"is_translator":false,"profile_background_tile":true,"profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/298443445\/355584171.jpg","listed_count":5040,"friends_count":8477,"profile_link_color":"ff0000","profile_sidebar_border_color":"000000","url":"http:\/\/twitpic.com\/photos\/BieberEagle","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/1465491672\/355584171_normal.jpg","profile_image_url":"http:\/\/a2.twimg.com\/profile_images\/1465491672\/355584171_normal.jpg","description":"1 name, 1 inspiration, 1 hero, 1 smile, 1 singer, 1 boy who changed my life.    B.\u0130.E.B.E.R-Believe In Everything Because Everything\'s Reachable. #NEVERSAYNEVER","default_profile":false,"notifications":null,"time_zone":"Paris","followers_count":14506,"default_profile_image":false,"lang":"en","profile_use_background_image":true,"screen_name":"BieberEagle","show_all_inline_media":false,"geo_enabled":false,"profile_background_color":"ffffff","location":"\u2665 Albania \u2665 ","id_str":"229067923","profile_background_image_url":"http:\/\/a2.twimg.com\/profile_background_images\/298443445\/355584171.jpg","favourites_count":89,"protected":false,"follow_request_sent":null,"following":null,"name":"truebelieber","statuses_count":24279,"verified":false,"created_at":"Tue Dec 21 12:35:18 +0000 2010","profile_text_color":"000000","id":229067923,"contributors_enabled":false,"utc_offset":3600,"profile_sidebar_fill_color":""},"id":96638597737889792,"created_at":"Thu Jul 28 17:50:11 +0000 2011","geo":null,"in_reply_to_screen_name":null},"retweet_count":"100+","source":"web","entities":{"user_mentions":[{"indices":[3,15],"screen_name":"BieberEagle","id_str":"229067923","name":"truebelieber","id":229067923}],"hashtags":[],"urls":[]},"truncated":false,"place":null,"id_str":"96965037637382145","in_reply_to_user_id":null,"in_reply_to_status_id":null,"favorited":false,"in_reply_to_status_id_str":null,"user":{"is_translator":false,"profile_background_tile":true,"profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/300419382\/ipod.7.14_054.JPG","listed_count":3,"friends_count":1150,"profile_link_color":"00cccc","profile_sidebar_border_color":"c8ff00","url":"http:\/\/www.facebook.com\/blovedbecca180","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/1466752962\/block_party_7.27.11_015_normal.JPG","profile_image_url":"http:\/\/a3.twimg.com\/profile_images\/1466752962\/block_party_7.27.11_015_normal.JPG","description":"if ya wanna know something about me, then get to know me. \\n\\r\\n\\ri promise, you wont regret it. (:\\r\\ni love justin bieber with an extreme burning passion!","default_profile":false,"notifications":null,"time_zone":"Central Time (US & Canada)","followers_count":361,"default_profile_image":false,"lang":"en","profile_use_background_image":true,"screen_name":"beccaxannxx","show_all_inline_media":false,"geo_enabled":false,"profile_background_color":"ff0066","location":"","id_str":"65624607","profile_background_image_url":"http:\/\/a3.twimg.com\/profile_background_images\/300419382\/ipod.7.14_054.JPG","favourites_count":266,"protected":false,"follow_request_sent":null,"following":null,"name":"beccaxannxx","statuses_count":2512,"verified":false,"created_at":"Fri Aug 14 12:36:35 +0000 2009","profile_text_color":"6a39d4","id":65624607,"contributors_enabled":false,"utc_offset":-21600,"profile_sidebar_fill_color":"ff00bb"},"id":96965037637382145,"created_at":"Fri Jul 29 15:27:21 +0000 2011","geo":null,"in_reply_to_screen_name":null}'
       
   114 
       
   115 
       
   116 class TestTwitterProcessor(unittest.TestCase):
       
   117     
       
   118     def setUp(self):
       
   119         self.engine, self.metadata = models.setup_database('sqlite:///:memory:', echo=True)
       
   120         sessionMaker = sessionmaker(bind=self.engine)
       
   121         self.session = sessionMaker()
       
   122         file, self.tmpfilepath = tempfile.mkstemp()
       
   123         os.close(file)
       
   124 
       
   125 
       
   126     def testTwitterProcessor(self):
       
   127         tp = TwitterProcessor(None, original_json, None, self.session, self.tmpfilepath)
       
   128         tp.process()
       
   129         self.session.commit()
       
   130         
       
   131         self.assertEquals(1, self.session.query(models.TweetSource).count())
       
   132         self.assertEquals(1, self.session.query(models.Tweet).count())
       
   133         self.assertEquals(2, self.session.query(models.User).count())
       
   134         tweet = self.session.query(models.Tweet).first()
       
   135         self.assertFalse(tweet.user is None)
       
   136         self.assertEqual(u"beccaxannxx",tweet.user.name)
       
   137         self.assertEqual(65624607,tweet.user.id)
       
   138         self.assertEqual(1,len(tweet.entity_list))
       
   139         self.assertEqual(u"BieberEagle", tweet.entity_list[0].user.screen_name)
       
   140 
       
   141 
    92     def tearDown(self):
   142     def tearDown(self):
    93         self.session.close()
   143         self.session.close()
    94 
   144         self.engine.dispose()
       
   145         os.remove(self.tmpfilepath)
    95 
   146 
    96 if __name__ == '__main__':
   147 if __name__ == '__main__':
    97     unittest.main()
   148     unittest.main()