diff --git a/selfprivacy_api/repositories/tokens/json_tokens_repository.py b/selfprivacy_api/repositories/tokens/json_tokens_repository.py index 85a27b3..7cb5296 100644 --- a/selfprivacy_api/repositories/tokens/json_tokens_repository.py +++ b/selfprivacy_api/repositories/tokens/json_tokens_repository.py @@ -20,6 +20,8 @@ from selfprivacy_api.repositories.tokens.abstract_tokens_repository import ( ) from mnemonic import Mnemonic +DATETIME_FORMAT = "%Y-%m-%dT%H:%M:%S.%f" + class JsonTokensRepository(AbstractTokensRepository): def get_token_by_token_string(self, token_string: str) -> Optional[Token]: @@ -75,7 +77,7 @@ class JsonTokensRepository(AbstractTokensRepository): { "token": new_token.token, "name": new_token.device_name, - "date": new_token.created_at.strftime("%Y-%m-%d %H:%M:%S.%f"), + "date": new_token.created_at.strftime(DATETIME_FORMAT), } ) return new_token @@ -100,7 +102,7 @@ class JsonTokensRepository(AbstractTokensRepository): if userdata_token["name"] == input_token.device_name: userdata_token["token"] = new_token.token userdata_token["date"] = ( - new_token.created_at.strftime("%Y-%m-%d %H:%M:%S.%f"), + new_token.created_at.strftime(DATETIME_FORMAT), ) return new_token @@ -135,7 +137,7 @@ class JsonTokensRepository(AbstractTokensRepository): with WriteUserData(UserDataFiles.TOKENS) as tokens_file: tokens_file["recovery_token"] = { "token": recovery_key.key, - "date": recovery_key.created_at.strftime("%Y-%m-%d %H:%M:%S.%f"), + "date": recovery_key.created_at.strftime(DATETIME_FORMAT), "expiration": recovery_key.expires_at, "uses_left": recovery_key.uses_left, } @@ -170,7 +172,7 @@ class JsonTokensRepository(AbstractTokensRepository): { "token": new_token.token, "name": new_token.device_name, - "date": new_token.created_at.strftime("%Y-%m-%d %H:%M:%S.%f"), + "date": new_token.created_at.strftime(DATETIME_FORMAT), } ) @@ -189,10 +191,8 @@ class JsonTokensRepository(AbstractTokensRepository): with WriteUserData(UserDataFiles.TOKENS) as tokens_file: tokens_file["new_device"] = { "token": new_device_key.key, - "date": new_device_key.created_at.strftime("%Y-%m-%d %H:%M:%S.%f"), - "expiration": new_device_key.expires_at.strftime( - "%Y-%m-%d %H:%M:%S.%f" - ), + "date": new_device_key.created_at.strftime(DATETIME_FORMAT), + "expiration": new_device_key.expires_at.strftime(DATETIME_FORMAT), } return new_device_key diff --git a/tests/test_graphql/test_repository/test_tokens_repository.py b/tests/test_graphql/test_repository/test_tokens_repository.py index 7566372..8bdf1fb 100644 --- a/tests/test_graphql/test_repository/test_tokens_repository.py +++ b/tests/test_graphql/test_repository/test_tokens_repository.py @@ -2,7 +2,7 @@ # pylint: disable=unused-argument # pylint: disable=missing-function-docstring -from datetime import datetime +from datetime import datetime, timezone import pytest @@ -112,7 +112,22 @@ def tokens(mocker, datadir): "token": "KG9ni-B-CMPk327Zv1qC7YBQaUGaBUcgdkvMvQ2atFI", "name": "primary_token", "date": "2022-07-15 17:41:31.675698", - } + }, + { + "token": "3JKgLOtFu6ZHgE4OU-R-VdW47IKpg-YQL0c6n7bol68", + "name": "second_token", + "date": "2022-07-15 17:41:31.675698Z", + }, + { + "token": "LYiwFDekvALKTQSjk7vtMQuNP_6wqKuV-9AyMKytI_8", + "name": "third_token", + "date": "2022-07-15T17:41:31.675698Z", + }, + { + "token": "dD3CFPcEZvapscgzWb7JZTLog7OMkP7NzJeu2fAazXM", + "name": "forth_token", + "date": "2022-07-15T17:41:31.675698", + }, ] return datadir @@ -163,7 +178,22 @@ def test_get_tokens(tokens): token="KG9ni-B-CMPk327Zv1qC7YBQaUGaBUcgdkvMvQ2atFI", device_name="primary_token", created_at=datetime(2022, 7, 15, 17, 41, 31, 675698), - ) + ), + Token( + token="3JKgLOtFu6ZHgE4OU-R-VdW47IKpg-YQL0c6n7bol68", + device_name="second_token", + created_at=datetime(2022, 7, 15, 17, 41, 31, 675698, tzinfo=timezone.utc), + ), + Token( + token="LYiwFDekvALKTQSjk7vtMQuNP_6wqKuV-9AyMKytI_8", + device_name="third_token", + created_at=datetime(2022, 7, 15, 17, 41, 31, 675698, tzinfo=timezone.utc), + ), + Token( + token="dD3CFPcEZvapscgzWb7JZTLog7OMkP7NzJeu2fAazXM", + device_name="forth_token", + created_at=datetime(2022, 7, 15, 17, 41, 31, 675698), + ), ] @@ -186,7 +216,23 @@ def test_delete_token(tokens, datadir): ) assert repo.delete_token(input_token) is None - assert read_json(datadir / "tokens.json")["tokens"] == [] + assert read_json(datadir / "tokens.json")["tokens"] == [ + { + "token": "3JKgLOtFu6ZHgE4OU-R-VdW47IKpg-YQL0c6n7bol68", + "name": "second_token", + "date": "2022-07-15 17:41:31.675698Z", + }, + { + "token": "LYiwFDekvALKTQSjk7vtMQuNP_6wqKuV-9AyMKytI_8", + "name": "third_token", + "date": "2022-07-15T17:41:31.675698Z", + }, + { + "token": "dD3CFPcEZvapscgzWb7JZTLog7OMkP7NzJeu2fAazXM", + "name": "forth_token", + "date": "2022-07-15T17:41:31.675698", + }, + ] def test_delete_not_found_token(tokens, datadir): @@ -245,7 +291,7 @@ def test_create_recovery_key(tokens, mock_recovery_key_generate, datadir): assert repo.create_recovery_key(uses_left=1, expiration=None) is not None assert read_json(datadir / "tokens.json")["recovery_token"] == { "token": "889bf49c1d3199d71a2e704718772bd53a422020334db051", - "date": "2022-07-15 17:41:31.675698", + "date": "2022-07-15T17:41:31.675698", "expiration": None, "uses_left": 1, } @@ -256,8 +302,8 @@ def test_get_new_device_key(tokens, mock_new_device_key_generate, datadir): assert repo.get_new_device_key() is not None assert read_json(datadir / "tokens.json")["new_device"] == { - "date": "2022-07-15 17:41:31.675698", - "expiration": "2022-07-15 17:41:31.675698", + "date": "2022-07-15T17:41:31.675698", + "expiration": "2022-07-15T17:41:31.675698", "token": "43478d05b35e4781598acd76e33832bb", } @@ -395,7 +441,22 @@ def test_use_mnemonic_recovery_key(datadir, tokens, mock_generate_token): "token": "KG9ni-B-CMPk327Zv1qC7YBQaUGaBUcgdkvMvQ2atFI", }, { - "date": "2022-11-14 06:06:32.777123", + "token": "3JKgLOtFu6ZHgE4OU-R-VdW47IKpg-YQL0c6n7bol68", + "name": "second_token", + "date": "2022-07-15 17:41:31.675698Z", + }, + { + "token": "LYiwFDekvALKTQSjk7vtMQuNP_6wqKuV-9AyMKytI_8", + "name": "third_token", + "date": "2022-07-15T17:41:31.675698Z", + }, + { + "token": "dD3CFPcEZvapscgzWb7JZTLog7OMkP7NzJeu2fAazXM", + "name": "forth_token", + "date": "2022-07-15T17:41:31.675698", + }, + { + "date": "2022-11-14T06:06:32.777123", "name": "newdevice", "token": "ur71mC4aiI6FIYAN--cTL-38rPHS5D6NuB1bgN_qKF4", }, 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 a250a29..bb1805c 100644 --- a/tests/test_graphql/test_repository/test_tokens_repository/tokens.json +++ b/tests/test_graphql/test_repository/test_tokens_repository/tokens.json @@ -4,6 +4,21 @@ "token": "KG9ni-B-CMPk327Zv1qC7YBQaUGaBUcgdkvMvQ2atFI", "name": "primary_token", "date": "2022-07-15 17:41:31.675698" + }, + { + "token": "3JKgLOtFu6ZHgE4OU-R-VdW47IKpg-YQL0c6n7bol68", + "name": "second_token", + "date": "2022-07-15 17:41:31.675698Z" + }, + { + "token": "LYiwFDekvALKTQSjk7vtMQuNP_6wqKuV-9AyMKytI_8", + "name": "third_token", + "date": "2022-07-15T17:41:31.675698Z" + }, + { + "token": "dD3CFPcEZvapscgzWb7JZTLog7OMkP7NzJeu2fAazXM", + "name": "forth_token", + "date": "2022-07-15T17:41:31.675698" } ], "recovery_token": { @@ -17,4 +32,4 @@ "date": "2022-10-26 20:50:47.973212", "expiration": "2022-10-26 21:00:47.974153" } -} \ No newline at end of file +}