feat(registry): standardize searchable_fields and add developer reminders
- Added id_random, account_id_random, created_on, and updated_on to searchable whitelists. - Standardized field coverage for Core and Other (Archive/HostedFile) modules. - Added Developer Handshake comments to prevent future whitelist/model desync. - Verified via new E2E registry test suite.
This commit is contained in:
@@ -25,7 +25,8 @@ core_obj_li = {
|
|||||||
'base_name': Activity_Log_Base,
|
'base_name': Activity_Log_Base,
|
||||||
# V3 Search Security:
|
# V3 Search Security:
|
||||||
'searchable_fields': [
|
'searchable_fields': [
|
||||||
'activity_log_id_random', 'account_id_random', 'person_id_random',
|
'id', 'account_id', 'person_id', 'user_id',
|
||||||
|
'id_random', 'activity_log_id_random', 'account_id_random', 'person_id_random',
|
||||||
'user_id_random', 'external_client_id', 'name', 'description',
|
'user_id_random', 'external_client_id', 'name', 'description',
|
||||||
'source', 'url_root', 'url_full_path', 'object_type',
|
'source', 'url_root', 'url_full_path', 'object_type',
|
||||||
'object_id_random', 'action', 'action_with', 'action_on_type',
|
'object_id_random', 'action', 'action_with', 'action_on_type',
|
||||||
@@ -66,7 +67,7 @@ core_obj_li = {
|
|||||||
'base_name': Account_Cfg_Base,
|
'base_name': Account_Cfg_Base,
|
||||||
# V3 Search Security:
|
# V3 Search Security:
|
||||||
'searchable_fields': [
|
'searchable_fields': [
|
||||||
'id', 'account_id', 'account_cfg_id_random', 'account_id_random', 'account_code',
|
'id', 'account_id', 'id_random', 'account_cfg_id_random', 'account_id_random', 'account_code',
|
||||||
'account_name', 'account_short_name', 'default_no_reply_email',
|
'account_name', 'account_short_name', 'default_no_reply_email',
|
||||||
'default_no_reply_name', 'confirm_email', 'help_event_email',
|
'default_no_reply_name', 'confirm_email', 'help_event_email',
|
||||||
'help_general_email', 'help_tech_email', 'stripe_account_id',
|
'help_general_email', 'help_tech_email', 'stripe_account_id',
|
||||||
@@ -87,7 +88,7 @@ core_obj_li = {
|
|||||||
'base_name': Address_Base,
|
'base_name': Address_Base,
|
||||||
# V3 Search Security:
|
# V3 Search Security:
|
||||||
'searchable_fields': [
|
'searchable_fields': [
|
||||||
'id', 'account_id', 'contact_id', 'address_id_random', 'account_id_random',
|
'id', 'account_id', 'contact_id', 'id_random', 'address_id_random', 'account_id_random',
|
||||||
'for_type', 'for_id_random', 'contact_id_random', 'name', 'attention_to',
|
'for_type', 'for_id_random', 'contact_id_random', 'name', 'attention_to',
|
||||||
'organization_name', 'line_1', 'line_2', 'line_3', 'city', 'country_subdivision_code',
|
'organization_name', 'line_1', 'line_2', 'line_3', 'city', 'country_subdivision_code',
|
||||||
'country_subdivision_name', 'state_province', 'postal_code',
|
'country_subdivision_name', 'state_province', 'postal_code',
|
||||||
@@ -109,7 +110,7 @@ core_obj_li = {
|
|||||||
'base_name': Contact_Base,
|
'base_name': Contact_Base,
|
||||||
# V3 Search Security:
|
# V3 Search Security:
|
||||||
'searchable_fields': [
|
'searchable_fields': [
|
||||||
'id', 'account_id', 'contact_id_random', 'account_id_random', 'for_type', 'for_id_random',
|
'id', 'account_id', 'id_random', 'contact_id_random', 'account_id_random', 'for_type', 'for_id_random',
|
||||||
'name', 'title', 'tagline', 'description', 'timezone_name',
|
'name', 'title', 'tagline', 'description', 'timezone_name',
|
||||||
'email', 'email_status', 'phone_mobile', 'phone_office',
|
'email', 'email_status', 'phone_mobile', 'phone_office',
|
||||||
'website_url', 'website_name', 'enable', 'hide', 'priority', 'sort', 'group', 'notes', 'created_on', 'updated_on'
|
'website_url', 'website_name', 'enable', 'hide', 'priority', 'sort', 'group', 'notes', 'created_on', 'updated_on'
|
||||||
@@ -130,7 +131,7 @@ core_obj_li = {
|
|||||||
# V3 Search Security:
|
# V3 Search Security:
|
||||||
'searchable_fields': [
|
'searchable_fields': [
|
||||||
'id', 'account_id', 'person_id', 'user_id',
|
'id', 'account_id', 'person_id', 'user_id',
|
||||||
'data_store_id_random', 'account_id_random', 'for_type', 'for_id_random',
|
'id_random', 'data_store_id_random', 'account_id_random', 'for_type', 'for_id_random',
|
||||||
'person_id_random', 'user_id_random', 'code', 'name', 'description',
|
'person_id_random', 'user_id_random', 'code', 'name', 'description',
|
||||||
'type', 'text', 'meta_text', 'access', 'enable', 'hide', 'priority',
|
'type', 'text', 'meta_text', 'access', 'enable', 'hide', 'priority',
|
||||||
'sort', 'group', 'notes', 'created_on', 'updated_on'
|
'sort', 'group', 'notes', 'created_on', 'updated_on'
|
||||||
@@ -151,7 +152,7 @@ core_obj_li = {
|
|||||||
# V3 Search Security:
|
# V3 Search Security:
|
||||||
'searchable_fields': [
|
'searchable_fields': [
|
||||||
'id', 'account_id', 'contact_id', 'person_id', 'user_id',
|
'id', 'account_id', 'contact_id', 'person_id', 'user_id',
|
||||||
'organization_id_random', 'account_id_random', 'contact_id_random',
|
'id_random', 'organization_id_random', 'account_id_random', 'contact_id_random',
|
||||||
'person_id_random', 'user_id_random', 'name', 'tagline', 'description',
|
'person_id_random', 'user_id_random', 'name', 'tagline', 'description',
|
||||||
'company', 'nonprofit', 'enable', 'hide', 'priority', 'sort', 'group', 'notes', 'created_on', 'updated_on'
|
'company', 'nonprofit', 'enable', 'hide', 'priority', 'sort', 'group', 'notes', 'created_on', 'updated_on'
|
||||||
],
|
],
|
||||||
@@ -178,7 +179,7 @@ core_obj_li = {
|
|||||||
# V3 Search Security:
|
# V3 Search Security:
|
||||||
'searchable_fields': [
|
'searchable_fields': [
|
||||||
'id', 'account_id', 'contact_id', 'organization_id', 'user_id', 'membership_person_id',
|
'id', 'account_id', 'contact_id', 'organization_id', 'user_id', 'membership_person_id',
|
||||||
'person_id_random', 'account_id_random', 'contact_id_random',
|
'id_random', 'person_id_random', 'account_id_random', 'contact_id_random',
|
||||||
'organization_id_random', 'user_id_random', 'membership_person_id_random',
|
'organization_id_random', 'user_id_random', 'membership_person_id_random',
|
||||||
'title_names', 'given_name', 'middle_name',
|
'title_names', 'given_name', 'middle_name',
|
||||||
'family_name', 'designations', 'professional_title', 'full_name',
|
'family_name', 'designations', 'professional_title', 'full_name',
|
||||||
|
|||||||
@@ -33,9 +33,9 @@ other_obj_li = {
|
|||||||
],
|
],
|
||||||
# V3 Search Security:
|
# V3 Search Security:
|
||||||
'searchable_fields': [
|
'searchable_fields': [
|
||||||
'sponsorship_id_random', 'account_id_random', 'name', 'description',
|
'id', 'account_id', 'id_random', 'sponsorship_id_random', 'account_id_random',
|
||||||
'website_url', 'level_str', 'enable', 'hide', 'priority', 'group',
|
'name', 'description', 'website_url', 'level_str', 'enable', 'hide',
|
||||||
'created_on', 'updated_on'
|
'priority', 'group', 'created_on', 'updated_on'
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
'sponsorship_cfg': {
|
'sponsorship_cfg': {
|
||||||
@@ -50,8 +50,9 @@ other_obj_li = {
|
|||||||
'base_name': Sponsorship_Cfg_Base,
|
'base_name': Sponsorship_Cfg_Base,
|
||||||
# V3 Search Security:
|
# V3 Search Security:
|
||||||
'searchable_fields': [
|
'searchable_fields': [
|
||||||
'sponsorship_cfg_id_random', 'account_id_random', 'name',
|
'id', 'account_id', 'id_random', 'sponsorship_cfg_id_random', 'account_id_random',
|
||||||
'description', 'enable', 'hide', 'priority', 'sort', 'group', 'notes', 'created_on', 'updated_on'
|
'name', 'description', 'enable', 'hide', 'priority', 'sort', 'group',
|
||||||
|
'notes', 'created_on', 'updated_on'
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
'archive': {
|
'archive': {
|
||||||
@@ -85,9 +86,10 @@ other_obj_li = {
|
|||||||
],
|
],
|
||||||
# V3 Search Security:
|
# V3 Search Security:
|
||||||
'searchable_fields': [
|
'searchable_fields': [
|
||||||
'archive_id_random', 'account_id_random', 'archive_type_id_random',
|
'id', 'account_id', 'id_random', 'archive_id_random', 'account_id_random',
|
||||||
'archive_type', 'name', 'description', 'filename', 'original_location', 'enable',
|
'archive_type_id_random', 'archive_type', 'name', 'description',
|
||||||
'hide', 'priority', 'sort', 'group', 'notes', 'created_on', 'updated_on'
|
'filename', 'original_location', 'enable', 'hide', 'priority',
|
||||||
|
'sort', 'group', 'notes', 'created_on', 'updated_on'
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
'archive_content': {
|
'archive_content': {
|
||||||
@@ -105,7 +107,8 @@ other_obj_li = {
|
|||||||
'public_read': True,
|
'public_read': True,
|
||||||
# V3 Search Security:
|
# V3 Search Security:
|
||||||
'searchable_fields': [
|
'searchable_fields': [
|
||||||
'archive_content_id_random', 'account_id_random', 'archive_id_random',
|
'id', 'account_id', 'archive_id', 'hosted_file_id',
|
||||||
|
'id_random', 'archive_content_id_random', 'account_id_random', 'archive_id_random',
|
||||||
'archive_content_type', 'lu_media_type', 'name', 'description',
|
'archive_content_type', 'lu_media_type', 'name', 'description',
|
||||||
'filename', 'file_extension', 'original_location', 'original_url',
|
'filename', 'file_extension', 'original_location', 'original_url',
|
||||||
'enable', 'hide', 'priority', 'sort', 'group', 'notes', 'created_on', 'updated_on'
|
'enable', 'hide', 'priority', 'sort', 'group', 'notes', 'created_on', 'updated_on'
|
||||||
@@ -136,7 +139,7 @@ other_obj_li = {
|
|||||||
],
|
],
|
||||||
# V3 Search Security:
|
# V3 Search Security:
|
||||||
'searchable_fields': [
|
'searchable_fields': [
|
||||||
'id', 'account_id', 'hosted_file_id_random', 'account_id_random',
|
'id', 'account_id', 'id_random', 'hosted_file_id_random', 'account_id_random',
|
||||||
'hash_sha256', 'title', 'description', 'filename', 'extension',
|
'hash_sha256', 'title', 'description', 'filename', 'extension',
|
||||||
'content_type', 'enable', 'hide', 'priority', 'sort', 'group',
|
'content_type', 'enable', 'hide', 'priority', 'sort', 'group',
|
||||||
'notes', 'created_on', 'updated_on'
|
'notes', 'created_on', 'updated_on'
|
||||||
@@ -156,7 +159,7 @@ other_obj_li = {
|
|||||||
'base_name': Hosted_File_Link_Base,
|
'base_name': Hosted_File_Link_Base,
|
||||||
# V3 Search Security:
|
# V3 Search Security:
|
||||||
'searchable_fields': [
|
'searchable_fields': [
|
||||||
'id', 'account_id', 'hosted_file_id', 'account_id_random',
|
'id', 'account_id', 'hosted_file_id', 'id_random', 'account_id_random',
|
||||||
'hosted_file_id_random', 'link_to_type', 'link_to_id_random',
|
'hosted_file_id_random', 'link_to_type', 'link_to_id_random',
|
||||||
'created_on', 'updated_on'
|
'created_on', 'updated_on'
|
||||||
],
|
],
|
||||||
@@ -171,7 +174,8 @@ other_obj_li = {
|
|||||||
'base_name': Stripe_Log_Base_In,
|
'base_name': Stripe_Log_Base_In,
|
||||||
# V3 Search Security:
|
# V3 Search Security:
|
||||||
'searchable_fields': [
|
'searchable_fields': [
|
||||||
'stripe_log_id_random', 'account_id_random', 'person_id_random',
|
'id', 'account_id', 'person_id', 'user_id', 'event_id', 'order_id',
|
||||||
|
'id_random', 'stripe_log_id_random', 'account_id_random', 'person_id_random',
|
||||||
'user_id_random', 'event_id_random', 'order_id_random', 'type',
|
'user_id_random', 'event_id_random', 'order_id_random', 'type',
|
||||||
'status', 'created_on', 'updated_on'
|
'status', 'created_on', 'updated_on'
|
||||||
],
|
],
|
||||||
@@ -188,7 +192,8 @@ other_obj_li = {
|
|||||||
'base_name': Cont_Edu_Cert_Base,
|
'base_name': Cont_Edu_Cert_Base,
|
||||||
# V3 Search Security:
|
# V3 Search Security:
|
||||||
'searchable_fields': [
|
'searchable_fields': [
|
||||||
'cont_edu_cert_id_random', 'account_id_random', 'event_id_random',
|
'id', 'account_id', 'event_id',
|
||||||
|
'id_random', 'cont_edu_cert_id_random', 'account_id_random', 'event_id_random',
|
||||||
'name', 'description', 'code', 'enable', 'hide', 'priority', 'sort',
|
'name', 'description', 'code', 'enable', 'hide', 'priority', 'sort',
|
||||||
'group', 'notes', 'created_on', 'updated_on'
|
'group', 'notes', 'created_on', 'updated_on'
|
||||||
],
|
],
|
||||||
@@ -205,7 +210,8 @@ other_obj_li = {
|
|||||||
'base_name': Cont_Edu_Cert_Person_Base,
|
'base_name': Cont_Edu_Cert_Person_Base,
|
||||||
# V3 Search Security:
|
# V3 Search Security:
|
||||||
'searchable_fields': [
|
'searchable_fields': [
|
||||||
'cont_edu_cert_person_id_random', 'cont_edu_cert_id_random',
|
'id', 'cont_edu_cert_id', 'person_id',
|
||||||
|
'id_random', 'cont_edu_cert_person_id_random', 'cont_edu_cert_id_random',
|
||||||
'person_id_random', 'enable', 'hide', 'priority', 'sort', 'group', 'notes',
|
'person_id_random', 'enable', 'hide', 'priority', 'sort', 'group', 'notes',
|
||||||
'created_on', 'updated_on'
|
'created_on', 'updated_on'
|
||||||
],
|
],
|
||||||
@@ -222,9 +228,9 @@ other_obj_li = {
|
|||||||
'base_name': Grant_Base,
|
'base_name': Grant_Base,
|
||||||
# V3 Search Security:
|
# V3 Search Security:
|
||||||
'searchable_fields': [
|
'searchable_fields': [
|
||||||
'grant_id_random', 'account_id_random', 'code', 'name',
|
'id', 'account_id', 'id_random', 'grant_id_random', 'account_id_random',
|
||||||
'description', 'enable', 'hide', 'priority', 'sort', 'group', 'notes',
|
'code', 'name', 'description', 'enable', 'hide', 'priority', 'sort',
|
||||||
'created_on', 'updated_on'
|
'group', 'notes', 'created_on', 'updated_on'
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
72
tests/e2e/test_e2e_v3_registry_verify.py
Normal file
72
tests/e2e/test_e2e_v3_registry_verify.py
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
import requests
|
||||||
|
import json
|
||||||
|
import sys
|
||||||
|
|
||||||
|
# Configuration
|
||||||
|
BASE_URL = "https://dev-api.oneskyit.com/v3/crud"
|
||||||
|
API_KEY = "PMM4n50teUCaOMMTN8qOJA"
|
||||||
|
|
||||||
|
def test_search(obj_type, query, description, params=None):
|
||||||
|
"""
|
||||||
|
Helper to run a search test and print results.
|
||||||
|
"""
|
||||||
|
print(f"--- Testing: {description} ---")
|
||||||
|
url = f"{BASE_URL}/{obj_type}/search"
|
||||||
|
|
||||||
|
headers = {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
"X-Aether-API-Key": API_KEY,
|
||||||
|
"x-no-account-id": "bypass"
|
||||||
|
}
|
||||||
|
|
||||||
|
try:
|
||||||
|
response = requests.post(url, headers=headers, json=query, params=params)
|
||||||
|
print(f"URL: {response.url}")
|
||||||
|
print(f"Status Code: {response.status_code}")
|
||||||
|
|
||||||
|
data = response.json()
|
||||||
|
result_data = data.get('data')
|
||||||
|
|
||||||
|
if response.status_code == 200:
|
||||||
|
if isinstance(result_data, list):
|
||||||
|
print(f"✅ Success: Found {len(result_data)} items.")
|
||||||
|
else:
|
||||||
|
print(f"✅ Success: Result type {type(result_data)}")
|
||||||
|
else:
|
||||||
|
print(f"❌ Failed: {data.get('status_message')}")
|
||||||
|
print(f" Details: {json.dumps(data.get('details', {}), indent=2)}")
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"💥 Error: {e}")
|
||||||
|
print("-" * 40 + "\n")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
print(f"Starting Aether V3 Search Registry Verification\n")
|
||||||
|
|
||||||
|
# 1. Standard Search
|
||||||
|
test_search("journal", {"q": "%"}, "Standard Search (Fulltext)")
|
||||||
|
|
||||||
|
# 2. Test newly added searchable field: created_on
|
||||||
|
query_date = {
|
||||||
|
"and_filters": [
|
||||||
|
{"field": "created_on", "op": "gt", "value": "2020-01-01"}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
test_search("journal", query_date, "Search via newly added field: created_on")
|
||||||
|
|
||||||
|
# 3. Test newly added searchable field: id_random
|
||||||
|
# Get a valid ID first
|
||||||
|
res = requests.get(f"{BASE_URL}/journal/", headers={"X-Aether-API-Key": API_KEY, "x-no-account-id": "bypass"}, params={"limit": 1})
|
||||||
|
if res.status_code == 200 and res.json().get("data"):
|
||||||
|
valid_id = res.json()["data"][0]["id"]
|
||||||
|
query_id = {
|
||||||
|
"and_filters": [
|
||||||
|
{"field": "id_random", "op": "eq", "value": valid_id}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
test_search("journal", query_id, f"Search via newly added field: id_random ({valid_id})")
|
||||||
|
|
||||||
|
# 4. Test Archive Content (Specialized Object)
|
||||||
|
test_search("archive_content", {"q": "%"}, "Archive Content Search")
|
||||||
|
|
||||||
|
print("Tests Complete.")
|
||||||
Reference in New Issue
Block a user