From fcf0d5acbcb79dda198f98ac0bd5fc3f329440a8 Mon Sep 17 00:00:00 2001 From: Thiago Cardoso Date: Wed, 24 Jul 2024 09:51:42 -0300 Subject: [PATCH] feat!: remove timestamp from register_feedback This is a deprecated field, should use occurred_at instead. --- incognia/api.py | 7 +------ incognia/datetime_util.py | 4 ---- tests/test_api.py | 37 ------------------------------------- 3 files changed, 1 insertion(+), 47 deletions(-) diff --git a/incognia/api.py b/incognia/api.py index f28bcff..1b55377 100644 --- a/incognia/api.py +++ b/incognia/api.py @@ -1,7 +1,7 @@ import datetime as dt from typing import Optional, List -from .datetime_util import total_milliseconds_since_epoch, has_timezone +from .datetime_util import has_timezone from .endpoints import Endpoints from .exceptions import IncogniaHTTPError, IncogniaError from .json_util import encode @@ -51,7 +51,6 @@ def register_new_signup(self, def register_feedback(self, event: str, - timestamp: dt.datetime = None, external_id: Optional[str] = None, login_id: Optional[str] = None, payment_id: Optional[str] = None, @@ -63,8 +62,6 @@ def register_feedback(self, expires_at: dt.datetime = None) -> None: if not event: raise IncogniaError('event is required.') - if timestamp is not None and not has_timezone(timestamp): - raise IncogniaError('timestamp must have timezone') if occurred_at is not None and not has_timezone(occurred_at): raise IncogniaError('occurred_at must have timezone') if expires_at is not None and not has_timezone(expires_at): @@ -83,8 +80,6 @@ def register_feedback(self, 'installation_id': installation_id, 'request_token': request_token } - if timestamp is not None: - body['timestamp'] = total_milliseconds_since_epoch(timestamp) if occurred_at is not None: body['occurred_at'] = occurred_at.isoformat() if expires_at is not None: diff --git a/incognia/datetime_util.py b/incognia/datetime_util.py index f2f7d33..b299198 100644 --- a/incognia/datetime_util.py +++ b/incognia/datetime_util.py @@ -1,9 +1,5 @@ import datetime as dt -def total_milliseconds_since_epoch(t: dt.datetime) -> int: - return int((t - dt.datetime.fromtimestamp(0, dt.timezone.utc)).total_seconds() * 1000.0) - - def has_timezone(d: dt.datetime) -> bool: return d.tzinfo is not None and d.tzinfo.utcoffset(d) is not None diff --git a/tests/test_api.py b/tests/test_api.py index d3c4dbf..7815615 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -72,7 +72,6 @@ class TestIncogniaAPI(TestCase): OK_STATUS_CODE: Final[int] = 200 CLIENT_ERROR_CODE: Final[int] = 400 VALID_EVENT_FEEDBACK_TYPE: Final[str] = 'valid_event_feedback_type' - INVALID_EVENT_FEEDBACK_TYPE: Final[str] = 'invalid_event_feedback_type' TIMESTAMP: Final[dt.datetime] = dt.datetime.now(dt.timezone.utc) TIMESTAMP_WITHOUT_TIMEZONE: Final[dt.datetime] = dt.datetime.now() LOGIN_ID: Final[str] = 'ANY_LOGIN_ID' @@ -89,14 +88,9 @@ class TestIncogniaAPI(TestCase): 'account_id': f'{ACCOUNT_ID}', 'installation_id': f'{INSTALLATION_ID}', 'request_token': f'{REQUEST_TOKEN}', - 'timestamp': int(( - TIMESTAMP - dt.datetime.fromtimestamp(0, dt.timezone.utc)).total_seconds() * 1000.0), 'occurred_at': TIMESTAMP.isoformat(), 'expires_at': TIMESTAMP.isoformat(), }) - REGISTER_INVALID_FEEDBACK_DATA: Final[bytes] = encode({ - 'event': f'{INVALID_EVENT_FEEDBACK_TYPE}' - }) REGISTER_VALID_PAYMENT_DATA: Final[bytes] = encode({ 'type': 'payment', 'request_token': f'{REQUEST_TOKEN}', @@ -222,7 +216,6 @@ def test_register_feedback_when_all_fields_are_valid_should_work( api = IncogniaAPI(self.CLIENT_ID, self.CLIENT_SECRET) api.register_feedback(self.VALID_EVENT_FEEDBACK_TYPE, - timestamp=self.TIMESTAMP, occurred_at=self.TIMESTAMP, expires_at=self.TIMESTAMP, external_id=self.EXTERNAL_ID, @@ -249,20 +242,6 @@ def test_register_feedback_when_event_is_empty_should_raise_an_IncogniaError( mock_token_manager_get.assert_not_called() mock_base_request_post.assert_not_called() - @patch.object(BaseRequest, 'post') - @patch.object(TokenManager, 'get', return_value=TOKEN_VALUES) - def test_register_feedback_when_timestamp_does_not_have_timezone_should_raise_IncogniaError( - self, mock_token_manager_get: Mock, mock_base_request_post: Mock): - api = IncogniaAPI(self.CLIENT_ID, self.CLIENT_SECRET) - - self.assertRaises(IncogniaError, - api.register_feedback, - event=self.VALID_EVENT_FEEDBACK_TYPE, - timestamp=self.TIMESTAMP_WITHOUT_TIMEZONE) - - mock_token_manager_get.assert_not_called() - mock_base_request_post.assert_not_called() - @patch.object(BaseRequest, 'post') @patch.object(TokenManager, 'get', return_value=TOKEN_VALUES) def test_register_feedback_when_occurred_at_does_not_have_timezone_should_raise_IncogniaError( @@ -291,22 +270,6 @@ def test_register_feedback_when_expires_at_does_not_have_timezone_should_raise_I mock_token_manager_get.assert_not_called() mock_base_request_post.assert_not_called() - @patch.object(BaseRequest, 'post') - @patch.object(TokenManager, 'get', return_value=TOKEN_VALUES) - def test_register_feedback_when_required_fields_are_invalid_should_raise_an_IncogniaHTTPError( - self, mock_token_manager_get: Mock, mock_base_request_post: Mock): - mock_base_request_post.configure_mock(side_effect=IncogniaHTTPError) - - api = IncogniaAPI(self.CLIENT_ID, self.CLIENT_SECRET) - - self.assertRaises(IncogniaHTTPError, api.register_feedback, - event=self.INVALID_EVENT_FEEDBACK_TYPE) - - mock_token_manager_get.assert_called() - mock_base_request_post.assert_called_with(Endpoints.FEEDBACKS, - headers=self.AUTH_AND_JSON_CONTENT_HEADERS, - data=self.REGISTER_INVALID_FEEDBACK_DATA) - @patch.object(BaseRequest, 'post') @patch.object(TokenManager, 'get', return_value=TOKEN_VALUES) def test_register_payment_when_required_fields_are_valid_should_work(