Пример #1
0
class SyncUserTestCase(unittest.TestCase):
    def setUp(self):
        self.user = SyncUser(["test", "Twitter"])

    def tearDown(self):
        self.user = None

    def testSanitizesId(self):
        ids = [["blabla", "Twitter"], {"nick": "blabla", "protocol": "Twitter"}, "test_Twitter"]

        user = SyncUser(ids[0])
        self.assertEquals(user.id["nick"], ids[0][0])
        self.assertEquals(user.id["protocol"], ids[0][1])

        user = SyncUser(ids[1])
        self.assertEquals(user.id["nick"], ids[1]["nick"])
        self.assertEquals(user.id["protocol"], ids[1]["protocol"])

        user = SyncUser(ids[2])
        self.assertEquals(user.id["nick"], "test")
        self.assertEquals(user.id["protocol"], "Twitter")

    def testRefusesWrongId(self):
        ids = [1, "lol", ["ha"], {"nick": "blabla"}, {"protocol": "Twitter"}, {"hehe": "haha", "hoho": "hihi"}]

        for id in ids:
            self.assertRaises(InvalidUserIdException, SyncUser, id)

    def testUserToHash(self):
        hash = "" + str(self.user)

        self.assertEquals(hash, "test_Twitter")

    def testAcceptsAndReturnsData(self):
        data = {
            "searches": ["bla", "lol", "hah"],
            "groups": ["meh", "moh"],
            "seen": [1, 2, 3, 4],
            "ranks": {"lol1": 0.3, "lol2": 0.1},
        }

        fixture = self.user.data(data)

        for k in ["searches", "groups", "seen", "ranks"]:
            self.assertEquals(data[k], fixture[k].items)

    def testCanTakeSyncDataAsInput(self):
        data = SyncData(
            {
                "searches": ["bla", "lol", "hah"],
                "groups": ["meh", "moh"],
                "seen": [1, 2, 3, 4],
                "ranks": {"lol1": 0.3, "lol2": 0.1},
            }
        )
        self.user.data(data)
Пример #2
0
	def testAcceptsData (self):
		user = SyncUser( ["test", "Twitter"] )
		user.data({
				"searches" : ["bla", "lol"],
				"groups" : ["hah", "heh"],
				"seen" : [1,2,3],
				"ranks" : {"lol1": 0.3, "lol2" : 0.1 }
				})
		
		self.manager.write( user )
		
		fixture = self.manager.read( str(user) )
		
		for k in self.keys:
			self.assertEquals( fixture[k].items, user.data()[k].items )
Пример #3
0
	def testSyncsUnknownUser (self):
		data = {
				"searches" : SyncDataEntry( ["bla"] ),
				"groups" : SyncDataEntry( ["hah", "heh", "hoho"] ),
				"seen" : SyncDataEntry( [1,2,3,5,6] ),
				"ranks" : SyncDataEntry( {"lol1": 0.6, "lol2" : 0.1 } )
				}
		user = SyncUser( ["dontexist", "nope"] )
		user.data( data )
		
		self.manager.sync( user )
		fixture = self.manager.read( user )
		
		for k in self.keys:
			self.assertEquals( fixture[k].items, data[k].items )
Пример #4
0
	def testCanReadWithSyncUserAsArgument (self):
		data = {
				"searches" : SyncDataEntry( ["bla"] ),
				"groups" : SyncDataEntry( ["hah", "heh", "hoho"] ),
				"seen" : SyncDataEntry( [1,2,3,5,6] ),
				"ranks" : SyncDataEntry( {"lol1": 0.6, "lol2" : 0.1 } )
				}
		user = SyncUser( ["bla", "Twitter"] )
		user.data( data )
		
		self.manager.write( user )
		
		fixture = self.manager.read( user )
		
		for k in self.keys:
			self.assertEquals( fixture[k].items, user.data()[k].items )
Пример #5
0
	def testSyncEqualData (self):
		data1 = {
				"searches" : SyncDataEntry( ["bla", "lol"] ),
				"groups" : SyncDataEntry( ["hah", "heh"] ),
				"seen" : SyncDataEntry( [1,2,3] ),
				"ranks" : SyncDataEntry( {"lol1": 0.3, "lol2" : 0.1 } )
				}
		equalData = copy.deepcopy( data1 )
		user = SyncUser( ["syncer", "Twitter"] )
		user.data( data1 )
		
		self.manager.write( user )
		
		user.data( equalData )
		
		changedData = self.manager.sync( user )
		
		self.assert_( len( changedData ) == 0 )
Пример #6
0
	def testStoresOnDeath (self):
		data = {
				"searches" : ["bla", "lol"],
				"groups" : ["hah", "heh"],
				"seen" : [1,2,3],
				"ranks" : {"lol1": 0.3, "lol2" : 0.1 }
				}
		user = SyncUser( ["testicles", "Twitter"] )
		user.data(data)
		
		self.manager.write( user )
		
		self.tearDown()
		self.setUp()
		
		fixture = self.manager.read( str(user) )
		
		for k in self.keys:
			self.assertEquals( fixture[k].items, data[k] )
Пример #7
0
	def testSyncChangesAreNewerAndStateIsStored (self):
		origTime = time.time()
		serverData = {
				"searches" : SyncDataEntry( ["bla", "lol"] ),
				"groups" : SyncDataEntry( ["hah", "heh"] ),
				"seen" : SyncDataEntry( [1,2,3] ),
				"ranks" : SyncDataEntry( {"lol1": 0.3, "lol2" : 0.1 } )
				}
		userData = {
				"searches" : SyncDataEntry( ["bla"] ),
				"groups" : SyncDataEntry( ["hah", "heh", "hoho"] ),
				"seen" : SyncDataEntry( [1,2,3,5,6] ),
				"ranks" : SyncDataEntry( {"lol1": 0.6, "lol2" : 0.1 } )
				}
		origUser = SyncUser( ["syncer", "Twitter"] )
		origUser.data( serverData )
		random.seed( time.time() )
		
		
		# permute a random amount of changed entries over random timestamp differences
		for i in range(100):
			data = {}
			user = SyncUser( ["syncer", "Twitter"] )
			expectedChange = {}
			usedKeys = []
			
			for j in range(random.randint(0,4)):
				t = origTime+random.choice( [-1,1] )
				k = random.choice( self.keys )
				if k in usedKeys:
					continue
				usedKeys.append( k )
				
				data[k] = userData[k]
				data[k].timestamp = t
				
				if t < origTime:
					expectedChange[k] = serverData[k]
			
			for k in self.keys:
				if k not in usedKeys:
					data[k] = serverData[k]
			
			self.manager.write( origUser )
			user.data( data )
			changes = self.manager.sync( user )
			
			self.assertEquals( len(expectedChange), len(changes) )
			
			for k in expectedChange.keys():
				self.assertEquals( expectedChange[k].items, changes[k].items )
				data[k] = changes[k]
			
			fixture = self.manager.read( user )
			
			for k in self.keys:
				self.assertEquals( fixture[k].items, data[k].items )
Пример #8
0
 def setUp(self):
     self.user = SyncUser(["test", "Twitter"])