From a0963c261cf7c4348647b10deee608fe80d534d7 Mon Sep 17 00:00:00 2001 From: def Date: Mon, 14 Nov 2022 06:19:25 +0400 Subject: [PATCH] test: i tried so hard and get so far --- .../test_repository/test_tokens_repository.py | 329 ++++++++++++------ .../test_tokens_repository/tokens.json | 10 +- 2 files changed, 228 insertions(+), 111 deletions(-) diff --git a/tests/test_graphql/test_repository/test_tokens_repository.py b/tests/test_graphql/test_repository/test_tokens_repository.py index f664ecb..5bcb300 100644 --- a/tests/test_graphql/test_repository/test_tokens_repository.py +++ b/tests/test_graphql/test_repository/test_tokens_repository.py @@ -3,79 +3,74 @@ # pylint: disable=missing-function-docstring from datetime import datetime -from typing import Optional -from pydantic import BaseModel + import pytest + from selfprivacy_api.models.tokens.new_device_key import NewDeviceKey from selfprivacy_api.models.tokens.recovery_key import RecoveryKey - -from tests.common import read_json +from selfprivacy_api.models.tokens.token import Token +from selfprivacy_api.repositories.tokens.exceptions import ( + MnemonicError, + RecoveryKeyIsNotValidError, + RecoveryKeyNotFoundError, + RecoveryTokenError, + TokenNotFoundError, +) from selfprivacy_api.repositories.tokens.json_tokens_repository import ( JsonTokensRepository, ) -from selfprivacy_api.models.tokens.token import Token -from selfprivacy_api.repositories.tokens.exceptions import ( - TokenNotFoundError, - RecoveryKeyNotFoundError, - MnemonicError, - RecoveryKeyIsNotValidError, - RecoveryTokenError, -) +from tests.common import read_json -class TokenMock(BaseModel): - token: str - device_name: str - created_at: datetime - - @staticmethod - def generate(device_name: str) -> "Token": - return Token( - token="iamtoken", - device_name="imnew", - created_at=datetime(2022, 7, 15, 17, 41, 31, 675698), - ) - - -class NewDeviceKeyMock(BaseModel): - key: str - created_at: datetime - expires_at: datetime - - @staticmethod - def generate() -> "NewDeviceKey": - return NewDeviceKey( - key="imkey", - created_at=datetime(2022, 7, 15, 17, 41, 31, 675698), - expires_at=datetime(2022, 7, 15, 17, 41, 31, 675698), - ) - - -class RecoveryKeyMock(BaseModel): - key: str - created_at: datetime - expires_at: Optional[datetime] - uses_left: Optional[int] - - @staticmethod - def generate( - expiration: Optional[datetime], - uses_left: Optional[int], - ) -> "RecoveryKey": - return RecoveryKey( - key="imnewrecoverykey", - created_at=datetime(2022, 7, 15, 17, 41, 31, 675698), - expires_at=None, - uses_left=1, - ) +class RecoveryKeyMockReturnNotValid: + def is_valid() -> bool: + return False @pytest.fixture def mock_new_device_key_generate(mocker): mock = mocker.patch( - "selfprivacy_api.repositories.tokens.json_tokens_repository.NewDeviceKey", + "selfprivacy_api.repositories.tokens.json_tokens_repository.NewDeviceKey.generate", autospec=True, - return_value=NewDeviceKeyMock, + return_value=NewDeviceKey( + key="43478d05b35e4781598acd76e33832bb", + created_at=datetime(2022, 7, 15, 17, 41, 31, 675698), + expires_at=datetime(2022, 7, 15, 17, 41, 31, 675698), + ), + ) + return mock + + +@pytest.fixture +def mock_get_recovery_key_return_none(mocker): + mock = mocker.patch( + "selfprivacy_api.repositories.tokens.json_tokens_repository.JsonTokensRepository.get_recovery_key", + autospec=True, + return_value=None, + ) + return mock + + +@pytest.fixture +def mock_generate_token(mocker): + mock = mocker.patch( + "selfprivacy_api.repositories.tokens.json_tokens_repository.Token.generate", + autospec=True, + return_value=Token( + token="ur71mC4aiI6FIYAN--cTL-38rPHS5D6NuB1bgN_qKF4", + device_name="newdevice", + created_at=datetime(2022, 11, 14, 6, 6, 32, 777123), + ), + ) + return mock + + +@pytest.fixture +def mock_get_recovery_key_return_not_valid(mocker): + mock = mocker.patch( + "selfprivacy_api.repositories.tokens.json_tokens_repository.JsonTokensRepository.get_recovery_key", + autospec=True, + return_value=RecoveryKeyMockReturnNotValid, ) return mock @@ -83,9 +78,13 @@ def mock_new_device_key_generate(mocker): @pytest.fixture def mock_token_generate(mocker): mock = mocker.patch( - "selfprivacy_api.repositories.tokens.json_tokens_repository.Token", + "selfprivacy_api.repositories.tokens.json_tokens_repository.Token.generate", autospec=True, - return_value=TokenMock, + return_value=Token( + token="ZuLNKtnxDeq6w2dpOJhbB3iat_sJLPTPl_rN5uc5MvM", + device_name="IamNewDevice", + created_at=datetime(2022, 7, 15, 17, 41, 31, 675698), + ), ) return mock @@ -93,9 +92,14 @@ def mock_token_generate(mocker): @pytest.fixture def mock_recovery_key_generate(mocker): mock = mocker.patch( - "selfprivacy_api.repositories.tokens.json_tokens_repository.RecoveryKey", + "selfprivacy_api.repositories.tokens.json_tokens_repository.RecoveryKey.generate", autospec=True, - return_value=RecoveryKeyMock, + return_value=RecoveryKey( + key="889bf49c1d3199d71a2e704718772bd53a422020334db051", + created_at=datetime(2022, 7, 15, 17, 41, 31, 675698), + expires_at=None, + uses_left=1, + ), ) return mock @@ -105,7 +109,7 @@ def tokens(mocker, datadir): mocker.patch("selfprivacy_api.utils.TOKENS_FILE", new=datadir / "tokens.json") assert read_json(datadir / "tokens.json")["tokens"] == [ { - "token": "iamtoken", + "token": "KG9ni-B-CMPk327Zv1qC7YBQaUGaBUcgdkvMvQ2atFI", "name": "primary_token", "date": "2022-07-15 17:41:31.675698", } @@ -116,9 +120,10 @@ def tokens(mocker, datadir): def test_get_token_by_token_string(tokens): repo = JsonTokensRepository() - assert repo.get_token_by_token_string(token_string="iamtoken") is not None - assert repo.get_token_by_token_string(token_string="iamtoken") == Token( - token="iamtoken", + assert repo.get_token_by_token_string( + token_string="KG9ni-B-CMPk327Zv1qC7YBQaUGaBUcgdkvMvQ2atFI" + ) == Token( + token="KG9ni-B-CMPk327Zv1qC7YBQaUGaBUcgdkvMvQ2atFI", device_name="primary_token", created_at=datetime(2022, 7, 15, 17, 41, 31, 675698), ) @@ -136,7 +141,7 @@ def test_get_token_by_name(tokens): assert repo.get_token_by_name(token_name="primary_token") is not None assert repo.get_token_by_name(token_name="primary_token") == Token( - token="iamtoken", + token="KG9ni-B-CMPk327Zv1qC7YBQaUGaBUcgdkvMvQ2atFI", device_name="primary_token", created_at=datetime(2022, 7, 15, 17, 41, 31, 675698), ) @@ -155,7 +160,7 @@ def test_get_tokens(tokens): assert repo.get_tokens() is not None assert repo.get_tokens() == [ Token( - token="iamtoken", + token="KG9ni-B-CMPk327Zv1qC7YBQaUGaBUcgdkvMvQ2atFI", device_name="primary_token", created_at=datetime(2022, 7, 15, 17, 41, 31, 675698), ) @@ -164,10 +169,10 @@ def test_get_tokens(tokens): def test_create_token(tokens, mock_token_generate): repo = JsonTokensRepository() - assert repo.create_token(device_name="imnew") is not None - assert repo.create_token(device_name="imnew") == Token( - token="iamtoken", - device_name="imnew", + + assert repo.create_token(device_name="IamNewDevice") == Token( + token="ZuLNKtnxDeq6w2dpOJhbB3iat_sJLPTPl_rN5uc5MvM", + device_name="IamNewDevice", created_at=datetime(2022, 7, 15, 17, 41, 31, 675698), ) @@ -175,7 +180,7 @@ def test_create_token(tokens, mock_token_generate): def test_delete_token(tokens, datadir): repo = JsonTokensRepository() input_token = Token( - token="iamtoken", + token="KG9ni-B-CMPk327Zv1qC7YBQaUGaBUcgdkvMvQ2atFI", device_name="primary_token", created_at=datetime(2022, 7, 15, 17, 41, 31, 675698), ) @@ -198,15 +203,14 @@ def test_delete_not_found_token(tokens, datadir): def test_refresh_token(tokens, mock_token_generate): repo = JsonTokensRepository() input_token = Token( - token="imtoken", + token="KG9ni-B-CMPk327Zv1qC7YBQaUGaBUcgdkvMvQ2atFI", device_name="primary_token", created_at=datetime(2022, 7, 15, 17, 41, 31, 675698), ) - assert repo.refresh_token(input_token) is not None assert repo.refresh_token(input_token) == Token( - token="iamtoken", - device_name="imnew", + token="ZuLNKtnxDeq6w2dpOJhbB3iat_sJLPTPl_rN5uc5MvM", + device_name="IamNewDevice", created_at=datetime(2022, 7, 15, 17, 41, 31, 675698), ) @@ -228,10 +232,10 @@ def test_get_recovery_key(tokens): assert repo.get_recovery_key() is not None assert repo.get_recovery_key() == RecoveryKey( - key="iamtoken", - created_at=datetime(2022, 7, 15, 17, 41, 31, 675698), + key="ed653e4b8b042b841d285fa7a682fa09e925ddb2d8906f54", + created_at=datetime(2022, 11, 11, 11, 48, 54, 228038), expires_at=None, - uses_left=None, + uses_left=2, ) @@ -239,28 +243,23 @@ def test_create_recovery_key(tokens, mock_recovery_key_generate, datadir): repo = JsonTokensRepository() assert repo.create_recovery_key(uses_left=1, expiration=None) is not None - assert read_json(datadir / "tokens.json")["recovery_token"] == RecoveryKey( - key="imnewrecoverykey", - created_at=datetime(2022, 7, 15, 17, 41, 31, 675698), - expires_at=None, - uses_left=1, - ) + assert read_json(datadir / "tokens.json")["recovery_token"] == { + "token": "889bf49c1d3199d71a2e704718772bd53a422020334db051", + "date": "2022-11-11T11:48:54.228038", + "expiration": None, + "uses_left": 1, + } # проблемы, файл не изменяется. не представляю причину def test_get_new_device_key(tokens, mock_new_device_key_generate, datadir): repo = JsonTokensRepository() assert repo.get_new_device_key() is not None - # assert read_json(datadir / "tokens.json")["new_device"] == RecoveryKey( - # key="imrecoverykey", - # created_at=datetime(2022, 7, 15, 17, 41, 31, 675698), - # expires_at=None, - # uses_left=1, - # ) - - -# use_mnemonic_recovery_key -# use_mnemonic_new_device_key + assert read_json(datadir / "tokens.json")["new_device"] == { + "data": "2022-07-15 17:41:31.675698", + "expiration": "2022-07-15 17:41:31.675698", + "token": "43478d05b35e4781598acd76e33832bb", + } def test_delete_new_device_key(tokens, datadir): @@ -273,20 +272,138 @@ def test_delete_new_device_key(tokens, datadir): #################################################### +def test_use_bad_mnemonic_phrase_new_device_key( + tokens, mock_new_device_key_generate, datadir, mock_token_generate +): + repo = JsonTokensRepository() + + with pytest.raises(MnemonicError): + assert ( + repo.use_mnemonic_new_device_key( + device_name="imnew", + mnemonic_phrase="oh-no", + ) + is None + ) + + +def test_use_not_exists_mnemonic_new_device_key( + tokens, mock_new_device_key_generate, datadir, mock_token_generate +): + repo = JsonTokensRepository() + + with pytest.raises(TokenNotFoundError): + assert ( + repo.use_mnemonic_new_device_key( + device_name="imnew", + mnemonic_phrase="uniform clarify napkin bid dress search input armor police cross salon because myself uphold slice bamboo hungry park", + ) + is None + ) + + def test_use_mnemonic_new_device_key( tokens, mock_new_device_key_generate, datadir, mock_token_generate ): repo = JsonTokensRepository() - assert repo.use_mnemonic_new_device_key( - device_name="imnew", mnemonic_phrase="oh-no" - ) == Token( - token="iamtoken", - device_name="imnew", - created_at=datetime(2022, 7, 15, 17, 41, 31, 675698), + assert ( + repo.use_mnemonic_new_device_key( + device_name="imnew", + mnemonic_phrase="captain ribbon toddler settle symbol minute step broccoli bless universe divide bulb", + ) + is not None ) - assert read_json(datadir / "tokens.json")["new_device"] == [] + # assert read_json(datadir / "tokens.json")["new_device"] == [] -def use_mnemonic_recovery_key(): - ... +def test_use_none_mnemonic_recovery_key( + datadir, tokens, mock_get_recovery_key_return_none +): + repo = JsonTokensRepository() + + with pytest.raises(RecoveryKeyNotFoundError): + assert ( + repo.use_mnemonic_recovery_key( + mnemonic_phrase="i love you", + device_name="primary_token", + ) + is None + ) + + +def test_use_mnemonic_not_valid_recovery_key( + datadir, tokens, mock_get_recovery_key_return_not_valid +): + repo = JsonTokensRepository() + + with pytest.raises(RecoveryKeyIsNotValidError): + assert ( + repo.use_mnemonic_recovery_key( + mnemonic_phrase="sorry, it was joke", + device_name="primary_token", + ) + is None + ) + + +def test_use_not_mnemonic_recovery_key( + datadir, + tokens, +): + repo = JsonTokensRepository() + + with pytest.raises(MnemonicError): + assert ( + repo.use_mnemonic_recovery_key( + mnemonic_phrase="please come back", + device_name="primary_token", + ) + is None + ) + + +def test_use_not_found_mnemonic_recovery_key(datadir, tokens): + repo = JsonTokensRepository() + + with pytest.raises(RecoveryTokenError): + assert ( + repo.use_mnemonic_recovery_key( + mnemonic_phrase="captain ribbon toddler settle symbol minute step broccoli bless universe divide bulb", + device_name="primary_token", + ) + is None + ) + + +def test_use_mnemonic_recovery_key(datadir, tokens, mock_generate_token): + repo = JsonTokensRepository() + + assert repo.use_mnemonic_recovery_key( + mnemonic_phrase="uniform clarify napkin bid dress search input armor police cross salon because myself uphold slice bamboo hungry park", + device_name="newdevice", + ) == Token( + token="ur71mC4aiI6FIYAN--cTL-38rPHS5D6NuB1bgN_qKF4", + device_name="newdevice", + created_at=datetime(2022, 11, 14, 6, 6, 32, 777123), + ) + + assert read_json(datadir / "tokens.json")["tokens"] == [ + { + "date": "2022-07-15 17:41:31.675698", + "name": "primary_token", + "token": "KG9ni-B-CMPk327Zv1qC7YBQaUGaBUcgdkvMvQ2atFI", + }, + { + "date": "2022-11-14 06:06:32.777123", + "name": "newdevice", + "token": "ur71mC4aiI6FIYAN--cTL-38rPHS5D6NuB1bgN_qKF4", + }, + ] + + assert read_json(datadir / "tokens.json")["recovery_token"] == { + "date": "2022-11-11T11:48:54.228038", + "expiration": None, + "token": "ed653e4b8b042b841d285fa7a682fa09e925ddb2d8906f54", + "uses_left": 1, + } diff --git a/tests/test_graphql/test_repository/test_tokens_repository/tokens.json b/tests/test_graphql/test_repository/test_tokens_repository/tokens.json index bce68b0..a250a29 100644 --- a/tests/test_graphql/test_repository/test_tokens_repository/tokens.json +++ b/tests/test_graphql/test_repository/test_tokens_repository/tokens.json @@ -1,19 +1,19 @@ { "tokens": [ { - "token": "iamtoken", + "token": "KG9ni-B-CMPk327Zv1qC7YBQaUGaBUcgdkvMvQ2atFI", "name": "primary_token", "date": "2022-07-15 17:41:31.675698" } ], "recovery_token": { - "token": "iamtoken", - "date": "2022-07-15 17:41:31.675698", + "token": "ed653e4b8b042b841d285fa7a682fa09e925ddb2d8906f54", + "date": "2022-11-11T11:48:54.228038", "expiration": null, - "uses_left": null + "uses_left": 2 }, "new_device": { - "token": "iamtoken", + "token": "2237238de23dc71ab558e317bdb8ff8e", "date": "2022-10-26 20:50:47.973212", "expiration": "2022-10-26 21:00:47.974153" }