def test_storage_listUser(self): empty_storage = Storage(**get_opts()) self.assertEqual(empty_storage.getUsers(), []) empty_storage.addUser(self.user1) self.assertEqual(empty_storage.getUsers(), [self.user1]) empty_storage.addUser(self.user2) self.assertEqual(empty_storage.getUsers(), [self.user1, self.user2]) # should raise an Exception, if user already there with self.assertRaises(UserExistsAlreadyError, msg=f"Storage {empty_storage}"): empty_storage.addUser(self.user1)
class Test_TokenStorage(unittest.TestCase): def setUp(self): Util.monkeypatch() self.empty_storage = Storage(**get_opts()) self.user1 = User("Max Mustermann") self.user2 = User("Mimi Mimikri") self.service1 = LoginService(servicename="MusterService", implements=["metadata"]) self.service2 = LoginService(servicename="FahrService", implements=["metadata"]) self.oauthservice1 = OAuth2Service( servicename="BetonService", implements=["metadata"], authorize_url="http://localhost/oauth/authorize", refresh_url="http://localhost/oauth/token", client_id="MNO", client_secret="UVW", ) self.oauthservice2 = OAuth2Service( servicename="FlugService", implements=["metadata"], authorize_url="http://localhost21/oauth/authorize", refresh_url="http://localhost21/oauth/token", client_id="XCA", client_secret="BCXY", ) self.empty_storage.addService(self.service1) self.empty_storage.addService(self.oauthservice1) self.empty_storage.addService(self.oauthservice2) self.token1 = Token(self.user1, self.service1, "ABC") self.token_like_token1 = Token(self.user1, self.service1, "DEF") self.token2 = Token(self.user1, self.oauthservice1, "XYZ") self.token3 = Token(self.user2, self.service2, "XASD") self.token4 = Token(self.user2, self.service1, "IOAJSD") self.oauthtoken1 = OAuth2Token(self.user1, self.oauthservice1, "ABC", "X_ABC") self.oauthtoken_like_token1 = OAuth2Token(self.user1, self.oauthservice1, "ABC", "X_DEF") self.oauthtoken2 = OAuth2Token(self.user1, self.oauthservice1, "XYZ", "X_XYZ") self.oauthtoken3 = OAuth2Token(self.user1, self.oauthservice2, "XYZ", "X_XYZ") def test_storage_listUser(self): empty_storage = Storage(**get_opts()) self.assertEqual(empty_storage.getUsers(), []) empty_storage.addUser(self.user1) self.assertEqual(empty_storage.getUsers(), [self.user1]) empty_storage.addUser(self.user2) self.assertEqual(empty_storage.getUsers(), [self.user1, self.user2]) # should raise an Exception, if user already there with self.assertRaises(UserExistsAlreadyError, msg=f"Storage {empty_storage}"): empty_storage.addUser(self.user1) def test_tokenstorage_add_service(self): empty_storage = Storage(**get_opts()) empty_storage.addUser(self.user1) # test the exception raise with self.assertRaises(ServiceNotExistsError): empty_storage.addTokenToUser(self.token1, self.user1) # now should work empty_storage.addService(self.service1) empty_storage.addTokenToUser(self.token1, self.user1) self.assertEqual(empty_storage.getTokens(self.user1), [self.token1]) with self.assertRaises(ServiceExistsAlreadyError): self.empty_storage.addService(self.service1) def test_storage_getUser_getToken(self): empty_storage = Storage(**get_opts()) with self.assertRaises(UserNotExistsError): empty_storage.getUser(self.user1.username) with self.assertRaises(UserNotExistsError): empty_storage.getTokens(self.user1.username) empty_storage.addUser(self.user1) empty_storage.addService(self.service1) empty_storage.addTokenToUser(self.token1, self.user1) self.assertEqual(empty_storage.getUser(self.user1.username), self.user1) self.assertEqual(empty_storage.getTokens(self.user1.username), [self.token1]) self.assertEqual(empty_storage.getToken(self.user1.username, 0), self.token1) self.assertEqual(empty_storage.getTokens(self.user1), [self.token1]) empty_storage.addUser(self.user2) empty_storage.addService(self.service2) empty_storage.addTokenToUser(self.token3, self.user2) self.assertEqual(empty_storage.getUser(self.user2.username), self.user2) self.assertEqual(empty_storage.getUser(self.user1.username), self.user1) self.assertEqual(empty_storage.getToken(self.user2.username, 0), self.token3) self.assertEqual( empty_storage.getToken(self.user1.username, self.token1.servicename), self.token1, ) self.assertEqual( empty_storage.getToken(self.user2.username, self.token3.servicename), self.token3, ) empty_storage.addTokenToUser(self.token4, self.user2) self.assertEqual( empty_storage.getToken(self.user2.username, self.token4.servicename), self.token4, ) def test_tokenstorage_add_user(self): # raise an exception, if a user not exist for token with self.assertRaises(UserNotExistsError, msg=f"Storage {self.empty_storage}"): self.empty_storage.addTokenToUser(self.token1, self.user1) # add one user, so in storage should be one expected = {"Max Mustermann": {"data": self.user1, "tokens": []}} self.empty_storage.addUser(self.user1) self.assertEqual( self.empty_storage._storage, expected, msg=f"Storage {self.empty_storage}", ) # should raise an Exception, if user already there with self.assertRaises(UserExistsAlreadyError, msg=f"Storage {self.empty_storage}"): self.empty_storage.addUser(self.user1) # add token to user expected[self.user1.username]["tokens"].append(self.token1) self.empty_storage.addTokenToUser(self.token1, self.user1) self.assertEqual( self.empty_storage._storage, expected, msg=f"Storage {self.empty_storage}", ) # raise an exception, if token already there with self.assertRaises(UserHasTokenAlreadyError, msg=f"Storage {self.empty_storage}"): self.empty_storage.addTokenToUser(self.token1, self.user1) def setUpRemove(self): # setUp self.empty_storage.addUser(self.user1) self.empty_storage.addUser(self.user2) def test_tokenstorage_remove_user(self): self.setUpRemove() expected = {} expected[self.user1.username] = {"data": self.user1, "tokens": []} expected[self.user2.username] = {"data": self.user2, "tokens": []} # remove user self.empty_storage.removeUser(self.user1) del expected[self.user1.username] self.assertEqual(self.empty_storage._storage, expected) with self.assertRaises(UserNotExistsError): self.empty_storage.removeUser(self.user1) self.empty_storage.removeUser(self.user2) del expected[self.user2.username] self.assertEqual(self.empty_storage._storage, expected) # storage now empty self.assertEqual(self.empty_storage.getUsers(), []) def test_tokenstorage_add_token_force(self): # add Token to not existing user with force expected = { "Max Mustermann": { "data": self.user1, "tokens": [self.token1] } } self.empty_storage.addTokenToUser(self.token1, self.user1, Force=True) self.assertEqual( self.empty_storage._storage, expected, msg=f"Storage {self.empty_storage}", ) # now overwrite the already existing token with force expected[self.user1.username]["tokens"][0] = self.token_like_token1 self.empty_storage.addTokenToUser(self.token_like_token1, self.user1, Force=True) self.assertEqual( self.empty_storage._storage, expected, msg=f"Storage {self.empty_storage}", ) def test_tokenstorage_oauthtokens_add_user(self): # empty storage self.assertEqual(self.empty_storage._storage, {}) # raise an exception, if a user not exist for token with self.assertRaises(UserNotExistsError, msg=f"Storage {self.empty_storage}"): self.empty_storage.addTokenToUser(self.oauthtoken1, self.user1) # add one user, so in storage should be one expected = {"Max Mustermann": {"data": self.user1, "tokens": []}} self.empty_storage.addUser(self.user1) self.assertEqual( self.empty_storage._storage, expected, msg=f"Storage {self.empty_storage}", ) # should raise an Exception, if user already there with self.assertRaises(UserExistsAlreadyError, msg=f"Storage {self.empty_storage}"): self.empty_storage.addUser(self.user1) # add token to user expected[self.user1.username]["tokens"].append(self.oauthtoken1) self.empty_storage.addTokenToUser(self.oauthtoken1, self.user1) self.assertEqual( self.empty_storage._storage, expected, msg=f"Storage {self.empty_storage}", ) # raise an exception, if token already there with self.assertRaises(UserHasTokenAlreadyError, msg=f"Storage {self.empty_storage}"): self.empty_storage.addTokenToUser(self.oauthtoken1, self.user1) def test_tokenstorage_oauthtokens_add_token_force(self): # add Token to not existing user with force expected = { "Max Mustermann": { "data": self.user1, "tokens": [self.oauthtoken1] } } self.empty_storage.addTokenToUser(self.oauthtoken1, self.user1, Force=True) self.assertEqual( self.empty_storage._storage, expected, msg=f"Storage {self.empty_storage}", ) # now overwrite the already existing token with force expected[ self.user1.username]["tokens"][0] = self.oauthtoken_like_token1 self.empty_storage.addTokenToUser(self.oauthtoken_like_token1, self.user1, Force=True) self.assertEqual( self.empty_storage._storage, expected, msg= f"\nStorage: {self.empty_storage._storage}\n expected: {expected}", ) def test_tokenstorage_tokens_under_user(self): oauthtoken1 = OAuth2Token(self.user1, self.oauthservice1, "ABC", "X_ABC") self.empty_storage.addTokenToUser(oauthtoken1, self.user1, Force=True) oauthtoken2 = OAuth2Token(self.user1, self.oauthservice2, "XYZ", "X_XYZ") self.empty_storage.addTokenToUser(oauthtoken2, self.user1, Force=True) token1 = Token(self.user1, self.service2, "ISADF") with self.assertRaises(ServiceNotExistsError): self.empty_storage.addTokenToUser(token1, self.user1, Force=True) self.empty_storage.addTokenToUser(self.token1, self.user1, Force=True) def test_tokenstorage_service_implementstype(self): empty_storage = Storage(**get_opts()) service = LoginService(servicename="longname", implements=["fileStorage", "metadata"]) empty_storage.addUser(self.user1) token1 = Token(self.user1, service, "ISADF") # test the exception raise with self.assertRaises(ServiceNotExistsError): empty_storage.addTokenToUser(token1, self.user1) # now should work self.assertTrue(empty_storage.addService(service)) self.assertTrue(empty_storage.addTokenToUser(token1, self.user1)) self.assertEqual(empty_storage.getTokens(self.user1), [token1]) with self.assertRaises(ServiceExistsAlreadyError): empty_storage.addService(service) def test_tokenstorage_remove_mastertoken(self): expected = { self.user1.username: { "data": self.user1, "tokens": [self.oauthtoken1] } } self.empty_storage.addTokenToUser(self.oauthtoken1, self.user1, Force=True) self.assertEqual( self.empty_storage._storage, expected, msg=f"Storage {self.empty_storage}", ) expected[self.user1.username]["tokens"].append(self.oauthtoken3) self.empty_storage.addTokenToUser(self.oauthtoken3, self.user1) self.assertEqual( self.empty_storage._storage, expected, msg=f"Storage {self.empty_storage}", ) self.empty_storage.removeToken(self.user1, self.oauthtoken1) self.assertEqual(self.empty_storage.storage, {}) def test_tokenstorage_remove_token(self): expected = { self.user1.username: { "data": self.user1, "tokens": [self.oauthtoken1] } } self.empty_storage.addTokenToUser(self.oauthtoken1, self.user1, Force=True) self.assertEqual( self.empty_storage._storage, expected, msg=f"Storage {self.empty_storage}", ) expected[self.user1.username]["tokens"].append(self.oauthtoken3) self.empty_storage.addTokenToUser(self.oauthtoken3, self.user1) self.assertEqual( self.empty_storage._storage, expected, msg=f"Storage {self.empty_storage}", ) del expected[self.user1.username]["tokens"][1] self.empty_storage.removeToken(self.user1, self.oauthtoken3) self.assertEqual(self.empty_storage.storage, expected)