Odoo18-Base/addons/l10n_in_gstin_status/tests/test_check_status.py

86 lines
3.2 KiB
Python
Raw Permalink Normal View History

2025-01-06 10:57:38 +07:00
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"],
)