import json from unittest import TestCase from unittest.mock import patch from ActiveCollabAPI import AC_LOGIN_BASE_URL from ActiveCollabAPI.AcAuthenticator import AcAuthenticator class TestAcAuthenticator(TestCase): def mock_login_success(self): return { "accounts": [ { "name": 12345678, "url": "https:\/\/app.activecollab.com\/12345678", "display_name": "433339", "user_display_name": "#12345678", "position": 1, "class": "ActiveCollab\\Shepherd\\Model\\Account\\ActiveCollab\\FeatherAccount", "status": "trial" } ], "is_ok": 1, "user": { "avatar_url": "https:\/\/activecollab.com\/avatar.php?user_id=12345678&size=80", "first_name": "users first", "last_name": "users last", "intent": "random-string"} } def test_login_success_gets_user_and_accounts_list(self): with patch("ActiveCollabAPI.AcAuthenticator.requests.post") as mock_post: mock_post.return_value.status_code = 200 mock_post.return_value.json.return_value = self.mock_login_success() email = "collab@example.com" password = "VeryS3cret!" authenticator = AcAuthenticator(AC_LOGIN_BASE_URL) response = authenticator.login(email, password) self.assertEqual(200, response.status_code) res_data = response.json() self.assertEqual(1, res_data['is_ok']) user = res_data["user"] self.assertEqual("users first", user["first_name"]) self.assertEqual("users last", user["last_name"]) accounts = res_data["accounts"] self.assertGreater(len(accounts), 0) self.assertEqual(12345678, accounts[0]["name"]) def mock_login_failed(self): return { "is_ok": 0 } def test_login_failed_not_ok(self): with patch("ActiveCollabAPI.AcAuthenticator.requests.post") as mock_post: mock_post.return_value.status_code = 200 mock_post.return_value.json.return_value = self.mock_login_failed() email = "collab@example.com" password = "VeryS3cret!" authenticator = AcAuthenticator(AC_LOGIN_BASE_URL) response = authenticator.login(email, password) self.assertEqual(200, response.status_code) res_data = response.json() self.assertNotEqual(1, res_data['is_ok']) def mock_login_forbidden(self): return { } def test_login_forbidden(self): with patch("ActiveCollabAPI.AcAuthenticator.requests.post") as mock_post: mock_post.return_value.status_code = 401 mock_post.return_value.json.return_value = self.mock_login_forbidden() email = "collab@example.com" password = "VeryS3cret!" authenticator = AcAuthenticator(AC_LOGIN_BASE_URL) response = authenticator.login(email, password) self.assertEqual(401, response.status_code)