Complete P1-004: Testing Manual Packages and reorganize test files

- Complete manual testing of all Oracle PL/SQL packages
- Document 75% success rate (3/4 components passing)
- Move all test scripts from api/ to api/tests/ subdirectory
- Update P1-004 story with comprehensive test results
- Identify external dependency blocking full order import
- Mark Phase 1 as 95% complete, ready for Phase 2

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-09-10 01:25:27 +03:00
parent 1dc5da4ed2
commit 52454a5925
13 changed files with 1722 additions and 25 deletions

View File

@@ -0,0 +1,154 @@
#!/usr/bin/env python3
"""
Check if PACK_JSON exists and test its functions
"""
import oracledb
import os
import json
from dotenv import load_dotenv
# Load environment
load_dotenv('.env')
# Oracle configuration
user = os.environ['ORACLE_USER']
password = os.environ['ORACLE_PASSWORD']
dsn = os.environ['ORACLE_DSN']
# Initialize Oracle client
try:
instantclient_path = os.environ.get('INSTANTCLIENTPATH', '/opt/oracle/instantclient_23_9')
oracledb.init_oracle_client(lib_dir=instantclient_path)
except Exception as e:
pass
def check_pack_json():
"""Check if PACK_JSON package exists"""
print("🔍 Checking PACK_JSON package...")
try:
with oracledb.connect(user=user, password=password, dsn=dsn) as conn:
with conn.cursor() as cur:
# Check if PACK_JSON exists
cur.execute("""
SELECT object_name, object_type, status
FROM user_objects
WHERE object_name = 'PACK_JSON'
ORDER BY object_type
""")
pack_json_objects = cur.fetchall()
if pack_json_objects:
print("✅ PACK_JSON found:")
for obj in pack_json_objects:
print(f" - {obj[1]}: {obj[2]}")
else:
print("❌ PACK_JSON not found")
return False
# Test PACK_JSON functions
print("\n🧪 Testing PACK_JSON functions...")
# Test JSON parsing
test_json = json.dumps([
{"sku": "TEST01", "cantitate": 2, "pret": 10.5},
{"sku": "TEST02", "cantitate": 1, "pret": 25.0}
])
print(f"Test JSON: {test_json}")
# Test parse_array
try:
cur.execute("SELECT * FROM TABLE(PACK_JSON.parse_array(?))", [test_json])
array_results = cur.fetchall()
print(f"✅ parse_array results: {len(array_results)} items")
for i, item in enumerate(array_results):
print(f" Item {i+1}: {item[0]}")
# Test get_string and get_number on first item
if i == 0:
json_item = item[0]
cur.execute("SELECT PACK_JSON.get_string(?, 'sku') FROM DUAL", [json_item])
sku = cur.fetchone()[0]
print(f" sku: {sku}")
cur.execute("SELECT PACK_JSON.get_number(?, 'cantitate') FROM DUAL", [json_item])
cantitate = cur.fetchone()[0]
print(f" cantitate: {cantitate}")
cur.execute("SELECT PACK_JSON.get_number(?, 'pret') FROM DUAL", [json_item])
pret = cur.fetchone()[0]
print(f" pret: {pret}")
except Exception as e:
print(f"❌ PACK_JSON test failed: {e}")
return False
print("✅ PACK_JSON is working correctly")
return True
except Exception as e:
print(f"❌ Check failed: {e}")
return False
def test_simple_order_import():
"""Test importa_comanda with simpler debugging"""
print("\n🧪 Testing simple order import with debug...")
try:
with oracledb.connect(user=user, password=password, dsn=dsn) as conn:
with conn.cursor() as cur:
# Simple test with one article
partner_id = -1 # Known test partner
simple_json = '[{"sku": "CAFE100", "cantitate": 1, "pret": 25.0}]'
order_number = 'TEST-SIMPLE-001'
print(f"Testing with: {simple_json}")
cur.execute("""
SELECT PACK_IMPORT_COMENZI.importa_comanda(
:order_num,
SYSDATE,
:partner_id,
:articles_json,
NULL,
NULL,
'Simple test order'
) FROM DUAL
""", {
'order_num': order_number,
'partner_id': partner_id,
'articles_json': simple_json
})
result = cur.fetchone()[0]
cur.execute("SELECT PACK_IMPORT_COMENZI.get_last_error FROM DUAL")
error = cur.fetchone()[0]
print(f"Result: {result}")
if error:
print(f"Error: {error}")
else:
print("No error")
except Exception as e:
print(f"❌ Test failed: {e}")
def main():
print("🔍 PACK_JSON and Order Import Debug")
print("=" * 50)
json_exists = check_pack_json()
if json_exists:
test_simple_order_import()
else:
print("\nSkipping order test - PACK_JSON not available")
if __name__ == "__main__":
main()