|
1 | 1 | import logging |
2 | | -from datetime import datetime |
| 2 | +from datetime import datetime, timedelta |
3 | 3 | from unittest import mock |
4 | 4 |
|
5 | 5 | import pytest |
@@ -2061,20 +2061,88 @@ def test_invalidate_sage_intacct_credentials(mocker, db): |
2061 | 2061 | invalidate_sage_intacct_credentials(workspace_id) |
2062 | 2062 | assert not mocked_patch.called |
2063 | 2063 |
|
2064 | | - # TODO: Uncomment this when we have a FE Changes ready |
2065 | | - # # Should call patch_integration_settings with the correct arguments if sage_intacct_credentials.is_expired is False |
2066 | | - # sage_intacct_credentials.is_expired = False |
2067 | | - # sage_intacct_credentials.save() |
2068 | 2064 |
|
2069 | | - # invalidate_sage_intacct_credentials(workspace_id) |
| 2065 | +def test_invalidate_sage_intacct_credentials_clears_tokens(mocker, db): |
| 2066 | + """ |
| 2067 | + Test that invalidate_sage_intacct_credentials clears access_token and access_token_expires_at, |
| 2068 | + calls patch_integration_settings when is_expired was False, and does not change is_expired. |
| 2069 | + """ |
| 2070 | + workspace_id = 1 |
| 2071 | + |
| 2072 | + sage_intacct_credentials = SageIntacctCredential.objects.get(workspace_id=workspace_id) |
| 2073 | + sage_intacct_credentials.is_expired = False |
| 2074 | + sage_intacct_credentials.access_token = 'some-access-token' |
| 2075 | + sage_intacct_credentials.access_token_expires_at = datetime.now(tz=timezone.utc) + timedelta(hours=5) |
| 2076 | + sage_intacct_credentials.save() |
| 2077 | + |
| 2078 | + mocked_patch = mocker.MagicMock() |
| 2079 | + mocker.patch('apps.workspaces.tasks.patch_integration_settings', side_effect=mocked_patch) |
| 2080 | + |
| 2081 | + invalidate_sage_intacct_credentials(workspace_id) |
| 2082 | + |
| 2083 | + sage_intacct_credentials.refresh_from_db() |
| 2084 | + |
| 2085 | + mocked_patch.assert_called_once_with(workspace_id, is_token_expired=True) |
| 2086 | + |
| 2087 | + assert sage_intacct_credentials.is_expired is False |
| 2088 | + |
| 2089 | + assert sage_intacct_credentials.access_token is None |
| 2090 | + assert sage_intacct_credentials.access_token_expires_at is None |
| 2091 | + |
| 2092 | + |
| 2093 | +def test_invalidate_sage_intacct_credentials_with_passed_credentials(mocker, db): |
| 2094 | + """ |
| 2095 | + Test invalidate_sage_intacct_credentials when credentials object is passed directly |
| 2096 | + (as done by TokenHealthView and export tasks). |
| 2097 | + """ |
| 2098 | + workspace_id = 1 |
| 2099 | + |
| 2100 | + sage_intacct_credentials = SageIntacctCredential.objects.get(workspace_id=workspace_id) |
| 2101 | + sage_intacct_credentials.is_expired = False |
| 2102 | + sage_intacct_credentials.access_token = 'some-access-token' |
| 2103 | + sage_intacct_credentials.access_token_expires_at = datetime.now(tz=timezone.utc) + timedelta(hours=5) |
| 2104 | + sage_intacct_credentials.save() |
2070 | 2105 |
|
2071 | | - # args, kwargs = mocked_patch.call_args |
2072 | | - # assert args[0] == workspace_id |
2073 | | - # assert kwargs['is_token_expired'] == True |
| 2106 | + mocked_patch = mocker.MagicMock() |
| 2107 | + mocker.patch('apps.workspaces.tasks.patch_integration_settings', side_effect=mocked_patch) |
| 2108 | + |
| 2109 | + # Pass credentials object directly (simulates how TokenHealthView calls it) |
| 2110 | + invalidate_sage_intacct_credentials(workspace_id, sage_intacct_credentials) |
| 2111 | + |
| 2112 | + sage_intacct_credentials.refresh_from_db() |
| 2113 | + |
| 2114 | + mocked_patch.assert_called_once_with(workspace_id, is_token_expired=True) |
| 2115 | + |
| 2116 | + assert sage_intacct_credentials.is_expired is False |
| 2117 | + |
| 2118 | + assert sage_intacct_credentials.access_token is None |
| 2119 | + assert sage_intacct_credentials.access_token_expires_at is None |
| 2120 | + |
| 2121 | + |
| 2122 | +def test_invalidate_sage_intacct_credentials_already_expired_passed_directly(mocker, db): |
| 2123 | + """ |
| 2124 | + Test invalidate_sage_intacct_credentials when already-expired credentials are passed directly. |
| 2125 | + Should not call patch_integration_settings but should still clear tokens. |
| 2126 | + """ |
| 2127 | + workspace_id = 1 |
| 2128 | + |
| 2129 | + sage_intacct_credentials = SageIntacctCredential.objects.get(workspace_id=workspace_id) |
| 2130 | + sage_intacct_credentials.is_expired = True |
| 2131 | + sage_intacct_credentials.access_token = 'stale-access-token' |
| 2132 | + sage_intacct_credentials.access_token_expires_at = datetime.now(tz=timezone.utc) + timedelta(hours=3) |
| 2133 | + sage_intacct_credentials.save() |
| 2134 | + |
| 2135 | + mocked_patch = mocker.MagicMock() |
| 2136 | + mocker.patch('apps.workspaces.tasks.patch_integration_settings', side_effect=mocked_patch) |
| 2137 | + |
| 2138 | + invalidate_sage_intacct_credentials(workspace_id, sage_intacct_credentials) |
| 2139 | + |
| 2140 | + sage_intacct_credentials.refresh_from_db() |
| 2141 | + |
| 2142 | + assert not mocked_patch.called |
2074 | 2143 |
|
2075 | | - # # Verify the credentials were marked as expired |
2076 | | - # sage_intacct_credentials.refresh_from_db() |
2077 | | - # assert sage_intacct_credentials.is_expired == True |
| 2144 | + assert sage_intacct_credentials.access_token is None |
| 2145 | + assert sage_intacct_credentials.access_token_expires_at is None |
2078 | 2146 |
|
2079 | 2147 |
|
2080 | 2148 | def test_get_or_create_vendor_fallback_creation_error(mocker, db): |
|
0 commit comments