зеркало из
				https://github.com/viginum-datalab/twscrape.git
				synced 2025-10-31 14:06:12 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			139 строки
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			139 строки
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from twscrape.accounts_pool import AccountsPool
 | |
| from twscrape.utils import utc_ts
 | |
| 
 | |
| 
 | |
| async def test_add_accounts(pool_mock: AccountsPool):
 | |
|     # should add account
 | |
|     await pool_mock.add_account("user1", "pass1", "email1", "email_pass1")
 | |
|     acc = await pool_mock.get("user1")
 | |
|     assert acc.username == "user1"
 | |
|     assert acc.password == "pass1"
 | |
|     assert acc.email == "email1"
 | |
|     assert acc.email_password == "email_pass1"
 | |
| 
 | |
|     # should not add account with same username
 | |
|     await pool_mock.add_account("user1", "pass2", "email2", "email_pass2")
 | |
|     acc = await pool_mock.get("user1")
 | |
|     assert acc.username == "user1"
 | |
|     assert acc.password == "pass1"
 | |
|     assert acc.email == "email1"
 | |
|     assert acc.email_password == "email_pass1"
 | |
| 
 | |
|     # should not add account with different username case
 | |
|     await pool_mock.add_account("USER1", "pass2", "email2", "email_pass2")
 | |
|     acc = await pool_mock.get("user1")
 | |
|     assert acc.username == "user1"
 | |
|     assert acc.password == "pass1"
 | |
|     assert acc.email == "email1"
 | |
|     assert acc.email_password == "email_pass1"
 | |
| 
 | |
|     # should add account with different username
 | |
|     await pool_mock.add_account("user2", "pass2", "email2", "email_pass2")
 | |
|     acc = await pool_mock.get("user2")
 | |
|     assert acc.username == "user2"
 | |
|     assert acc.password == "pass2"
 | |
|     assert acc.email == "email2"
 | |
|     assert acc.email_password == "email_pass2"
 | |
| 
 | |
| 
 | |
| async def test_get_all(pool_mock: AccountsPool):
 | |
|     # should return empty list
 | |
|     accs = await pool_mock.get_all()
 | |
|     assert len(accs) == 0
 | |
| 
 | |
|     # should return all accounts
 | |
|     await pool_mock.add_account("user1", "pass1", "email1", "email_pass1")
 | |
|     await pool_mock.add_account("user2", "pass2", "email2", "email_pass2")
 | |
|     accs = await pool_mock.get_all()
 | |
|     assert len(accs) == 2
 | |
|     assert accs[0].username == "user1"
 | |
|     assert accs[1].username == "user2"
 | |
| 
 | |
| 
 | |
| async def test_save(pool_mock: AccountsPool):
 | |
|     # should save account
 | |
|     await pool_mock.add_account("user1", "pass1", "email1", "email_pass1")
 | |
|     acc = await pool_mock.get("user1")
 | |
|     acc.password = "pass2"
 | |
|     await pool_mock.save(acc)
 | |
|     acc = await pool_mock.get("user1")
 | |
|     assert acc.password == "pass2"
 | |
| 
 | |
|     # should not save account
 | |
|     acc = await pool_mock.get("user1")
 | |
|     acc.username = "user2"
 | |
|     await pool_mock.save(acc)
 | |
|     acc = await pool_mock.get("user1")
 | |
|     assert acc.username == "user1"
 | |
| 
 | |
| 
 | |
| async def test_get_for_queue(pool_mock: AccountsPool):
 | |
|     Q = "test_queue"
 | |
| 
 | |
|     # should return account
 | |
|     await pool_mock.add_account("user1", "pass1", "email1", "email_pass1")
 | |
|     await pool_mock.set_active("user1", True)
 | |
|     acc = await pool_mock.get_for_queue(Q)
 | |
|     assert acc is not None
 | |
|     assert acc.username == "user1"
 | |
|     assert acc.active is True
 | |
|     assert acc.locks is not None
 | |
|     assert Q in acc.locks
 | |
|     assert acc.locks[Q] is not None
 | |
| 
 | |
|     # should return None
 | |
|     acc = await pool_mock.get_for_queue(Q)
 | |
|     assert acc is None
 | |
| 
 | |
| 
 | |
| async def test_account_unlock(pool_mock: AccountsPool):
 | |
|     Q = "test_queue"
 | |
| 
 | |
|     await pool_mock.add_account("user1", "pass1", "email1", "email_pass1")
 | |
|     await pool_mock.set_active("user1", True)
 | |
|     acc = await pool_mock.get_for_queue(Q)
 | |
|     assert acc is not None
 | |
|     assert acc.locks[Q] is not None
 | |
| 
 | |
|     # should unlock account and make available for queue
 | |
|     await pool_mock.unlock(acc.username, Q)
 | |
|     acc = await pool_mock.get_for_queue(Q)
 | |
|     assert acc is not None
 | |
|     assert acc.locks[Q] is not None
 | |
| 
 | |
|     # should update lock time
 | |
|     end_time = utc_ts() + 60  # + 1 minute
 | |
|     await pool_mock.lock_until(acc.username, Q, end_time)
 | |
| 
 | |
|     acc = await pool_mock.get(acc.username)
 | |
|     assert int(acc.locks[Q].timestamp()) == end_time
 | |
| 
 | |
| 
 | |
| async def test_get_stats(pool_mock: AccountsPool):
 | |
|     Q = "SearchTimeline"
 | |
| 
 | |
|     # should return empty stats
 | |
|     stats = await pool_mock.stats()
 | |
|     for k, v in stats.items():
 | |
|         assert v == 0, f"{k} should be 0"
 | |
| 
 | |
|     # should increate total
 | |
|     await pool_mock.add_account("user1", "pass1", "email1", "email_pass1")
 | |
|     stats = await pool_mock.stats()
 | |
|     assert stats["total"] == 1
 | |
|     assert stats["active"] == 0
 | |
| 
 | |
|     # should increate active
 | |
|     await pool_mock.set_active("user1", True)
 | |
|     stats = await pool_mock.stats()
 | |
|     assert stats["total"] == 1
 | |
|     assert stats["active"] == 1
 | |
| 
 | |
|     # should update queue stats
 | |
|     acc = await pool_mock.get_for_queue(Q)
 | |
|     assert acc is not None
 | |
|     stats = await pool_mock.stats()
 | |
|     assert stats["total"] == 1
 | |
|     assert stats["active"] == 1
 | |
|     assert stats[f"locked_{Q}"] == 1
 | 
