86 lines
3.2 KiB
Python
86 lines
3.2 KiB
Python
from unittest.mock import patch
|
|
from freezegun import freeze_time
|
|
|
|
from odoo.addons.l10n_in.models.iap_account import IapAccount
|
|
from odoo.tests.common import TransactionCase, tagged
|
|
from odoo.exceptions import UserError
|
|
from odoo.tools import mute_logger
|
|
from datetime import date
|
|
|
|
|
|
@tagged('post_install_l10n', 'post_install', '-at_install')
|
|
class TestGSTStatusFeature(TransactionCase):
|
|
def setUp(self):
|
|
self.partner1 = self.env["res.partner"].create(
|
|
{"name": "Active GSTIN", "vat": "36AAACM4154G1ZO"}
|
|
)
|
|
self.partner2 = self.env["res.partner"].create(
|
|
{"name": "Cancelled GSTIN", "vat": "19AABCT1332L2ZD"}
|
|
)
|
|
self.partner3 = self.env["res.partner"].create(
|
|
{"name": "Invalid GSTIN", "vat": "19AACCT6304M1ZB"}
|
|
)
|
|
self.partner4 = self.env["res.partner"].create(
|
|
{"name": "No Records GSTIN", "vat": "19AACCT6304M1DB"}
|
|
)
|
|
self.partner5 = self.env["res.partner"].create(
|
|
{
|
|
"name": "Partner Vat Reset",
|
|
"vat": "36AAACM4154G1ZO",
|
|
"country_id": self.env.ref('base.in').id,
|
|
"l10n_in_gstin_verified_status": "active",
|
|
"l10n_in_gstin_verified_date": "2024-06-01",
|
|
}
|
|
)
|
|
self.mock_responses = {
|
|
"active": {
|
|
"data": {"sts": "Active"}
|
|
},
|
|
"cancelled": {
|
|
"data": {"sts": "Cancelled"}
|
|
},
|
|
"invalid": {
|
|
"error": [{"code": "SWEB_9035", "message": "Invalid GSTIN / UID"}],
|
|
},
|
|
"no_records": {
|
|
"error": [{"code": "FO8000", "message": "No records found for the provided GSTIN."}],
|
|
},
|
|
}
|
|
|
|
@freeze_time('2024-05-20')
|
|
@mute_logger('odoo.addons.l10n_in_gstin_status.models.res_partner')
|
|
def check_gstin_status(self, partner, expected_status, mock_response, raises_exception=False):
|
|
with patch.object(IapAccount, "_l10n_in_connect_to_server", return_value=mock_response):
|
|
if raises_exception:
|
|
with self.assertRaises(UserError):
|
|
partner.action_l10n_in_verify_gstin_status()
|
|
else:
|
|
partner.action_l10n_in_verify_gstin_status()
|
|
self.assertEqual(partner.l10n_in_gstin_verified_status, expected_status)
|
|
self.assertEqual(partner.l10n_in_gstin_verified_date, date(2024, 5, 20))
|
|
|
|
def test_gstin_status(self):
|
|
"""Test GSTIN status for various cases"""
|
|
self.check_gstin_status(
|
|
self.partner1,
|
|
expected_status=True,
|
|
mock_response=self.mock_responses["active"]
|
|
)
|
|
self.check_gstin_status(
|
|
self.partner2,
|
|
expected_status=False,
|
|
mock_response=self.mock_responses["cancelled"]
|
|
)
|
|
self.check_gstin_status(
|
|
self.partner3,
|
|
expected_status=False,
|
|
raises_exception=True,
|
|
mock_response=self.mock_responses["invalid"],
|
|
)
|
|
self.check_gstin_status(
|
|
self.partner4,
|
|
expected_status=False,
|
|
raises_exception=True,
|
|
mock_response=self.mock_responses["no_records"],
|
|
)
|