From 7b8df1b65ebae950cdf18039f4c9414dfb021ea5 Mon Sep 17 00:00:00 2001 From: Lucino772 Date: Wed, 2 Mar 2022 11:33:27 +0100 Subject: [PATCH] test: added tests for check_username function --- tests/session/mock_server.py | 34 +++++++++++++++++ tests/session/test_mojang_check_username.py | 42 +++++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 tests/session/test_mojang_check_username.py diff --git a/tests/session/mock_server.py b/tests/session/mock_server.py index e8956764..f8b47fa2 100644 --- a/tests/session/mock_server.py +++ b/tests/session/mock_server.py @@ -70,6 +70,40 @@ def product_voucher(self, url, **kwargs): return response + def check_username(self, url, *args, **kwargs): + username = urlparse(url).path.split("/")[-2] + response = Response() + if not self._is_token_valid(kwargs.get("headers", {})): + response.status_code = 401 + elif username in self._unavailable_names: + response.status_code = 200 + response._content = json.dumps({"status": "DUPLICATE"}).encode( + "utf-8" + ) + response.encoding = "utf-8" + else: + response.status_code = 200 + response._content = json.dumps({"status": "AVAILABLE"}).encode( + "utf-8" + ) + response.encoding = "utf-8" + + return response + + def check_username_429(self, url, *args, **kwargs): + response = self.check_username(url, *args, **kwargs) + response.status_code = 429 + response._content = json.dumps( + { + "path": "/minecraft/profile/name/:username/available", + "errorType": "TooManyRequestsException", + "error": "TooManyRequestsException", + "errorMessage": "The client has sent too many requests within a certain amount of time", + "developerMessage": "The client has sent too many requests within a certain amount of time", + } + ).encode("utf-8") + return response + def user_name_change(self, *args, **kwargs): response = Response() if not self._is_token_valid(kwargs.get("headers", {})): diff --git a/tests/session/test_mojang_check_username.py b/tests/session/test_mojang_check_username.py new file mode 100644 index 00000000..806b4518 --- /dev/null +++ b/tests/session/test_mojang_check_username.py @@ -0,0 +1,42 @@ +import unittest +from unittest import mock + +from mojang.api import session +from mojang.exceptions import Unauthorized +from tests.session.mock_server import MockSessionServer + +VALID_ACCESS_TOKEN = "MY_ACCESS_TOKEN" +INVALID_ACCESS_TOKEN = "NOT_MY_ACCESS_TOKEN" + +mock_server = MockSessionServer( + VALID_ACCESS_TOKEN, unavailable_names=["Notch"] +) + + +class TestMojangCheckUsername(unittest.TestCase): + @mock.patch("requests.get", side_effect=mock_server.check_username) + def test_available_name(self, mock_get: mock.MagicMock): + self.assertEqual( + session.check_username(VALID_ACCESS_TOKEN, "lucino"), True + ) + + @mock.patch("requests.get", side_effect=mock_server.check_username) + def test_unavailable_name(self, mock_get: mock.MagicMock): + self.assertEqual( + session.check_username(VALID_ACCESS_TOKEN, "Notch"), False + ) + + @mock.patch("requests.get", side_effect=mock_server.check_username) + def test_invalid_token(self, mock_get: mock.MagicMock): + self.assertRaises( + Unauthorized, + session.check_username, + INVALID_ACCESS_TOKEN, + "lucino", + ) + + @mock.patch("requests.get", side_effect=mock_server.check_username_429) + def test_too_many_requests(self, mock_get: mock.MagicMock): + self.assertRaises( + RuntimeError, session.check_username, VALID_ACCESS_TOKEN, "lucino" + )