Skip to content

Commit 7bd8dab

Browse files
committed
Added test cases for code coverage
1 parent 5b825c6 commit 7bd8dab

File tree

10 files changed

+315
-2
lines changed

10 files changed

+315
-2
lines changed

spp_area/tests/common.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,22 @@
55

66

77
class AreaImportTestMixin(TransactionCase):
8+
@staticmethod
9+
def get_file_path_1():
10+
return f"{os.path.dirname(os.path.abspath(__file__))}/irq_adminboundaries_tabulardata.xlsx"
11+
12+
@staticmethod
13+
def get_file_path_2():
14+
return f"{os.path.dirname(os.path.abspath(__file__))}/pse_adminboundaries_tabulardata.xlsx"
15+
816
@classmethod
917
def setUpClass(cls):
1018
super().setUpClass()
1119
# Greater than or equal to 400 rows
1220
xls_file = None
1321
xls_file_name = None
1422

15-
file_path = f"{os.path.dirname(os.path.abspath(__file__))}/irq_adminboundaries_tabulardata.xlsx"
23+
file_path = cls.get_file_path_1()
1624
with open(file_path, "rb") as f:
1725
xls_file_name = f.name
1826
xls_file = base64.b64encode(f.read())
@@ -29,7 +37,7 @@ def setUpClass(cls):
2937
xls_file_2 = None
3038
xls_file_name_2 = None
3139

32-
file_path_2 = f"{os.path.dirname(os.path.abspath(__file__))}/pse_adminboundaries_tabulardata.xlsx"
40+
file_path_2 = cls.get_file_path_2()
3341
with open(file_path_2, "rb") as f:
3442
xls_file_name_2 = f.name
3543
xls_file_2 = base64.b64encode(f.read())

spp_area_gis/tests/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
from . import test_area_import
2+
from . import test_area_import_raw
60.5 KB
Binary file not shown.
18.4 KB
Binary file not shown.
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import os
2+
3+
from odoo.addons.spp_area.tests.test_area_import import AreaImportTest as AreaImportTestMixin
4+
5+
6+
class AreaImportTest(AreaImportTestMixin):
7+
@staticmethod
8+
def get_file_path_1():
9+
return f"{os.path.dirname(os.path.abspath(__file__))}/irq_adminboundaries_tabulardata.xlsx"
10+
11+
@staticmethod
12+
def get_file_path_2():
13+
return f"{os.path.dirname(os.path.abspath(__file__))}/pse_adminboundaries_tabulardata.xlsx"
14+
15+
def test_get_column_indexes(self):
16+
columns = {
17+
"ADM2_EN": 0,
18+
"ADM2_PCODE": 1,
19+
"ADM1_EN": 2,
20+
"ADM1_PCODE": 3,
21+
"ADM0_EN": 4,
22+
"ADM0_PCODE": 5,
23+
"date": 6,
24+
"validOn": 7,
25+
"validTo": 8,
26+
"AREA_SQKM": 9,
27+
"longitude": 10,
28+
"latitude": 11,
29+
}
30+
area_level = 1
31+
column_indexes = self.area_import_id_2.get_column_indexes(list(columns.keys()), area_level)
32+
33+
self.assertIn("latitude_index", column_indexes)
34+
self.assertIn("longitude_index", column_indexes)
35+
self.assertEqual(column_indexes["latitude_index"], columns["latitude"])
36+
self.assertEqual(column_indexes["longitude_index"], columns["longitude"])
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import os
2+
3+
from odoo.addons.spp_area.tests.test_area_import_raw import AreaImportRawTest as AreaImportRawTestMixin
4+
5+
6+
class AreaImportRawTest(AreaImportRawTestMixin):
7+
@staticmethod
8+
def get_file_path_1():
9+
return f"{os.path.dirname(os.path.abspath(__file__))}/irq_adminboundaries_tabulardata.xlsx"
10+
11+
@staticmethod
12+
def get_file_path_2():
13+
return f"{os.path.dirname(os.path.abspath(__file__))}/pse_adminboundaries_tabulardata.xlsx"
14+
15+
@classmethod
16+
def setUpClass(cls):
17+
super().setUpClass()
18+
cls.area_import_raw_id.latitude = 13.0
19+
cls.area_import_raw_id.longitude = 122.0
20+
21+
def test_check_errors(self):
22+
self.area_import_raw_id.latitude = 91
23+
self.area_import_raw_id.longitude = 181
24+
25+
self.area_import_raw_id.validate_raw_data()
26+
27+
self.assertEqual(self.area_import_raw_id.state, "Error")
28+
self.assertIn("Latitude must be between -90 and 90", self.area_import_raw_id.remarks)
29+
self.assertIn("Longitude must be between -180 and 180", self.area_import_raw_id.remarks)
30+
31+
def test_get_area_vals(self):
32+
area_vals = self.area_import_raw_id.get_area_vals()
33+
34+
self.assertIn("coordinates", area_vals)
35+
self.assertEqual(area_vals["coordinates"], '{"type": "Point", "coordinates": [122.0, 13.0]}')
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
11
from . import test_create_program_wizard
2+
from . import test_eligibility_manager
3+
from . import test_program

spp_eligibility_sql/tests/test_create_program_wizard.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,17 @@
1+
from odoo.exceptions import UserError
12
from odoo.tests import TransactionCase
23

34

45
class TestCreateProgramWiz(TransactionCase):
56
@classmethod
67
def setUpClass(cls):
78
super().setUpClass()
9+
cls.group_1 = cls.env["res.partner"].create(
10+
{
11+
"name": "Group 1",
12+
"is_group": True,
13+
}
14+
)
815
cls._program_create_wiz = cls.env["g2p.program.create.wizard"].create(
916
{
1017
"name": "Test Program 1 [SQL Elibigility]",
@@ -14,6 +21,8 @@ def setUpClass(cls):
1421
"cycle_duration": 1,
1522
"currency_id": cls.env.company.currency_id.id,
1623
"entitlement_kind": "default",
24+
"amount_per_cycle": 1.0,
25+
"amount_per_individual_in_group": 1.0,
1726
}
1827
)
1928
cls.journal_id = cls._program_create_wiz.create_journal(
@@ -27,3 +36,52 @@ def test_01_check_sql_query_onchange(self):
2736
"recheck",
2837
"Correct SQL Query validation state",
2938
)
39+
40+
def test_02_test_sql_query(self):
41+
self._program_create_wiz.test_sql_query()
42+
43+
self.assertEqual(self._program_create_wiz.sql_query_valid, "valid")
44+
self.assertEqual(
45+
self._program_create_wiz.sql_query_valid_message, "The SQL Query is valid but it did not return any record."
46+
)
47+
self.assertEqual(self._program_create_wiz.sql_record_count, 0)
48+
self.assertEqual(self._program_create_wiz.state, "step1")
49+
50+
self._program_create_wiz.sql_query = "select id from res_partner"
51+
self._program_create_wiz.test_sql_query()
52+
53+
self.assertEqual(self._program_create_wiz.sql_query_valid, "valid")
54+
self.assertFalse(self._program_create_wiz.sql_query_valid_message)
55+
self.assertEqual(self._program_create_wiz.sql_record_count, 1)
56+
self.assertEqual(self._program_create_wiz.state, "step1")
57+
58+
self._program_create_wiz.target_type = "individual"
59+
self._program_create_wiz.test_sql_query()
60+
61+
self.assertEqual(self._program_create_wiz.sql_query_valid, "valid")
62+
self.assertEqual(
63+
self._program_create_wiz.sql_query_valid_message, "The SQL Query is valid but it did not return any record."
64+
)
65+
self.assertEqual(self._program_create_wiz.sql_record_count, 0)
66+
self.assertEqual(self._program_create_wiz.state, "step1")
67+
68+
def test_03_check_required_fields(self):
69+
with self.assertRaisesRegex(UserError, "The SQL Query must return 1 or more record."):
70+
self._program_create_wiz._check_required_fields()
71+
72+
with self.assertRaisesRegex(UserError, "The SQL Query must be validated first."):
73+
self._program_create_wiz.sql_query_valid = False
74+
self._program_create_wiz._check_required_fields()
75+
76+
with self.assertRaisesRegex(UserError, "A SQL Query is needed for this eligibility criteria type."):
77+
self._program_create_wiz.sql_query = False
78+
self._program_create_wiz._check_required_fields()
79+
80+
def test_04_get_eligibility_manager(self):
81+
self._program_create_wiz.sql_query = "select id from res_partner"
82+
self._program_create_wiz.sql_record_count = 1
83+
self.program = self._program_create_wiz.create_program()
84+
eligibility_manager = self._program_create_wiz._get_eligibility_manager(self.program["res_id"])
85+
86+
self.assertIn("eligibility_managers", eligibility_manager)
87+
self.assertIn(4, eligibility_manager["eligibility_managers"][0])
Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
from odoo.exceptions import UserError
2+
from odoo.tests import TransactionCase
3+
4+
5+
class TestSQLBasedEligibilityManager(TransactionCase):
6+
@classmethod
7+
def setUpClass(cls):
8+
super().setUpClass()
9+
cls.partner = cls.env["res.partner"].create({"name": "Test Partner", "is_group": False})
10+
cls.program_id = cls.env["g2p.program"].create(
11+
{
12+
"name": "Test Program",
13+
"target_type": "individual",
14+
}
15+
)
16+
cls.membership = cls.env["g2p.program_membership"].create(
17+
{
18+
"partner_id": cls.partner.id,
19+
"program_id": cls.program_id.id,
20+
"state": "enrolled",
21+
}
22+
)
23+
cls.sql_manager = cls.env["g2p.program_membership.manager.sql"].create(
24+
{
25+
"name": "SQL Manager",
26+
"program_id": cls.program_id.id,
27+
}
28+
)
29+
30+
def test_sql_query_onchange(self):
31+
self.sql_manager._sql_query_onchange()
32+
33+
self.assertEqual(
34+
self.sql_manager.sql_query_valid,
35+
"recheck",
36+
)
37+
self.assertFalse(self.sql_manager.sql_query_valid_message)
38+
self.assertEqual(self.sql_manager.sql_record_count, 0)
39+
40+
def test_prepare_eligible_domain(self):
41+
domain = self.sql_manager._prepare_eligible_domain(membership=self.program_id.program_membership_ids)
42+
43+
self.assertEqual(domain, [("id", "in", [self.partner.id]), ("disabled", "=", False), ("is_group", "=", False)])
44+
45+
self.program_id.target_type = "group"
46+
domain = self.sql_manager._prepare_eligible_domain(beneficiaries=self.partner.ids)
47+
self.assertEqual(domain, [("id", "in", [self.partner.id]), ("disabled", "=", False), ("is_group", "=", True)])
48+
49+
def test_generate_sql_query(self):
50+
self.sql_manager.sql_query = "select id from res_partner where name = 'Test Partner'"
51+
sql_query = self.sql_manager._generate_sql_query()
52+
53+
self.assertIn(self.sql_manager.sql_query, sql_query)
54+
self.assertIn("active AND disabled IS NULL AND NOT is_group", sql_query)
55+
56+
self.program_id.target_type = "group"
57+
self.sql_manager.sql_query = "insert into res_partner (name) values ('Test Partner')"
58+
sql_query = self.sql_manager._generate_sql_query()
59+
60+
self.assertIn("DML ERROR", sql_query)
61+
self.assertIn("active AND disabled IS NULL AND is_group", sql_query)
62+
63+
def test_get_beneficiaries_sql_query(self):
64+
with self.assertRaisesRegex(
65+
UserError, "The SQL Query is not valid. Be sure to validate this in the Eligibility Manager."
66+
):
67+
self.sql_manager._get_beneficiaries_sql_query()
68+
69+
self.sql_manager.sql_query = "select id from res_partner"
70+
self.sql_manager.sql_query_valid = "valid"
71+
72+
sql_query_result = self.sql_manager._get_beneficiaries_sql_query()
73+
74+
self.assertIn(self.partner.id, sql_query_result)
75+
76+
def test_sql_query(self):
77+
self.sql_manager.sql_query = "select id from res_partner"
78+
self.sql_manager.test_sql_query()
79+
80+
self.assertEqual(self.sql_manager.sql_query_valid, "valid")
81+
self.assertFalse(self.sql_manager.sql_query_valid_message)
82+
self.assertEqual(self.sql_manager.sql_record_count, 1)
83+
84+
self.sql_manager.sql_query = "select id from res_partner where name = 'Wrong Name'"
85+
self.sql_manager.test_sql_query()
86+
87+
self.assertEqual(self.sql_manager.sql_query_valid, "valid")
88+
self.assertEqual(
89+
self.sql_manager.sql_query_valid_message, "The SQL Query is valid but it did not return any record."
90+
)
91+
self.assertEqual(self.sql_manager.sql_record_count, 0)
92+
93+
def test_enroll_eligible_registrants(self):
94+
res = self.sql_manager.enroll_eligible_registrants(self.program_id.program_membership_ids)
95+
96+
self.assertTrue(res)
97+
self.assertEqual(res.partner_id, self.partner)
98+
self.assertEqual(res.program_id, self.program_id)
99+
100+
def test_verify_eligibility(self):
101+
beneficiaries = self.sql_manager._verify_eligibility(self.program_id.program_membership_ids)
102+
103+
self.assertIn(self.partner.id, beneficiaries)
104+
105+
def test_import_eligible_registrants(self):
106+
self.env["res.partner"].create({"name": "New Test Partner", "is_group": False})
107+
108+
self.sql_manager.sql_query = "select id from res_partner"
109+
self.sql_manager.sql_query_valid = "valid"
110+
ben_count = self.sql_manager.import_eligible_registrants()
111+
112+
self.assertEqual(ben_count, 1)
113+
114+
def test_import_registrants_async(self):
115+
new_partner = self.env["res.partner"].create({"name": "New Test Partner", "is_group": False})
116+
current_count = len(self.env["queue.job"].search([]))
117+
118+
self.sql_manager._import_registrants_async(new_partner.ids)
119+
120+
# 2 jobs are created for the import and the verification
121+
# - the actual job
122+
# - the function after running the actual job
123+
self.assertEqual(current_count + 2, len(self.env["queue.job"].search([])))
124+
125+
def test_mark_import_as_done(self):
126+
self.sql_manager.mark_import_as_done()
127+
128+
self.assertFalse(self.program_id.locked)
129+
self.assertFalse(self.program_id.locked_reason)
130+
131+
def test_import_registrants(self):
132+
self.sql_manager.sql_query = "select id from res_partner"
133+
self.sql_manager.sql_query_valid = "valid"
134+
new_partner = self.env["res.partner"].create({"name": "New Test Partner", "is_group": False})
135+
136+
self.sql_manager._import_registrants(new_partner.ids, do_count=True)
137+
138+
self.assertEqual(len(self.program_id.program_membership_ids), 2)
139+
self.assertIn(self.partner.id, self.program_id.program_membership_ids.mapped("partner_id").ids)
140+
self.assertIn(self.program_id.id, self.program_id.program_membership_ids.mapped("program_id").ids)
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
from odoo.exceptions import UserError
2+
from odoo.tests import TransactionCase
3+
4+
5+
class TestProgram(TransactionCase):
6+
@classmethod
7+
def setUpClass(cls):
8+
super().setUpClass()
9+
cls.partner = cls.env["res.partner"].create({"name": "Test Group", "is_registrant": True, "is_group": True})
10+
11+
def test_create_program_sql_eligibility(self):
12+
name = "Test Program 1"
13+
sql_query = "select id from res_partner"
14+
entitlement_kind = "default"
15+
entitlement_vars = {
16+
"amount_per_cycle": 1.0,
17+
"amount_per_individual_in_group": 1.0,
18+
"sql_record_count": 1,
19+
}
20+
current_count = self.env["g2p.program"].search_count([])
21+
22+
self.env["g2p.program"].create_program_sql_eligibility(name, sql_query, entitlement_kind, entitlement_vars)
23+
24+
self.assertEqual(current_count + 1, self.env["g2p.program"].search_count([]))
25+
26+
with self.assertRaisesRegex(UserError, "The entitlement kind must be specified."):
27+
self.env["g2p.program"].create_program_sql_eligibility(name, sql_query, None, entitlement_vars)
28+
29+
with self.assertRaisesRegex(
30+
UserError, "The program name, SQL query, and entitlement dictionary must be provided."
31+
):
32+
self.env["g2p.program"].create_program_sql_eligibility(name, None, entitlement_kind, entitlement_vars)

0 commit comments

Comments
 (0)