Skip to content
9 changes: 0 additions & 9 deletions g2p_connect_demo/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,33 +16,24 @@
"g2p_registry_group",
"g2p_registry_membership",
"g2p_programs",
# "g2p_bank",
"spp_custom_field",
# "spp_custom_fields_ui",
"spp_entitlement_cash",
# "spp_dashboard",
"spp_idpass",
"spp_idqueue",
"spp_area",
# "spp_change_request",
"spp_event_data",
"spp_service_points",
"theme_openspp_muk",
# "spp_pos",
# "spp_sms",
"queue_job",
# "spp_change_request_add_children_demo",
"spp_custom_filter",
"product",
"stock",
],
"external_dependencies": {"python": ["faker"]},
"data": [
"security/ir.model.access.csv",
# "data/users_data.xml",
"data/sample_data.xml",
"views/generate_data_view.xml",
# "views/generate_change_request_data_view.xml",
"views/groups_view.xml",
"views/individuals_view.xml",
],
Expand Down
1 change: 0 additions & 1 deletion g2p_connect_demo/models/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,5 @@
from . import registrant
from . import generate_group

# from . import generate_change_request
from . import individual
from . import group
7 changes: 4 additions & 3 deletions g2p_connect_demo/models/generate_change_request.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@ def _generate_sample_data(self, **kwargs):
res_id = kwargs.get("res_id")
res = self.browse(res_id)

res_partner_model_obj = self.env["res.partner"]

registrants = kwargs.get("registrant_ids")
membership_kinds = kwargs.get("membership_kinds")
num_crs = min(res.num_crs, 1000)
Expand All @@ -83,7 +85,7 @@ def _generate_sample_data(self, **kwargs):
registrant_id = random.choice(registrants)

# Get applicants based on registrant_id
registrant = self.env["res.partner"].search([("id", "=", registrant_id)])[0]
registrant = res_partner_model_obj.search([("id", "=", registrant_id)])[0]
if registrant.lang:
lang = registrant.lang
else:
Expand All @@ -95,7 +97,7 @@ def _generate_sample_data(self, **kwargs):
applicant_id = random.choice(applicant_ids)

# TODO: Fix error in phone number format
applicant = self.env["res.partner"].search([("id", "=", applicant_id)])
applicant = res_partner_model_obj.search([("id", "=", applicant_id)])
if applicant.phone:
applicant_phone = applicant.phone
else:
Expand Down Expand Up @@ -126,7 +128,6 @@ def _generate_sample_data(self, **kwargs):
date_start = datetime.datetime.now() - relativedelta(years=100)
date_end = datetime.datetime.now()
birthdate = fake.date_between_dates(date_start=date_start, date_end=date_end).isoformat()
# phone = fake.phone_number()
uid_number = str(random.randint(100000000000, 999999999999))
kind = random.choice(membership_kinds)
applicant_relation = random.choice(["father", "mother", "grandfather"] * 50)
Expand Down
45 changes: 23 additions & 22 deletions g2p_connect_demo/models/generate_group.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,15 +62,16 @@ def _generate_sample_data(self, **kwargs):
res = self.browse(res_id)
fake = create_faker(res.locale)

# sex_choice_range = ["Female", "Male"] * 50 + ["Other"]
sex_choices = self.env["gender.type"].search([]).mapped("value")
sex_choice_range = sex_choices * 50
res_partner_model_obj = self.env["res.partner"]
g2p_group_membership_model_obj = self.env["g2p.group.membership"]

gender_choices = self.env["gender.type"].search([]).mapped("value")
gender_choice_range = gender_choices * 50
age_group_range = ["A", "C", "N"] * 2 + ["E"]
group_size_range = list(range(1, 2)) * 2 + list(range(3, 5)) * 4 + list(range(6, 8))

group_membership_kind_head_id = self.env.ref("g2p_registry_membership.group_membership_kind_head").id
group_kind_household_id = self.env.ref("g2p_registry_group.group_kind_household").id
# group_kind_family_id = self.env.ref("g2p_registry_group.group_kind_family").id

num_groups = min(res.num_groups, 1000)

Expand Down Expand Up @@ -98,7 +99,7 @@ def _generate_sample_data(self, **kwargs):
head = res._generate_individual_data(
fake,
last_name,
sex_choice_range,
gender_choice_range,
["A", "E"],
registration_date,
bank_id,
Expand Down Expand Up @@ -138,7 +139,7 @@ def _generate_sample_data(self, **kwargs):
"bank_ids": bank_ids,
}

create_group_id = self.env["res.partner"].create(group)
create_group_id = res_partner_model_obj.create(group)

head["id"] = f"{group_id}-0"
members = [head]
Expand All @@ -147,7 +148,7 @@ def _generate_sample_data(self, **kwargs):
data = res._generate_individual_data(
fake,
last_name,
sex_choice_range,
gender_choice_range,
age_group_range,
registration_date,
bank_id,
Expand All @@ -169,8 +170,8 @@ def _generate_sample_data(self, **kwargs):
if is_head:
member.pop("is_head", None)
member.pop("is_principal_recipient", None)
create_member_id = self.env["res.partner"].create(member)
self.env["g2p.group.membership"].create(
create_member_id = res_partner_model_obj.create(member)
g2p_group_membership_model_obj.create(
{
"group": create_group_id.id,
"individual": create_member_id.id,
Expand All @@ -186,8 +187,8 @@ def _generate_sample_data(self, **kwargs):
elif is_principal_recipient:
member.pop("is_head", None)
member.pop("is_principal_recipient", None)
create_member_id = self.env["res.partner"].create(member)
self.env["g2p.group.membership"].create(
create_member_id = res_partner_model_obj.create(member)
g2p_group_membership_model_obj.create(
{
"group": create_group_id.id,
"individual": create_member_id.id,
Expand All @@ -196,8 +197,8 @@ def _generate_sample_data(self, **kwargs):
)

else:
create_member_id = self.env["res.partner"].create(member)
self.env["g2p.group.membership"].create(
create_member_id = res_partner_model_obj.create(member)
g2p_group_membership_model_obj.create(
{
"group": create_group_id.id,
"individual": create_member_id.id,
Expand All @@ -210,8 +211,6 @@ def _generate_sample_data(self, **kwargs):
)
_logger.info(msg)
return {"result": msg, "res_model": self._name, "res_ids": [res_id]}
# _logger.info("-" * 80)
# _logger.info(json.dumps({"group": group, "members": members}, indent=4))

def mark_as_done(self):
self.update({"state": "generate"})
Expand All @@ -220,14 +219,14 @@ def _generate_individual_data(
self,
fake,
last_name,
sex_choice_range,
gender_choice_range,
age_group_range,
registration_date,
bank_id,
):
sex = random.choice(sex_choice_range)
gender = random.choice(gender_choice_range)
age_group = random.choice(age_group_range)
first_name = fake.first_name_male() if sex == "Male" else fake.first_name_female()
first_name = fake.first_name_male() if gender == "Male" else fake.first_name_female()
different_last_name = random.randint(0, 100) < 10
if age_group == "N":
date_start = datetime.datetime.now() - relativedelta(years=1)
Expand Down Expand Up @@ -269,22 +268,24 @@ def _generate_individual_data(
registration_date = fake.date_between_dates(date_start=dob, date_end=datetime.datetime.now()).isoformat()
dob = dob.isoformat()

fullname = f"{first_name} {last_name}"
full_name = f"{first_name} {last_name}"
bank_ids = []
phone = ""
# Do not give bank account to kids

# Do not assign bank accounts to children
if age_group != "C":
val = {
"bank_id": bank_id.id,
"acc_number": str(random.randint(1, 999999999)),
}
bank_ids.append([0, 0, val])
phone = fake.phone_number()

data = {
"name": fullname,
"name": full_name,
"given_name": first_name,
"family_name": last_name,
"gender": sex,
"gender": gender,
"birthdate": dob,
"is_registrant": True,
"is_group": False,
Expand Down
18 changes: 0 additions & 18 deletions spp_api/controllers/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,6 @@ class OAS(http.Controller):
)
def index(self, **params):
primary_name = params.get("urls.primaryName")
# swagger_settings = {
# "urls": self._get_api_urls(),
# "urls.primaryName": primary_name,
# }

values = {
"urls": json.dumps(self._get_api_urls()),
Expand All @@ -56,20 +52,6 @@ def _get_api_urls(self):
}
)

# services_registry = _rest_services_databases.get(request.env.cr.dbname, {})
# api_urls = []
# for rest_root_path, spec in list(services_registry.items()):
# collection_path = rest_root_path[1:-1] # remove '/'
# collection_name = spec["collection_name"]
# for service in self._get_service_in_collection(collection_name):
# api_urls.append(
# {
# "name": "{}: {}".format(collection_path, service._usage),
# "url": "/api-docs/%s/%s.json"
# % (collection_path, service._usage),
# }
# )
# api_urls = sorted(api_urls, key=lambda k: k["name"])
return api_urls

@http.route(
Expand Down
41 changes: 20 additions & 21 deletions spp_api/controllers/pinguin.py
Original file line number Diff line number Diff line change
Expand Up @@ -373,29 +373,28 @@
:returns: New 'openapi.log' record.
:rtype: ..models.openapi_log.Log
"""
if True: # just to keep original indent
log_data = {
"namespace_id": namespace_id,
"request": "%s | %s | %d" % (user_request.url, user_request.method, user_response.status_code),
"request_data": None,
"response_data": None,
}
if namespace_log_request == "debug":
log_data["request_data"] = user_request.__dict__
elif namespace_log_request == "info":
log_data["request_data"] = user_request.__dict__
for k in ["form", "files"]:
try:
del log_data["request_data"][k]
except KeyError:
_logger.debug("Key %s not found in request_data" % k)
log_data = {

Check warning on line 376 in spp_api/controllers/pinguin.py

View check run for this annotation

Codecov / codecov/patch

spp_api/controllers/pinguin.py#L376

Added line #L376 was not covered by tests
"namespace_id": namespace_id,
"request": "%s | %s | %d" % (user_request.url, user_request.method, user_response.status_code),
"request_data": None,
"response_data": None,
}
if namespace_log_request == "debug":
log_data["request_data"] = user_request.__dict__

Check warning on line 383 in spp_api/controllers/pinguin.py

View check run for this annotation

Codecov / codecov/patch

spp_api/controllers/pinguin.py#L383

Added line #L383 was not covered by tests
elif namespace_log_request == "info":
log_data["request_data"] = user_request.__dict__

Check warning on line 385 in spp_api/controllers/pinguin.py

View check run for this annotation

Codecov / codecov/patch

spp_api/controllers/pinguin.py#L385

Added line #L385 was not covered by tests
for k in ["form", "files"]:
try:
del log_data["request_data"][k]
except KeyError:
_logger.debug("Key %s not found in request_data" % k)

Check warning on line 390 in spp_api/controllers/pinguin.py

View check run for this annotation

Codecov / codecov/patch

spp_api/controllers/pinguin.py#L387-L390

Added lines #L387 - L390 were not covered by tests

if namespace_log_response == "debug":
log_data["response_data"] = user_response.__dict__
elif namespace_log_response == "error" and user_response.status_code > 400:
log_data["response_data"] = user_response.__dict__
if namespace_log_response == "debug":
log_data["response_data"] = user_response.__dict__

Check warning on line 393 in spp_api/controllers/pinguin.py

View check run for this annotation

Codecov / codecov/patch

spp_api/controllers/pinguin.py#L393

Added line #L393 was not covered by tests
elif namespace_log_response == "error" and user_response.status_code > 400:
log_data["response_data"] = user_response.__dict__

Check warning on line 395 in spp_api/controllers/pinguin.py

View check run for this annotation

Codecov / codecov/patch

spp_api/controllers/pinguin.py#L395

Added line #L395 was not covered by tests

return env["spp_api.log"].create(log_data)
return env["spp_api.log"].create(log_data)

Check warning on line 397 in spp_api/controllers/pinguin.py

View check run for this annotation

Codecov / codecov/patch

spp_api/controllers/pinguin.py#L397

Added line #L397 was not covered by tests


# Patched http route
Expand Down
1 change: 1 addition & 0 deletions spp_api/tests/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@
from . import test_res_users
from . import test_ir_model_fields
from . import test_apijsonrequest
from . import test_main_controller
66 changes: 66 additions & 0 deletions spp_api/tests/test_main_controller.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
from odoo.tests import tagged
from odoo.tests.common import HttpCase


@tagged("post_install", "-at_install", "test_main_controller")
class TestOASController(HttpCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
# Create test namespace
cls.test_namespace = cls.env["spp_api.namespace"].create(
{"name": "test", "version_name": "1.0", "active": True, "token": "test_token"}
)

def setUp(self):
super().setUp()
# Set up request environment
self.authenticate("admin", "admin")
self.url_open("/") # This initializes the request object

def test_01_index(self):
"""Test the index method of OAS controller"""
# Test the index endpoint directly
response = self.url_open("/doc/api-docs/index.html")
self.assertEqual(response.status_code, 200)

def test_02_get_api_urls(self):
"""Test the _get_api_urls method of OAS controller"""
# Test the endpoint that uses _get_api_urls
response = self.url_open("/doc/api-docs/index.html")
self.assertEqual(response.status_code, 200)

# Verify the namespace is accessible
namespace = self.env["spp_api.namespace"].sudo().search([("name", "=", "test"), ("version_name", "=", "1.0")])
self.assertTrue(namespace)
self.assertTrue(namespace.active)

def test_03_oas_json_spec_download(self):
"""Test the oas_json_spec_download method of OAS controller"""
# Test with valid namespace and token
response = self.url_open(f"/api/test/1.0/swagger.json?token={self.test_namespace.token}")
self.assertEqual(response.status_code, 200)
self.assertEqual(response.headers["Content-Type"], "application/json")

# Test with invalid namespace
response = self.url_open("/api/invalid/1.0/swagger.json?token=test_token", allow_redirects=False)
self.assertEqual(response.status_code, 404)

# Test with invalid token
response = self.url_open("/api/test/1.0/swagger.json?token=invalid_token", allow_redirects=False)
self.assertEqual(response.status_code, 403)

def test_04_oas_document(self):
"""Test the oas_document method of OAS controller"""
# Test with valid namespace and token
response = self.url_open(f"/api/swagger-doc/test/1.0?token={self.test_namespace.token}")
self.assertEqual(response.status_code, 200)
self.assertTrue(response.headers["Content-Type"].startswith("text/html"))

# Test with invalid namespace
response = self.url_open("/api/swagger-doc/invalid/1.0?token=test_token", allow_redirects=False)
self.assertEqual(response.status_code, 404)

# Test with invalid token
response = self.url_open("/api/swagger-doc/test/1.0?token=invalid_token", allow_redirects=False)
self.assertEqual(response.status_code, 403)
10 changes: 5 additions & 5 deletions spp_farmer_registry_demo/models/generate_farmer_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -110,13 +110,13 @@
fake = create_faker(res.locale)

# Get available gender field selections
sex_choices = self.env["gender.type"].search([]).mapped("id")
sex_choice_range = sex_choices * 50
gender_choices = self.env["gender.type"].search([]).mapped("id")
gender_choice_range = gender_choices * 50

Check warning on line 114 in spp_farmer_registry_demo/models/generate_farmer_data.py

View check run for this annotation

Codecov / codecov/patch

spp_farmer_registry_demo/models/generate_farmer_data.py#L113-L114

Added lines #L113 - L114 were not covered by tests

num_groups = min(num_groups, self.GROUPS_PER_BATCH)

for i in range(0, num_groups):
group_id = res._generate_group_data(i, fake, sex_choice_range, kind_farm_id)
group_id = res._generate_group_data(i, fake, gender_choice_range, kind_farm_id)

Check warning on line 119 in spp_farmer_registry_demo/models/generate_farmer_data.py

View check run for this annotation

Codecov / codecov/patch

spp_farmer_registry_demo/models/generate_farmer_data.py#L119

Added line #L119 was not covered by tests

land_record_id = res._generate_land_record_record(group_id, res.locale)
group_id.farm_land_rec_id = land_record_id.id
Expand Down Expand Up @@ -178,8 +178,8 @@

return {"result": msg, "res_model": self._name, "res_ids": [res.id]}

def _generate_group_data(self, index, fake, sex_choice_range, kind_id):
sex = random.choice(sex_choice_range)
def _generate_group_data(self, index, fake, gender_choice_range, kind_id):
sex = random.choice(gender_choice_range)

Check warning on line 182 in spp_farmer_registry_demo/models/generate_farmer_data.py

View check run for this annotation

Codecov / codecov/patch

spp_farmer_registry_demo/models/generate_farmer_data.py#L182

Added line #L182 was not covered by tests
last_name = fake.last_name()
first_name = fake.first_name_male() if sex == "Male" else fake.first_name_female()
addl_name = fake.first_name_male() if sex == "Male" else fake.first_name_female()
Expand Down
Loading
Loading