ApiLogicServer 15.1.2__py3-none-any.whl → 15.2.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- api_logic_server_cli/api_logic_server.py +20 -16
- api_logic_server_cli/api_logic_server_info.yaml +3 -3
- api_logic_server_cli/cli.py +17 -2
- api_logic_server_cli/create_from_model/dbml.py +1 -1
- api_logic_server_cli/genai/genai.py +39 -28
- api_logic_server_cli/genai/genai_react_app.py +23 -1
- api_logic_server_cli/genai/genai_svcs.py +5 -3
- api_logic_server_cli/prototypes/base/.github/.copilot-instructions.md +164 -4
- api_logic_server_cli/prototypes/{manager/samples/basic_demo/.github/.copilot-instructions.md → base/.github/.copilot-instructionsZ.mdx} +84 -4
- api_logic_server_cli/prototypes/base/.vscode/launch.json +1 -1
- api_logic_server_cli/prototypes/base/api/system/api_utils.py +7 -3
- api_logic_server_cli/prototypes/base/config/config.py +1 -1
- api_logic_server_cli/prototypes/base/docs/training/readme_training.md +3 -0
- api_logic_server_cli/prototypes/base/docs/training/testing.md +779 -0
- api_logic_server_cli/prototypes/base/logic/declare_logic.py +4 -2
- api_logic_server_cli/prototypes/base/logic/logic_discovery/use_case.py +2 -0
- api_logic_server_cli/prototypes/base/test/api_logic_server_behave/AI-Generated-Tests-from-Rules.md +559 -0
- api_logic_server_cli/prototypes/base/test/api_logic_server_behave/behave_logic_report.py +46 -17
- api_logic_server_cli/prototypes/base/test/api_logic_server_behave/check_step_order.py +120 -0
- api_logic_server_cli/prototypes/base/test/api_logic_server_behave/features/steps/test_data_helpers.py +242 -0
- api_logic_server_cli/prototypes/base/test/api_logic_server_behave/features/steps/test_utils.py +5 -1
- api_logic_server_cli/prototypes/base/test/api_logic_server_behave/reports/Behave Logic Report Intro micro.md +15 -0
- api_logic_server_cli/prototypes/base/test/api_logic_server_behave/reports/Behave Logic Report Intro.md +10 -66
- api_logic_server_cli/prototypes/base/test/readme_test.md +72 -4
- api_logic_server_cli/prototypes/basic_demo/iteration/api/api_discovery/order_b2b.py +22 -18
- api_logic_server_cli/prototypes/basic_demo/ui/my-react-app-cards/README.md +3 -1
- api_logic_server_cli/prototypes/manager/.github/.copilot-instructions.md +30 -9
- api_logic_server_cli/prototypes/manager/.github/sync-to-dev-src.sh +42 -0
- api_logic_server_cli/prototypes/manager/.vscode/launch.json +30 -30
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/.github/.copilot-instructions.md +741 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/docs/db.dbml +43 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/docs/training/readme_training.md +3 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/docs/training/testing.md +593 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/AI-Generated-Tests-from-Rules.md +554 -0
- api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/test/api_logic_server_behave/behave_logic_report.py +35 -9
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/features/order_processing.feature +72 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/features/steps/about_steps.py +16 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/features/steps/order_processing_steps.py +553 -0
- api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/test/api_logic_server_behave/features/steps/test_utils.py +5 -1
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/behave.log +79 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Add_Item_Exceeding_Credit.log +8 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Assign_Product_to_Item.log +26 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/B2B_Order_-_10_Gadget.log +46 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/B2B_Order_-_10_carbon_neu.log +41 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/B2B_Order_-_1_Green.log +42 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/B2B_Order_-_5_Widget.log +42 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/B2B_Order_Placement.log +2 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Balance_Check.log +2 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Carbon_Neutral_B2B_Order.log +52 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Carbon_Neutral_Discount_A.log +42 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Change_Item_Product.log +25 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Change_Item_Product_to_Ga.log +25 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Change_Order_Customer_Adj.log +19 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Change_Order_Customer_to_.log +19 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Change_Product_Updates_Un.log +25 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Create_Multi-Item_Order.log +79 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Create_Order_for_Constrai.log +2 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Create_Order_for_FK_Chang.log +55 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Create_Order_for_Shipping.log +55 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Create_Shipped_Order.log +54 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Create_Test_Customer.log +13 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Create_Test_Order.log +55 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Credit_Limit_Constraint_T.log +2 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Customer_Change.log +20 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Delete_First_Item.log +20 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Delete_Item_Reduces_Order.log +20 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Exceed_Credit_Limit_Rejec.log +46 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Good_Order_Placed_via_B2B.log +42 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Item_Deletion.log +20 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Item_Quantity_Update.log +23 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Item_Quantity_Update_Reca.log +23 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Item_Quantity_Update_to_1.log +23 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Order_Customer_Change.log +19 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Order_Shipping.log +19 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Order_Unshipping.log +19 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Product_Change.log +26 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Product_Unit_Price_Copied.log +42 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Setup_Diana_for_Constrain.log +53 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Setup_Item_for_Product_Ch.log +53 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Setup_Item_for_Unit_Price.log +30 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Setup_Order_-_10_Widget.log +41 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Setup_Order_-_2_Gadget.log +41 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Setup_Order_-_2_Widget.log +42 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Setup_Order_-_3_Widget_+_.log +57 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Setup_Order_-_3_Widget_an.log +12 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Setup_Order_-_5_Gadget.log +56 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Setup_Order_-_5_Widget.log +41 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Setup_Order_for_Alice.log +53 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Setup_Order_for_Bob.log +53 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Setup_Shipped_Order.log +52 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Setup_Unshipped_Order.log +53 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Ship_Order.log +18 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Ship_Order_Excludes_from_.log +18 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/System_Ready.log +3 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Test_Order_Setup_-_1_Item.log +53 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Test_Order_Setup_-_2_Item.log +76 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Transaction_Processing.log +19 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Unship_Order.log +18 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Unship_Order_Includes_in_.log +18 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Verify_Charlie_Balance.log +1 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Verify_Customer_Balance.log +11 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Verify_Diana_Balance.log +11 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Verify_Item_Amount.log +1 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Verify_Order_Total.log +1 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/logs/scenario_logic_logs/Verify_Unit_Price_Copy.log +1 -0
- api_logic_server_cli/prototypes/manager/samples/basic_demo_sample/test/api_logic_server_behave/reports/Behave Logic Report.md +303 -0
- api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/test/readme_test.md +72 -4
- api_logic_server_cli/prototypes/manager/samples/readme_samples.md +1 -1
- api_logic_server_cli/prototypes/manager/system/ApiLogicServer-Internal-Dev/copilot-dev-context.md +150 -0
- api_logic_server_cli/prototypes/manager/system/genai/prompt_inserts/sqlite_inserts_model_test_hints_with_relns.prompt +94 -0
- api_logic_server_cli/prototypes/nw/test/readme_test_nw.md +333 -92
- apilogicserver-15.2.0.dist-info/METADATA +506 -0
- {apilogicserver-15.1.2.dist-info → apilogicserver-15.2.0.dist-info}/RECORD +615 -535
- api_logic_server_cli/prototypes/manager/samples/basic_demo/docs/db.dbml +0 -14
- api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/features/steps/about.py +0 -20
- api_logic_server_cli/prototypes/manager/samples/basic_demo/test/api_logic_server_behave/logs/behave.log +0 -0
- apilogicserver-15.1.2.dist-info/METADATA +0 -169
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/.devcontainer-option/For_VSCode.dockerfile +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/.devcontainer-option/devcontainer.json +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/.devcontainer-option/readme.md +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/.devcontainer-option/setup.sh +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/.env +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/.gitignore +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/.idea/runConfigurations/ApiLogicServer.xml +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/.idea/runConfigurations/Report_Behave_Logic.xml +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/.idea/runConfigurations/Run_Behave.xml +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/.idea/runConfigurations/Windows_Run_Behave.xml +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/.idea/runConfigurations/run___No_Security.xml +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/.idea/runConfigurations/run_docker.xml +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/.vscode/launch.json +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/.vscode/settings.json +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/.vscode/venv_init.sh +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/_config.yml +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/_layouts/redirect.html +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/api/__init__.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/api/api_discovery/auto_discovery.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/api/api_discovery/mcp_discovery.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/api/api_discovery/mcp_expose_api_models.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/api/api_discovery/new_service.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/api/api_discovery/newer_service.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/api/api_discovery/ontimize_api.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/api/api_discovery/order_b2b_service.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/api/api_discovery/system.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/api/customize_api.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/api/expose_api_models.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/api/json_encoder.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/api/readme_customize_api.md +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/api/system/api_utils.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/api/system/custom_endpoint.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/api/system/expression_parser.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/api/system/gen_csv_report.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/api/system/gen_pdf_report.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/api/system/opt_locking/opt_locking.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/api/system/opt_locking/readme.md +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/api_logic_server_run.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/config/__init__.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/config/activate_logicbank.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/config/config.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/config/default.env +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/config/logging-reduced.yml +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/config/logging.yml +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/config/mypy.ini +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/config/server_setup.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/api/api_discovery/openapi.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/config/default.env +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/database/db.sqlite +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/database/models.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/docs/mcp_learning/mcp_discovery.json +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/logic/cocktail-napkin.jpg +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/logic/declare_logic.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/logic/logic_discovery/email_request.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/logic/logic_discovery/simple_constraints.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/security/declare_security.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/ui/admin/admin.yaml +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/ui/admin/home.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/ui/reference_react_app/README.md +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/ui/reference_react_app/README_create_react_app.md +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/ui/reference_react_app/package-lock.json +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/ui/reference_react_app/package.json +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/ui/reference_react_app/public/favicon.ico +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/ui/reference_react_app/public/index.html +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/ui/reference_react_app/public/logo192.png +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/ui/reference_react_app/public/logo512.png +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/ui/reference_react_app/public/manifest.json +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/ui/reference_react_app/public/robots.txt +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/ui/reference_react_app/src/App.css +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/ui/reference_react_app/src/App.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/ui/reference_react_app/src/App.test.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/ui/reference_react_app/src/Config-reference.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/ui/reference_react_app/src/Config.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/ui/reference_react_app/src/Customer-reference.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/ui/reference_react_app/src/Customer.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/ui/reference_react_app/src/Item.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/ui/reference_react_app/src/Order.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/ui/reference_react_app/src/Product.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/ui/reference_react_app/src/SysEmail.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/ui/reference_react_app/src/SysMcp.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/ui/reference_react_app/src/app_loader.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/ui/reference_react_app/src/index.css +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/ui/reference_react_app/src/index.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/ui/reference_react_app/src/logo.svg +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/ui/reference_react_app/src/rav4-jsonapi-client/.eslintrc +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/ui/reference_react_app/src/rav4-jsonapi-client/.yarnrc.yml +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/ui/reference_react_app/src/rav4-jsonapi-client/default-settings.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/ui/reference_react_app/src/rav4-jsonapi-client/default-settings.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/ui/reference_react_app/src/rav4-jsonapi-client/errors.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/ui/reference_react_app/src/rav4-jsonapi-client/errors.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/ui/reference_react_app/src/rav4-jsonapi-client/index.test.tsx +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/ui/reference_react_app/src/rav4-jsonapi-client/index.tsx +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/ui/reference_react_app/src/rav4-jsonapi-client/ra-jsonapi-client.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/ui/reference_react_app/src/rav4-jsonapi-client/ra-jsonapi-client.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/ui/reference_react_app/src/rav4-jsonapi-client/resourceLookup.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/ui/reference_react_app/src/rav4-jsonapi-client/resourceLookup.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/ui/reference_react_app/src/rav4-jsonapi-client/styles.module.css +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/ui/reference_react_app/src/reportWebVitals.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/customizations/ui/reference_react_app/src/setupTests.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/database/__init__.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/database/alembic/alembic_run.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/database/alembic/env.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/database/alembic/readme_alembic.md +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/database/alembic/script.py.mako +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/database/alembic/versions/ae6a5c2fdc47_autogenerated.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/database/alembic/versions/readme.md +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/database/alembic.ini +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/database/authentication_db.sqlite +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/database/bind_dbs.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/database/customize_models.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/database/database_discovery/authentication_models.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/database/database_discovery/auto_discovery.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/database/db.sqlite +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/database/db_debug/db_debug.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/database/mcp_db.sqlite +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/database/mcp_models.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/database/models.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/database/system/SAFRSBaseX.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/database/test_data/alp_init.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/database/test_data/readme.md +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/database/test_data/response2code.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/database/test_data/test_data_preamble.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/devops/auth-db/authdb_mysql.Dockerfile +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/devops/auth-db/authdb_mysql.sql +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/devops/auth-db/authdb_postgres.sql +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/devops/docker-compose-dev-azure/azure-deploy.sh +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/devops/docker-compose-dev-local/docker-compose-dev-local.yml +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/devops/docker-compose-dev-local/docker-compose.sh +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/devops/docker-image/build_image.dockerfile +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/devops/docker-image/build_image.sh +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/devops/docker-image/env.list +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/devops/docker-image/run_image.sh +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/devops/docker-standard-image/docker-compose-standard-image.yml +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/devops/docker-standard-image/env.list +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/devops/keycloak/data/h2/keycloakdb.mv.db +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/devops/keycloak/data/h2/keycloakdb.trace.db +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/devops/keycloak/data/import/kcals-realm.json +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/devops/keycloak/data/import/kcals-users-0.json +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/devops/keycloak/data/import/master-realm.json +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/devops/keycloak/data/import/master-users-0.json +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/devops/keycloak/data/tmp/kc-gzip-cache/nnbna/js/keycloak.js.gz +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/devops/keycloak/docker-compose-dev-network.yml +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/devops/keycloak/docker-compose-nginx.yml +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/devops/keycloak/docker-compose.yml +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/devops/keycloak/import/kcals-realm.json +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/devops/keycloak/import/kcals-users-0.json +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/devops/keycloak/import/master-realm.json +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/devops/keycloak/import/master-users-0.json +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/devops/keycloak/nginx/cert.pem +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/devops/keycloak/nginx/key.pem +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/devops/keycloak/nginx/nginx.conf +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/devops/keycloak/startup_log_nginx.txt +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/devops/keycloak/startup_log_no_nginx.txt +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/devops/keycloak/unused/auth_provider.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/devops/keycloak/unused/unused-docker-compose-keycloak.sh +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/devops/python-anywhere/python_anywhere_wsgi.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/devops/readme-devops.md +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/docs/graphics/readme.md +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/docs/logic/readme.md +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/docs/logic_suggestions/readme_logic_suggestions.md +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/docs/mcp_learning/mcp.prompt +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/docs/mcp_learning/mcp_schema.json +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/docs/models-not-code.png +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/docs/runtime engines.png +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/docs/system-creation-vibe.md +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/docs/training/admin_app_1_context.prompt.md +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/docs/training/admin_app_2_functionality.prompt.md +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/docs/training/admin_app_3_architecture.prompt.md +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/docs/training/logic_bank_api.prompt +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/docs/training/logic_example.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/docs/training/react_map.prompt.md +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/docs/training/react_tree.prompt.md +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/integration/kafka/kafka_consumer.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/integration/kafka/kafka_producer.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/integration/kafka/kafka_readme.md +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/integration/mcp/examples/mcp_context_results.txt +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/integration/mcp/examples/mcp_discovery_response.json +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/integration/mcp/examples/mcp_request.prompt +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/integration/mcp/examples/mcp_schema.txt +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/integration/mcp/examples/mcp_tool_context_response.json +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/integration/mcp/examples/mcp_tool_context_response_get.json +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/integration/mcp/mcp_client_executor.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/integration/mcp/mcp_server_discovery.json +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/integration/mcp/readme-mcp.md +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/integration/n8n/N8N_WebHook_from_ApiLogicServer.json +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/integration/n8n/n8n_producer.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/integration/n8n/n8n_readme.md +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/integration/row_dict_maps/OrderB2BMapper.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/integration/row_dict_maps/row_dict_maps_readme.md +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/integration/system/FlaskKafka.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/integration/system/RowDictMapper.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/iteration/api/api_discovery/order_b2b.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/iteration/database/db.sqlite +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/iteration/docs/er_diagram.png +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/iteration/integration/row_dict_maps/OrderB2B.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/iteration/integration/row_dict_maps/OrderShipping.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/iteration/logic/declare_logic.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/iteration/ui/admin/admin.yaml +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/logic/declarative-vs-procedural-comparison.html +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/logic/declare_logic.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/logic/load_verify_rules.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/logic/logic_discovery/app_integration.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/logic/logic_discovery/auto_discovery.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/logic/logic_discovery/check_credit.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/logic/logic_discovery/mcp_client_executor_request.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/logic/logic_discovery/readme_logic_discovery.md +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/logic/logic_discovery/use_case.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/logic/procedural/credit_service.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/logic/procedural/declarative-vs-procedural-comparison.md +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/logic/procedural/declarative-vs-procedural-comparison.png +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/logic/readme_logic.md +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/readme.md +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/readme_project.md +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/readme_standard.md +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/readme_vibe.md +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/requirements.txt +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/run.ps1 +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/run.sh +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/security/__init__.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/security/authentication_provider/__init__.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/security/authentication_provider/abstract_authentication_provider.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/security/authentication_provider/keycloak/auth_provider.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/security/authentication_provider/memory/auth_provider.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/security/authentication_provider/memory/auth_provider_no_swagger.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/security/authentication_provider/sql/auth_provider.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/security/declare_security.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/security/readme_security.md +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/security/system/authentication.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/security/system/authorization.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/security/system/custom_swagger.json +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/test/__init__.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/test/api_logic_server_behave/__init__.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/test/api_logic_server_behave/behave_run.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/test/api_logic_server_behave/features/about.feature +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/test/api_logic_server_behave/reports/Behave Logic Report Intro micro.md +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/test/api_logic_server_behave/reports/Behave Logic Report Intro.md +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/test/api_logic_server_behave/reports/Behave Logic Report Sample.md +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/test/basic/server_test.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/__init__.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/admin/admin.yaml +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/admin/admin_loader.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/admin/authentication_admin.yaml +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/admin/home.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/admin/mcp_admin.yaml +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/.browserslistrc +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/.dockerignore +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/.editorconfig +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/.eslintrc.json +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/.gitignore +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/README.md +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/angular.json +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/app_model.yaml +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/docker-compose-ontimize.yml +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/e2e/protractor.conf.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/e2e/src/app.e2e-spec.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/e2e/src/app.po.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/e2e/tsconfig.json +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/karma.conf.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/nginx/nginx.conf +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/ngsw-config.json +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/package-lock.json +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/package.json +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/app-routing.module.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/app.component.html +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/app.component.scss +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/app.component.spec.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/app.component.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/app.config.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/app.module.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/login/login-routing.module.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/login/login.component.html +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/login/login.component.scss +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/login/login.component.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/login/login.module.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/login/login.theme.scss +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Customer/Customer-routing.module.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Customer/Customer.module.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Customer/detail/Customer-detail.component.html +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Customer/detail/Customer-detail.component.scss +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Customer/detail/Customer-detail.component.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Customer/home/Customer-home.component.html +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Customer/home/Customer-home.component.scss +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Customer/home/Customer-home.component.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Customer/new/Customer-new.component.html +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Customer/new/Customer-new.component.scss +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Customer/new/Customer-new.component.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Item/Item-routing.module.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Item/Item.module.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Item/detail/Item-detail.component.html +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Item/detail/Item-detail.component.scss +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Item/detail/Item-detail.component.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Item/home/Item-home.component.html +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Item/home/Item-home.component.scss +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Item/home/Item-home.component.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Item/new/Item-new.component.html +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Item/new/Item-new.component.scss +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Item/new/Item-new.component.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Order/Order-routing.module.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Order/Order.module.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Order/detail/Order-detail.component.html +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Order/detail/Order-detail.component.scss +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Order/detail/Order-detail.component.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Order/home/Order-home.component.html +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Order/home/Order-home.component.scss +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Order/home/Order-home.component.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Order/new/Order-new.component.html +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Order/new/Order-new.component.scss +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Order/new/Order-new.component.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Product/Product-routing.module.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Product/Product.module.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Product/detail/Product-detail.component.html +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Product/detail/Product-detail.component.scss +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Product/detail/Product-detail.component.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Product/home/Product-home.component.html +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Product/home/Product-home.component.scss +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Product/home/Product-home.component.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Product/new/Product-new.component.html +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Product/new/Product-new.component.scss +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/Product/new/Product-new.component.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/about/about-routing.module.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/about/about.component.html +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/about/about.component.scss +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/about/about.component.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/about/about.module.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/about/about.theme.scss +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/home/home-routing.module.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/home/home.component.html +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/home/home.component.scss +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/home/home.component.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/home/home.module.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/main-routing.module.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/main-theme.scss +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/main.component.html +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/main.component.scss +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/main.component.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/main.module.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/settings/settings-routing.module.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/settings/settings.component.html +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/settings/settings.component.scss +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/settings/settings.component.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/main/settings/settings.module.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/shared/Customer-card/Customer-card.component.html +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/shared/Customer-card/Customer-card.component.scss +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/shared/Customer-card/Customer-card.component.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/shared/Item-card/Item-card.component.html +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/shared/Item-card/Item-card.component.scss +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/shared/Item-card/Item-card.component.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/shared/Order-card/Order-card.component.html +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/shared/Order-card/Order-card.component.scss +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/shared/Order-card/Order-card.component.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/shared/Product-card/Product-card.component.html +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/shared/Product-card/Product-card.component.scss +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/shared/Product-card/Product-card.component.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/shared/app.menu.config.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/shared/app.services.config.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/shared/constant.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/app/shared/shared.module.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/assets/.gitkeep +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/assets/css/app.scss +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/assets/css/loader.css +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/assets/i18n/en.json +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/assets/i18n/es.json +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/assets/icons/ontimize128.png +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/assets/icons/ontimize16.png +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/assets/icons/ontimize256.png +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/assets/icons/ontimize32.png +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/assets/icons/ontimize48.png +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/assets/icons/ontimize64.png +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/assets/icons/ontimize72.png +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/assets/icons/ontimize96.png +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/assets/images/github.png +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/assets/images/login_bg.png +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/assets/images/no-image-transparent.png +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/assets/images/no-image.png +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/assets/images/ontimize.png +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/assets/images/ontimize_web_log.png +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/assets/images/sidenav-closed.png +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/assets/images/sidenav-closed.svg +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/assets/images/sidenav-opened.png +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/assets/images/sidenav-opened.svg +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/assets/images/user_profile.png +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/assets/js/domchange.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/assets/js/keyboard.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/environments/environment.prod.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/environments/environment.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/favicon.ico +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/index.html +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/main.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/manifest.webmanifest +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/polyfills.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/styles.scss +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/src/test.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/tsconfig.app.json +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/tsconfig.json +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/app/tsconfig.spec.json +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/images/Employee/andrew.jpg +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/images/Employee/anne.jpg +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/images/Employee/janet.jpg +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/images/Employee/laura.jpg +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/images/Employee/margaret.jpg +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/images/Employee/michael.jpg +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/images/Employee/nancy.jpg +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/images/Employee/robert.jpg +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/images/Employee/steven.jpg +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/images/Product/beverages.gif +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/images/Product/cereals.gif +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/images/Product/condiments.gif +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/images/Product/confections.gif +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/images/Product/diary.gif +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/images/Product/meat.gif +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/images/Product/produce.gif +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/images/Product/seafood.gif +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app/README.md +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app/README_create_react_app.md +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app/package-lock.json +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app/package.json +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app/public/favicon.ico +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app/public/index.html +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app/public/logo192.png +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app/public/logo512.png +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app/public/manifest.json +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app/public/robots.txt +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app/src/App.css +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app/src/App.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app/src/App.test.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app/src/Config.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app/src/Customer.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app/src/Item.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app/src/Order.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app/src/Product.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app/src/app_loader.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app/src/index.css +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app/src/index.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app/src/logo.svg +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app/src/rav4-jsonapi-client/.eslintrc +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app/src/rav4-jsonapi-client/.yarnrc.yml +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app/src/rav4-jsonapi-client/default-settings.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app/src/rav4-jsonapi-client/default-settings.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app/src/rav4-jsonapi-client/errors.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app/src/rav4-jsonapi-client/errors.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app/src/rav4-jsonapi-client/index.test.tsx +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app/src/rav4-jsonapi-client/index.tsx +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app/src/rav4-jsonapi-client/ra-jsonapi-client.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app/src/rav4-jsonapi-client/ra-jsonapi-client.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app/src/rav4-jsonapi-client/resourceLookup.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app/src/rav4-jsonapi-client/resourceLookup.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app/src/rav4-jsonapi-client/styles.module.css +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app/src/reportWebVitals.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app/src/setupTests.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app-cards/README.md +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app-cards/README_create_react_app.md +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app-cards/package-lock.json +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app-cards/package.json +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app-cards/product-cards.png +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app-cards/public/favicon.ico +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app-cards/public/index.html +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app-cards/public/logo192.png +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app-cards/public/logo512.png +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app-cards/public/manifest.json +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app-cards/public/robots.txt +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app-cards/src/App.css +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app-cards/src/App.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app-cards/src/App.test.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app-cards/src/Config.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app-cards/src/Customer.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app-cards/src/Item.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app-cards/src/Order.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app-cards/src/Product.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app-cards/src/app_loader.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app-cards/src/index.css +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app-cards/src/index.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app-cards/src/logo.svg +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app-cards/src/rav4-jsonapi-client/.eslintrc +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app-cards/src/rav4-jsonapi-client/.yarnrc.yml +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app-cards/src/rav4-jsonapi-client/default-settings.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app-cards/src/rav4-jsonapi-client/default-settings.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app-cards/src/rav4-jsonapi-client/errors.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app-cards/src/rav4-jsonapi-client/errors.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app-cards/src/rav4-jsonapi-client/index.test.tsx +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app-cards/src/rav4-jsonapi-client/index.tsx +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app-cards/src/rav4-jsonapi-client/ra-jsonapi-client.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app-cards/src/rav4-jsonapi-client/ra-jsonapi-client.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app-cards/src/rav4-jsonapi-client/resourceLookup.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app-cards/src/rav4-jsonapi-client/resourceLookup.ts +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app-cards/src/rav4-jsonapi-client/styles.module.css +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app-cards/src/reportWebVitals.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/my-react-app-cards/src/setupTests.js +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/templates/bar_chart.jinja +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/ui/templates/content.html +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/venv_setup/py.py +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/venv_setup/readme_venv.md +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/venv_setup/requirements-no-cli.txt +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/venv_setup/venv-linux.sh +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/venv_setup/venv.ps1 +0 -0
- /api_logic_server_cli/prototypes/manager/samples/{basic_demo → basic_demo_sample}/venv_setup/venv.sh +0 -0
- /api_logic_server_cli/prototypes/manager/system/{install-ApiLogicServer-dev → ApiLogicServer-Internal-Dev}/install-ApiLogicServer-dev.ps1 +0 -0
- /api_logic_server_cli/prototypes/manager/system/{install-ApiLogicServer-dev → ApiLogicServer-Internal-Dev}/install-ApiLogicServer-dev.sh +0 -0
- /api_logic_server_cli/prototypes/manager/system/{install-ApiLogicServer-dev → ApiLogicServer-Internal-Dev}/readme.md +0 -0
- {apilogicserver-15.1.2.dist-info → apilogicserver-15.2.0.dist-info}/WHEEL +0 -0
- {apilogicserver-15.1.2.dist-info → apilogicserver-15.2.0.dist-info}/entry_points.txt +0 -0
- {apilogicserver-15.1.2.dist-info → apilogicserver-15.2.0.dist-info}/licenses/LICENSE +0 -0
- {apilogicserver-15.1.2.dist-info → apilogicserver-15.2.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,779 @@
|
|
|
1
|
+
# AI Training: Creating Tests from Rules
|
|
2
|
+
|
|
3
|
+
> **🤖 For AI Assistants Only**
|
|
4
|
+
>
|
|
5
|
+
> This is internal training material for AI assistants (like GitHub Copilot) to generate Behave tests from declarative business rules.
|
|
6
|
+
>
|
|
7
|
+
> **👤 For Users:** See the [public documentation](https://apilogicserver.github.io/Docs/Behave-Creation/) which covers how to run tests, generate reports, and understand the testing framework.
|
|
8
|
+
>
|
|
9
|
+
> This document focuses on Phase 2 testing (using custom business APIs) and the critical patterns AI must follow to generate correct tests.
|
|
10
|
+
|
|
11
|
+
## CRITICAL: Test Generation Workflow
|
|
12
|
+
|
|
13
|
+
**When user says "create tests from rules", follow this EXACT sequence:**
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
Step 1a. Read database/models.py → Understand schema (IDs, aggregates, columns)
|
|
17
|
+
Step 1b. Read logic/declare_logic.py → Identify rules to test
|
|
18
|
+
Step 1c. Scan api/api_discovery/*.py → Discover custom APIs (PHASE 2!)
|
|
19
|
+
Step 2. Decide Phase 1 vs Phase 2 → Based on custom API existence
|
|
20
|
+
Step 3. Generate .feature files → Business language scenarios
|
|
21
|
+
Step 4. Implement steps/*.py → Using discovered APIs or CRUD
|
|
22
|
+
Step 4b. VERIFY STEP ORDERING → Multi-item BEFORE single-item (Rule #0.5!)
|
|
23
|
+
Step 5. SUGGEST how to run tests (DO NOT run automatically)
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
**CRITICAL PRE-TEST CHECKLIST:**
|
|
27
|
+
- [ ] Step 1c completed? (Custom APIs discovered)
|
|
28
|
+
- [ ] **Step ordering verified?** (Most specific → Most general)
|
|
29
|
+
- [ ] @when patterns: carbon neutral > multi-item > single-item
|
|
30
|
+
- [ ] @given patterns: multi-item > single-item
|
|
31
|
+
- [ ] Use `grep -n "@when('.*with" steps/*.py` to verify order
|
|
32
|
+
- [ ] Test data uses timestamps? (Rule #0: Repeatability)
|
|
33
|
+
- [ ] Security config read? (SECURITY_ENABLED value)
|
|
34
|
+
|
|
35
|
+
**DO NOT skip Step 1c!** Custom APIs change the entire testing approach.
|
|
36
|
+
|
|
37
|
+
**DO NOT skip Step 4b!** Wrong step ordering causes silent failures with balance=0.
|
|
38
|
+
|
|
39
|
+
**DO NOT run tests automatically!** Instead, suggest this workflow:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
# 1. Start the server (in separate terminal or background)
|
|
43
|
+
python api_logic_server_run.py
|
|
44
|
+
|
|
45
|
+
# 2. Run the tests (in another terminal)
|
|
46
|
+
python test/api_logic_server_behave/behave_run.py
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
**Why manual execution?** Tests require a running server. The AI cannot manage multiple terminals or background processes reliably.
|
|
50
|
+
|
|
51
|
+
## Phase 1 vs Phase 2: The Core Decision
|
|
52
|
+
|
|
53
|
+
### Phase 1: CRUD-Level Testing
|
|
54
|
+
- Direct API calls (POST, PATCH, DELETE)
|
|
55
|
+
- Granular rule testing (update qty, change FK, delete)
|
|
56
|
+
- Use when: No custom API exists
|
|
57
|
+
|
|
58
|
+
### Phase 2: Business Transaction Testing
|
|
59
|
+
- Custom business APIs (api/api_discovery/)
|
|
60
|
+
- Complete transactions (Order + Items together)
|
|
61
|
+
- Business-friendly language ("Account" vs "customer_id")
|
|
62
|
+
- Use when: Custom API exists for the business object
|
|
63
|
+
|
|
64
|
+
**Decision Tree:**
|
|
65
|
+
```
|
|
66
|
+
Custom API exists in api/api_discovery/?
|
|
67
|
+
├─ YES → Phase 2 for CREATE, Phase 1 for UPDATE/DELETE
|
|
68
|
+
└─ NO → Phase 1 for everything
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Step 1c: Discover Custom APIs (Phase 2)
|
|
72
|
+
|
|
73
|
+
**CRITICAL:** Check for custom APIs BEFORE generating CRUD tests!
|
|
74
|
+
|
|
75
|
+
**Discovery Process:**
|
|
76
|
+
```python
|
|
77
|
+
# 1. Scan api/api_discovery/*.py
|
|
78
|
+
# 2. Find classes with @jsonapi_rpc decorator
|
|
79
|
+
# 3. Extract: method name, endpoint, parameters, models created
|
|
80
|
+
# 4. Match to business rules (which rules does it test?)
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
**CRITICAL - Custom API Calling Convention:**
|
|
84
|
+
|
|
85
|
+
Custom APIs require **BOTH** `"method"` and `"args"` in the `meta` object:
|
|
86
|
+
|
|
87
|
+
```python
|
|
88
|
+
# ✅ CORRECT - Has both "method" and "args"
|
|
89
|
+
{
|
|
90
|
+
"meta": {
|
|
91
|
+
"method": "OrderB2B", # ← REQUIRED!
|
|
92
|
+
"args": {
|
|
93
|
+
"data": { ... }
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
# ❌ WRONG - Missing "method" field
|
|
99
|
+
{
|
|
100
|
+
"meta": {
|
|
101
|
+
"args": {
|
|
102
|
+
"data": { ... }
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Without the `"method"` field, the API call will fail with a 500 error.
|
|
109
|
+
|
|
110
|
+
**Example Discovery - OrderB2B:**
|
|
111
|
+
```python
|
|
112
|
+
# api/api_discovery/order_b2b_service.py
|
|
113
|
+
class OrderB2BEndPoint(safrs.JABase):
|
|
114
|
+
@jsonapi_rpc(http_methods=["POST"])
|
|
115
|
+
def OrderB2B(self, *args, **kwargs):
|
|
116
|
+
"""
|
|
117
|
+
Creates B2B orders from external partner systems.
|
|
118
|
+
|
|
119
|
+
Parameters:
|
|
120
|
+
Account: str - Customer name (not ID!)
|
|
121
|
+
Notes: str
|
|
122
|
+
Items: list - [{Name, QuantityOrdered}]
|
|
123
|
+
"""
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
**Discovery Result:**
|
|
127
|
+
```python
|
|
128
|
+
{
|
|
129
|
+
"order_b2b_service": {
|
|
130
|
+
"endpoint": "/api/OrderB2BEndPoint/OrderB2B",
|
|
131
|
+
"parameters": {
|
|
132
|
+
"Account": "Customer name",
|
|
133
|
+
"Items": [{"Name": "Product name", "QuantityOrdered": int}]
|
|
134
|
+
},
|
|
135
|
+
"creates": ["Order", "Item"],
|
|
136
|
+
"tests_rules": [
|
|
137
|
+
"Customer.Balance = sum(Order.AmountTotal)",
|
|
138
|
+
"Order.AmountTotal = sum(Item.Amount)",
|
|
139
|
+
"Customer.Balance <= CreditLimit"
|
|
140
|
+
]
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
**Using Discovered API:**
|
|
146
|
+
```python
|
|
147
|
+
# Phase 2: CREATE using custom API
|
|
148
|
+
@when('B2B order placed for "{customer_name}" with items')
|
|
149
|
+
def step_impl(context):
|
|
150
|
+
add_order_uri = 'http://localhost:5656/api/OrderB2BEndPoint/OrderB2B'
|
|
151
|
+
add_order_args = {
|
|
152
|
+
"meta": {"method": "OrderB2B", "args": {"data": {
|
|
153
|
+
"Account": customer_name, # Business language!
|
|
154
|
+
"Items": [{"Name": "Widget", "QuantityOrdered": 5}]
|
|
155
|
+
}}}
|
|
156
|
+
}
|
|
157
|
+
r = requests.post(url=add_order_uri, json=add_order_args)
|
|
158
|
+
|
|
159
|
+
# Phase 1: UPDATE using CRUD (granular testing)
|
|
160
|
+
@when('Item quantity changed to {qty:d}')
|
|
161
|
+
def step_impl(context, qty):
|
|
162
|
+
patch_uri = f'http://localhost:5656/api/Item/{item_id}/'
|
|
163
|
+
patch_data = {"data": {"attributes": {"quantity": qty}}}
|
|
164
|
+
r = requests.patch(url=patch_uri, json=patch_data)
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
## The 6 Critical Rules (Read FIRST!)
|
|
168
|
+
|
|
169
|
+
### Rule #0: TEST REPEATABILITY (MOST CRITICAL!) ⚠️
|
|
170
|
+
|
|
171
|
+
**TESTS MODIFY THE DATABASE. Tests MUST be repeatable and restartable.**
|
|
172
|
+
|
|
173
|
+
```python
|
|
174
|
+
# ❌ WRONG - Reuses contaminated data
|
|
175
|
+
@given('Customer "Bob" with balance {balance:d}')
|
|
176
|
+
def step_impl(context, name, balance):
|
|
177
|
+
r = requests.get(f'/api/Customer/?filter[name]=Bob')
|
|
178
|
+
if r.json()['data']:
|
|
179
|
+
customer = r.json()['data'][0] # REUSES Bob - balance accumulated!
|
|
180
|
+
|
|
181
|
+
# ✅ CORRECT - Always creates fresh data with timestamp
|
|
182
|
+
@given('Customer "Bob" with balance {balance:d}')
|
|
183
|
+
def step_impl(context, name, balance):
|
|
184
|
+
unique_name = f"Bob {int(time.time() * 1000)}" # ALWAYS unique!
|
|
185
|
+
post_data = {
|
|
186
|
+
"data": {
|
|
187
|
+
"type": "Customer",
|
|
188
|
+
"attributes": {
|
|
189
|
+
"name": unique_name,
|
|
190
|
+
"balance": balance,
|
|
191
|
+
"credit_limit": limit
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
r = requests.post(f'/api/Customer/', json=post_data)
|
|
196
|
+
context.customer_id = int(r.json()['data']['id'])
|
|
197
|
+
context.customer_name = unique_name # Save for later use
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
**Critical Patterns:**
|
|
201
|
+
- **NEVER reuse existing customers/orders** - always create fresh
|
|
202
|
+
- **Use timestamps** in names: `f"Bob {int(time.time() * 1000)}"`
|
|
203
|
+
- **Match exact database names** - "Widget" not "Widgets"
|
|
204
|
+
- **Don't assume clean state** - tests may run after failures
|
|
205
|
+
- **Track name mappings** for multi-customer tests (see Rule #8)
|
|
206
|
+
- **Understand DERIVED vs ADDED aggregates** (see Rule #9)
|
|
207
|
+
|
|
208
|
+
### Rule #0.5: BEHAVE STEP ORDERING (Pattern Matching!) ⚠️
|
|
209
|
+
|
|
210
|
+
**Behave matches steps by FIRST pattern that fits. More specific patterns MUST come before general ones.**
|
|
211
|
+
|
|
212
|
+
**Example 1: Carbon Neutral Products**
|
|
213
|
+
|
|
214
|
+
```python
|
|
215
|
+
# ❌ WRONG ORDER - General pattern matches first, specific never runs!
|
|
216
|
+
@when('B2B order placed for "{customer_name}" with {quantity:d} {product_name}')
|
|
217
|
+
def step_impl_general(context, customer_name, quantity, product_name):
|
|
218
|
+
# This matches "carbon neutral Widget" as product_name="carbon neutral Widget"
|
|
219
|
+
# The specific carbon neutral step below NEVER executes!
|
|
220
|
+
...
|
|
221
|
+
|
|
222
|
+
@when('B2B order placed for "{customer_name}" with {quantity:d} carbon neutral {product_name}')
|
|
223
|
+
def step_impl_carbon_neutral(context, customer_name, quantity, product_name):
|
|
224
|
+
# NEVER REACHED because general pattern above matched first
|
|
225
|
+
...
|
|
226
|
+
|
|
227
|
+
# ✅ CORRECT ORDER - Specific pattern first!
|
|
228
|
+
@when('B2B order placed for "{customer_name}" with {quantity:d} carbon neutral {product_name}')
|
|
229
|
+
def step_impl_carbon_neutral(context, customer_name, quantity, product_name):
|
|
230
|
+
# This matches first for "carbon neutral Widget"
|
|
231
|
+
# Sets context.item_id correctly
|
|
232
|
+
...
|
|
233
|
+
|
|
234
|
+
@when('B2B order placed for "{customer_name}" with {quantity:d} {product_name}')
|
|
235
|
+
def step_impl_general(context, customer_name, quantity, product_name):
|
|
236
|
+
# Only matches if "carbon neutral" not present
|
|
237
|
+
...
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
**Example 2: Multi-Item Orders (GIVEN pattern)**
|
|
241
|
+
|
|
242
|
+
```python
|
|
243
|
+
# ❌ WRONG ORDER - Single-item pattern matches "3 Widget and 2 Gadget"
|
|
244
|
+
@given('Order exists for "{customer_name}" with {quantity:d} {product_name}')
|
|
245
|
+
def step_impl_single(context, customer_name, quantity, product_name):
|
|
246
|
+
# This matches FIRST!
|
|
247
|
+
# product_name = "Widget and 2 Gadget" (treats "and 2 Gadget" as part of name)
|
|
248
|
+
# Creates only 1 item, context.item_ids never set properly
|
|
249
|
+
...
|
|
250
|
+
|
|
251
|
+
@given('Order exists for "{customer_name}" with {qty1:d} {product1} and {qty2:d} {product2}')
|
|
252
|
+
def step_impl_multi(context, customer_name, qty1, product1, qty2, product2):
|
|
253
|
+
# NEVER REACHED! Single-item pattern above matched first
|
|
254
|
+
...
|
|
255
|
+
|
|
256
|
+
# ✅ CORRECT ORDER - Multi-item pattern first!
|
|
257
|
+
@given('Order exists for "{customer_name}" with {qty1:d} {product1} and {qty2:d} {product2}')
|
|
258
|
+
def step_impl_multi(context, customer_name, qty1, product1, qty2, product2):
|
|
259
|
+
# This matches first for "3 Widget and 2 Gadget"
|
|
260
|
+
# Creates 2 items, sets context.item_ids = [id1, id2]
|
|
261
|
+
...
|
|
262
|
+
|
|
263
|
+
@given('Order exists for "{customer_name}" with {quantity:d} {product_name}')
|
|
264
|
+
def step_impl_single(context, customer_name, quantity, product_name):
|
|
265
|
+
# Only matches if "and" not present
|
|
266
|
+
...
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
**Example 3: Multi-Item Orders (WHEN pattern) - Real Bug Found!**
|
|
270
|
+
|
|
271
|
+
```python
|
|
272
|
+
# ❌ WRONG ORDER - Causes silent failure with balance=0 instead of expected value
|
|
273
|
+
@when('B2B order placed for "{customer_name}" with {quantity:d} {product_name}')
|
|
274
|
+
def step_impl_single(context, customer_name, quantity, product_name):
|
|
275
|
+
# This matches "3 Widget and 2 Gadget" FIRST!
|
|
276
|
+
# product_name becomes "Widget and 2 Gadget" (entire string)
|
|
277
|
+
# OrderB2B API tries to find product "Widget and 2 Gadget" → fails
|
|
278
|
+
# Returns 200 but no order created → customer balance stays 0
|
|
279
|
+
# Test fails: "expected 570, got 0.0"
|
|
280
|
+
...
|
|
281
|
+
|
|
282
|
+
@when('B2B order placed for "{customer_name}" with {qty1:d} {product1} and {qty2:d} {product2}')
|
|
283
|
+
def step_impl_multi(context, customer_name, qty1, product1, qty2, product2):
|
|
284
|
+
# NEVER REACHED! Single-item pattern matched first
|
|
285
|
+
...
|
|
286
|
+
|
|
287
|
+
# ✅ CORRECT ORDER - Multi-item pattern MUST come before single-item
|
|
288
|
+
@when('B2B order placed for "{customer_name}" with {qty1:d} {product1} and {qty2:d} {product2}')
|
|
289
|
+
def step_impl_multi(context, customer_name, qty1, product1, qty2, product2):
|
|
290
|
+
# Now matches "3 Widget and 2 Gadget" correctly
|
|
291
|
+
# Creates order with 2 items, balance = 570
|
|
292
|
+
...
|
|
293
|
+
|
|
294
|
+
@when('B2B order placed for "{customer_name}" with {quantity:d} {product_name}')
|
|
295
|
+
def step_impl_single(context, customer_name, quantity, product_name):
|
|
296
|
+
# Now only matches single product patterns
|
|
297
|
+
...
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
**CRITICAL FILE ORGANIZATION:**
|
|
301
|
+
Within each decorator type (@given, @when, @then), organize patterns like this:
|
|
302
|
+
|
|
303
|
+
```python
|
|
304
|
+
# For @when patterns:
|
|
305
|
+
@when('... with {qty:d} carbon neutral {product}') # Most specific (3+ keywords)
|
|
306
|
+
@when('... with {qty1:d} {p1} and {qty2:d} {p2}') # More specific (multi-param + "and")
|
|
307
|
+
@when('... with {quantity:d} {product_name}') # General (fewest keywords)
|
|
308
|
+
|
|
309
|
+
# For @given patterns:
|
|
310
|
+
@given('... with {qty1:d} {p1} and {qty2:d} {p2}') # More specific (multi-param + "and")
|
|
311
|
+
@given('... with {quantity:d} {product_name}') # General (fewer params)
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
**Why This Matters:**
|
|
315
|
+
- Wrong order → context.item_id not set → "Then Item amount" step fails with "item_id not set in context"
|
|
316
|
+
- Behave doesn't warn about unreachable patterns
|
|
317
|
+
- **ALWAYS order from most specific to most general**
|
|
318
|
+
|
|
319
|
+
**Specificity Rules:**
|
|
320
|
+
- More literal text = more specific ("and", "carbon neutral")
|
|
321
|
+
- More parameters = more specific
|
|
322
|
+
- Tighter type constraints = more specific
|
|
323
|
+
|
|
324
|
+
**Anti-Pattern Alert:**
|
|
325
|
+
Using `context.execute_steps()` to reuse step logic can cause context propagation issues. Instead, duplicate the implementation for specific patterns (DRY doesn't apply to Behave steps with context dependencies).
|
|
326
|
+
|
|
327
|
+
**Debugging Tip:**
|
|
328
|
+
If a step seems to execute but context variables aren't set, check if a MORE GENERAL pattern exists ABOVE it in the file.
|
|
329
|
+
|
|
330
|
+
### Rule #1: Read database/models.py First
|
|
331
|
+
```python
|
|
332
|
+
# Check: ID types (Integer vs String), column names, aggregates
|
|
333
|
+
class Customer(Base):
|
|
334
|
+
id = Column(Integer, primary_key=True) # Integer not String!
|
|
335
|
+
balance = Column(Numeric) # Check logic - is this aggregate?
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
### Rule #2: Use Direct FK Format
|
|
339
|
+
```python
|
|
340
|
+
# ✅ CORRECT
|
|
341
|
+
post_data = {
|
|
342
|
+
"data": {
|
|
343
|
+
"attributes": {"customer_id": int(customer_id)} # Direct FK
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
# ❌ WRONG - causes optimistic locking errors
|
|
348
|
+
post_data = {
|
|
349
|
+
"data": {
|
|
350
|
+
"relationships": {"customer": {"data": {"id": customer_id}}}
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
### Rule #3: Mandatory Patterns
|
|
356
|
+
```python
|
|
357
|
+
# Filter format
|
|
358
|
+
params = {"filter[name]": "Alice"} # NOT: {"filter": "name eq 'Alice'"}
|
|
359
|
+
|
|
360
|
+
# Unique test data
|
|
361
|
+
name = f"Test {int(time.time() * 1000)}" # NOT: "Test Customer"
|
|
362
|
+
|
|
363
|
+
# Convert IDs
|
|
364
|
+
customer_id = int(result['data']['id']) # NOT: result['data']['id']
|
|
365
|
+
|
|
366
|
+
# Imports (only these!)
|
|
367
|
+
from behave import *
|
|
368
|
+
import requests, test_utils, time
|
|
369
|
+
from decimal import Decimal
|
|
370
|
+
# NO imports from logic/, database/, integration/
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
### Rule #4: Complete CRUD + WHERE Coverage
|
|
374
|
+
```gherkin
|
|
375
|
+
Scenario: Good Order (CREATE - POST)
|
|
376
|
+
Scenario: Item Qty Change (UPDATE - PATCH)
|
|
377
|
+
Scenario: Change Customer (UPDATE - FK change, both parents adjust)
|
|
378
|
+
Scenario: Delete Item (DELETE)
|
|
379
|
+
Scenario: Ship Order (WHERE exclude)
|
|
380
|
+
Scenario: Unship Order (WHERE include - test bidirectional!)
|
|
381
|
+
Scenario: Exceed Credit (Constraint FAIL - negative test)
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
**CRITICAL:** Check `logic/declare_logic.py` for custom Python logic affecting calculations (e.g., discounts, adjustments) before writing constraint test expectations!
|
|
385
|
+
|
|
386
|
+
### Rule #5: Security Configuration
|
|
387
|
+
```python
|
|
388
|
+
# Read config/default.env FIRST
|
|
389
|
+
SECURITY_ENABLED = False # or True
|
|
390
|
+
|
|
391
|
+
# Match in test code
|
|
392
|
+
if SECURITY_ENABLED == False:
|
|
393
|
+
headers = {} # Empty
|
|
394
|
+
else:
|
|
395
|
+
headers = test_utils.login()
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
### Rule #6: Logic Logging
|
|
399
|
+
```python
|
|
400
|
+
@when('Good Order Placed')
|
|
401
|
+
def step_impl(context):
|
|
402
|
+
scenario_name = 'Good Order Placed'
|
|
403
|
+
test_utils.prt(f'\n{scenario_name}\n', scenario_name) # 2nd arg critical!
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
### Rule #7: Custom API Response Handling ⚠️ NEW
|
|
407
|
+
```python
|
|
408
|
+
# Phase 2 APIs may return different formats - handle both!
|
|
409
|
+
r = requests.post(url=api_uri, json=args, headers=get_headers())
|
|
410
|
+
context.order_created = (r.status_code == 200)
|
|
411
|
+
|
|
412
|
+
if context.order_created:
|
|
413
|
+
response_data = r.json()
|
|
414
|
+
# Custom APIs may return direct dict, not JSON:API format
|
|
415
|
+
context.order_id = response_data.get('order_id') # Direct field
|
|
416
|
+
else:
|
|
417
|
+
context.order_id = None # Always set to prevent KeyError
|
|
418
|
+
|
|
419
|
+
# When reading back via CRUD API:
|
|
420
|
+
r = requests.get(url=order_uri, headers=get_headers())
|
|
421
|
+
if 'data' in r.json():
|
|
422
|
+
order_data = r.json()['data']['attributes'] # JSON:API format
|
|
423
|
+
else:
|
|
424
|
+
order_data = r.json() # Direct format
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
### Rule #8: Customer Name Mapping for Multi-Customer Tests ⚠️ NEW
|
|
428
|
+
```python
|
|
429
|
+
# When tests involve MULTIPLE customers, track the mapping!
|
|
430
|
+
@given('Customer "{customer_name}" with balance {balance:d}')
|
|
431
|
+
def step_impl(context, customer_name, balance, limit):
|
|
432
|
+
unique_name = f"{customer_name} {int(time.time() * 1000)}"
|
|
433
|
+
# ... create customer ...
|
|
434
|
+
|
|
435
|
+
# Track mapping for later lookups
|
|
436
|
+
if not hasattr(context, 'customer_map'):
|
|
437
|
+
context.customer_map = {}
|
|
438
|
+
context.customer_map[customer_name] = {'id': customer_id, 'unique_name': unique_name}
|
|
439
|
+
|
|
440
|
+
# Then later, when checking specific customer:
|
|
441
|
+
@then('Customer "{customer_name}" balance should be {expected:d}')
|
|
442
|
+
def step_impl(context, customer_name, expected):
|
|
443
|
+
# ✅ CORRECT - Use ID from mapping
|
|
444
|
+
customer_info = context.customer_map[customer_name]
|
|
445
|
+
r = requests.get(f'/api/Customer/{customer_info["id"]}/')
|
|
446
|
+
|
|
447
|
+
# ❌ WRONG - Query by original name (won't find "Bob 1729...")
|
|
448
|
+
r = requests.get(f'/api/Customer/?filter[name]={customer_name}')
|
|
449
|
+
```
|
|
450
|
+
|
|
451
|
+
### Rule #9: Understand DERIVED Aggregates ⚠️ NEW
|
|
452
|
+
```python
|
|
453
|
+
# Customer.balance is DERIVED from orders, not ADDED to!
|
|
454
|
+
Rule.sum(derive=Customer.balance, as_sum_of=Order.amount_total,
|
|
455
|
+
where=lambda row: row.date_shipped is None)
|
|
456
|
+
|
|
457
|
+
# ❌ WRONG expectations:
|
|
458
|
+
# Given Customer "Charlie" with existing balance 220
|
|
459
|
+
# And Order for 180
|
|
460
|
+
# Then balance should be 310 # WRONG! Thinks 220 + 90 (after delete)
|
|
461
|
+
|
|
462
|
+
# ✅ CORRECT expectations:
|
|
463
|
+
# Given Customer "Charlie" with balance 0
|
|
464
|
+
# And Order for 180
|
|
465
|
+
# Then balance should be 90 # After deleting one item
|
|
466
|
+
# The "existing balance 220" is REPLACED by sum of orders (180)!
|
|
467
|
+
```
|
|
468
|
+
|
|
469
|
+
### Rule #10: Verify Actual Database Values FIRST ⚠️ NEW
|
|
470
|
+
```python
|
|
471
|
+
# ALWAYS check actual product prices/flags before writing test expectations!
|
|
472
|
+
|
|
473
|
+
# Check prices:
|
|
474
|
+
# sqlite3 db.sqlite "SELECT name, unit_price, carbon_neutral FROM Product;"
|
|
475
|
+
|
|
476
|
+
# Widget=90, Gadget=150, Green=109
|
|
477
|
+
|
|
478
|
+
# ❌ WRONG - Assumed Widget=$100
|
|
479
|
+
# Expected: 10 * 100 = 1000
|
|
480
|
+
|
|
481
|
+
# ✅ CORRECT - Verified Widget=$90
|
|
482
|
+
# Expected: 10 * 90 = 900
|
|
483
|
+
|
|
484
|
+
# For carbon neutral discount (10% off when qty >= 10):
|
|
485
|
+
# Expected: 10 * 90 * 0.9 = 810
|
|
486
|
+
```
|
|
487
|
+
|
|
488
|
+
### Rule #11: Step Definitions Must Match Feature Files ⚠️ NEW
|
|
489
|
+
```python
|
|
490
|
+
# Feature file:
|
|
491
|
+
Given Customer "Alice" with balance 0 and credit limit 1000
|
|
492
|
+
|
|
493
|
+
# Step implementation - ALL parameters must be captured:
|
|
494
|
+
@given('Customer "{customer_name}" with balance {balance:d} and credit limit {limit:d}')
|
|
495
|
+
def step_impl(context, customer_name, balance, limit): # ✅ CORRECT
|
|
496
|
+
pass
|
|
497
|
+
|
|
498
|
+
# ❌ WRONG - hard-coded values instead of parameters:
|
|
499
|
+
@given('Customer "{customer_name}" exists with balance 0 and credit limit 1000')
|
|
500
|
+
def step_impl(context, customer_name): # Missing balance and limit parameters!
|
|
501
|
+
balance = 0 # Hard-coded - won't work for different scenarios
|
|
502
|
+
limit = 1000
|
|
503
|
+
```
|
|
504
|
+
|
|
505
|
+
### Rule #12: Always Initialize Context Variables ⚠️ NEW
|
|
506
|
+
```python
|
|
507
|
+
# ✅ CORRECT - prevents KeyError in subsequent steps
|
|
508
|
+
@when('B2B order placed')
|
|
509
|
+
def step_impl(context):
|
|
510
|
+
r = requests.post(url=api_uri, json=args)
|
|
511
|
+
context.order_created = (r.status_code == 200)
|
|
512
|
+
|
|
513
|
+
if context.order_created:
|
|
514
|
+
context.order_id = r.json().get('order_id')
|
|
515
|
+
else:
|
|
516
|
+
context.order_id = None # CRITICAL - prevents "not hasattr" errors
|
|
517
|
+
|
|
518
|
+
# Then steps can safely check:
|
|
519
|
+
@then('Each item calculated correctly')
|
|
520
|
+
def step_impl(context):
|
|
521
|
+
if not hasattr(context, 'order_id') or context.order_id is None:
|
|
522
|
+
assert not context.order_created, "Order should have failed"
|
|
523
|
+
return # Skip gracefully
|
|
524
|
+
```
|
|
525
|
+
|
|
526
|
+
## Complete Phase 2 Example
|
|
527
|
+
|
|
528
|
+
### .feature File
|
|
529
|
+
```gherkin
|
|
530
|
+
Feature: Order Processing via B2B API
|
|
531
|
+
|
|
532
|
+
# Phase 2: CREATE
|
|
533
|
+
Scenario: Good Order Placed
|
|
534
|
+
When B2B order placed for "Alice" with items:
|
|
535
|
+
| Name | Quantity |
|
|
536
|
+
| Widget | 5 |
|
|
537
|
+
Then Customer balance is 50
|
|
538
|
+
Then Order created successfully
|
|
539
|
+
|
|
540
|
+
# Phase 1: UPDATE (granular)
|
|
541
|
+
Scenario: Alter Item Quantity
|
|
542
|
+
Given Order exists with 1 item (qty 5)
|
|
543
|
+
When Item quantity changed to 10
|
|
544
|
+
Then Item amount is 100
|
|
545
|
+
Then Order amount_total is 100
|
|
546
|
+
```
|
|
547
|
+
|
|
548
|
+
### Step Implementation
|
|
549
|
+
```python
|
|
550
|
+
from behave import *
|
|
551
|
+
import requests, test_utils, time
|
|
552
|
+
from decimal import Decimal
|
|
553
|
+
|
|
554
|
+
BASE_URL = 'http://localhost:5656'
|
|
555
|
+
|
|
556
|
+
@when('B2B order placed for "{customer_name}" with items')
|
|
557
|
+
def step_impl(context):
|
|
558
|
+
"""Phase 2: Uses OrderB2B custom API"""
|
|
559
|
+
scenario_name = 'B2B Order Placement'
|
|
560
|
+
test_utils.prt(f'\n{scenario_name}\n', scenario_name)
|
|
561
|
+
|
|
562
|
+
items = [{"Name": row['Name'], "QuantityOrdered": int(row['Quantity'])}
|
|
563
|
+
for row in context.table]
|
|
564
|
+
|
|
565
|
+
add_order_uri = f'{BASE_URL}/api/OrderB2BEndPoint/OrderB2B'
|
|
566
|
+
add_order_args = {
|
|
567
|
+
"meta": {"method": "OrderB2B", "args": {"data": {
|
|
568
|
+
"Account": customer_name,
|
|
569
|
+
"Notes": "Test order",
|
|
570
|
+
"Items": items
|
|
571
|
+
}}}
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
r = requests.post(url=add_order_uri, json=add_order_args,
|
|
575
|
+
headers=test_utils.login())
|
|
576
|
+
context.order_created = (r.status_code == 200)
|
|
577
|
+
if context.order_created:
|
|
578
|
+
response_data = r.json()
|
|
579
|
+
context.order_id = response_data.get('order_id') # Custom API direct response
|
|
580
|
+
else:
|
|
581
|
+
context.order_id = None # Always initialize to prevent KeyError
|
|
582
|
+
|
|
583
|
+
@when('Item quantity changed to {qty:d}')
|
|
584
|
+
def step_impl(context, qty):
|
|
585
|
+
"""Phase 1: Uses CRUD for granular testing"""
|
|
586
|
+
scenario_name = 'Item Quantity Update'
|
|
587
|
+
test_utils.prt(f'\n{scenario_name}\n', scenario_name)
|
|
588
|
+
|
|
589
|
+
patch_uri = f'{BASE_URL}/api/Item/{context.item_id}/'
|
|
590
|
+
patch_data = {
|
|
591
|
+
"data": {
|
|
592
|
+
"attributes": {"quantity": qty},
|
|
593
|
+
"type": "Item",
|
|
594
|
+
"id": context.item_id
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
r = requests.patch(url=patch_uri, json=patch_data,
|
|
598
|
+
headers=test_utils.login())
|
|
599
|
+
|
|
600
|
+
@then('Customer balance is {expected:d}')
|
|
601
|
+
def step_impl(context, expected):
|
|
602
|
+
customer_uri = f'{BASE_URL}/api/Customer/{context.customer_id}/'
|
|
603
|
+
r = requests.get(url=customer_uri, headers=test_utils.login())
|
|
604
|
+
actual = float(r.json()['data']['attributes']['balance'])
|
|
605
|
+
assert abs(actual - expected) < 0.01
|
|
606
|
+
```
|
|
607
|
+
|
|
608
|
+
## Quick Error Reference
|
|
609
|
+
|
|
610
|
+
| Error | Fix |
|
|
611
|
+
|-------|-----|
|
|
612
|
+
| "405 Method Not Allowed" | `SECURITY_ENABLED=False`, remove auth |
|
|
613
|
+
| "invalid literal for int('ALFKI')" | Check models.py - use Integer IDs |
|
|
614
|
+
| "balance: field not writable" | Aggregate - create child Orders, don't set |
|
|
615
|
+
| "Invalid filter format" | Use `filter[name]=value` |
|
|
616
|
+
| "row altered by another user" | Use direct FK: `"customer_id": int(id)` |
|
|
617
|
+
| "circular import" | Remove imports from logic/, database/ |
|
|
618
|
+
| "empty logic log" | Add `test_utils.prt(msg, scenario_name)` |
|
|
619
|
+
| **"balance: expected 570, got 0.0"** | **Step ordering issue (Rule #0.5)! Multi-item pattern after single-item** |
|
|
620
|
+
| **"context has no attribute 'item_id'"** | **Step ordering issue! Specific pattern defined after general pattern** |
|
|
621
|
+
| "Order created but no items" | Check if wrong step matched (print debug in step) |
|
|
622
|
+
|
|
623
|
+
### Debugging Step Ordering Issues
|
|
624
|
+
|
|
625
|
+
**Symptom**: Test passes WHEN step but THEN assertions fail with unexpected values (often 0 or None).
|
|
626
|
+
|
|
627
|
+
**Diagnosis**:
|
|
628
|
+
1. **Check which step executed**: Look at test output for line numbers
|
|
629
|
+
```
|
|
630
|
+
When B2B order placed for "Kevin" with 3 Widget and 2 Gadget # line=261
|
|
631
|
+
```
|
|
632
|
+
If line 261 is single-item but you expected line 320 (multi-item), wrong pattern matched!
|
|
633
|
+
|
|
634
|
+
2. **Verify database**: Check if records were actually created
|
|
635
|
+
```bash
|
|
636
|
+
sqlite3 db.sqlite "SELECT * FROM 'order' WHERE customer_id = X;"
|
|
637
|
+
sqlite3 db.sqlite "SELECT * FROM item WHERE order_id = Y;"
|
|
638
|
+
```
|
|
639
|
+
|
|
640
|
+
3. **Check step file organization**: Count literal keywords in each pattern
|
|
641
|
+
```python
|
|
642
|
+
# line 202: "carbon neutral" = 2 keywords (most specific)
|
|
643
|
+
# line 261: {quantity:d} {product_name} = 0 keywords (general)
|
|
644
|
+
# line 320: {qty1} {p1} "and" {qty2} {p2} = 1 keyword (more specific)
|
|
645
|
+
```
|
|
646
|
+
Line 320 MUST come BEFORE line 261!
|
|
647
|
+
|
|
648
|
+
**Quick Fix**:
|
|
649
|
+
```bash
|
|
650
|
+
# Find all @when patterns in your steps file
|
|
651
|
+
grep -n "@when('.*with.*{" features/steps/*.py
|
|
652
|
+
|
|
653
|
+
# Reorder so patterns with MORE keywords/parameters come FIRST
|
|
654
|
+
# Rule: Most specific → Most general (top to bottom)
|
|
655
|
+
```
|
|
656
|
+
|
|
657
|
+
## Test Generation Workflow
|
|
658
|
+
|
|
659
|
+
```
|
|
660
|
+
1. Read database/models.py → Understand schema (IDs, aggregates)
|
|
661
|
+
2. Read logic/declare_logic.py → Identify rules to test
|
|
662
|
+
3. Scan api/api_discovery/*.py → Discover custom APIs
|
|
663
|
+
4. Decide Phase 1 vs Phase 2 → Based on custom API existence
|
|
664
|
+
5. Generate .feature files → Business language scenarios
|
|
665
|
+
6. Implement steps/*.py → Using discovered APIs or CRUD
|
|
666
|
+
7. Run tests → python behave_run.py
|
|
667
|
+
8. Generate report → python behave_logic_report.py run
|
|
668
|
+
```
|
|
669
|
+
|
|
670
|
+
## Key Testing Patterns
|
|
671
|
+
|
|
672
|
+
**Test ALL scenarios for each rule:**
|
|
673
|
+
- ✅ CREATE (POST) - new entity triggers rules
|
|
674
|
+
- ✅ UPDATE (PATCH) - modify triggers recalc
|
|
675
|
+
- ✅ UPDATE FK - change parent (both old/new adjust)
|
|
676
|
+
- ✅ DELETE - remove entity (aggregates down)
|
|
677
|
+
- ✅ WHERE include - condition becomes true
|
|
678
|
+
- ✅ WHERE exclude - condition becomes false
|
|
679
|
+
- ✅ Constraint pass - valid data accepted
|
|
680
|
+
- ✅ Constraint fail - invalid data rejected
|
|
681
|
+
|
|
682
|
+
**Common missed scenarios:**
|
|
683
|
+
- ❌ Only testing CREATE/UPDATE, not DELETE
|
|
684
|
+
- ❌ Only testing WHERE one direction (ship, not unship)
|
|
685
|
+
- ❌ Only testing constraint pass, not fail
|
|
686
|
+
- ❌ Only testing FK create, not FK change
|
|
687
|
+
|
|
688
|
+
## Benefits of Phase 2
|
|
689
|
+
|
|
690
|
+
| Phase 2 (Custom API) | Phase 1 (CRUD) |
|
|
691
|
+
|---------------------|----------------|
|
|
692
|
+
| One API call | Multiple CRUD calls |
|
|
693
|
+
| Business language | Technical IDs |
|
|
694
|
+
| Tests API + Rules | Tests Rules only |
|
|
695
|
+
| Realistic scenarios | Implementation details |
|
|
696
|
+
| "Place Order" | "POST Order, POST Items" |
|
|
697
|
+
|
|
698
|
+
**The Magic:** Users built OrderB2B for partners → Same API provides natural test scenarios!
|
|
699
|
+
|
|
700
|
+
## Automated Step Ordering Verification
|
|
701
|
+
|
|
702
|
+
**Command to verify step ordering in your test files:**
|
|
703
|
+
|
|
704
|
+
```bash
|
|
705
|
+
# List all @when patterns with line numbers (should be ordered specific→general)
|
|
706
|
+
cd test/api_logic_server_behave
|
|
707
|
+
grep -n "@when('.*with.*{" features/steps/*.py
|
|
708
|
+
|
|
709
|
+
# Expected output (line numbers ascending = correct order):
|
|
710
|
+
# 202: @when('... with {qty:d} carbon neutral {product}') # Most specific
|
|
711
|
+
# 265: @when('... with {qty1:d} {p1} and {qty2:d} {p2}') # More specific
|
|
712
|
+
# 318: @when('... with {quantity:d} {product_name}') # General
|
|
713
|
+
|
|
714
|
+
# If multi-item (line 265) comes AFTER single-item (line 318) = WRONG!
|
|
715
|
+
```
|
|
716
|
+
|
|
717
|
+
**Python script to auto-check ordering** (add to test directory):
|
|
718
|
+
|
|
719
|
+
```python
|
|
720
|
+
#!/usr/bin/env python3
|
|
721
|
+
"""Verify Behave step ordering for multi-param patterns."""
|
|
722
|
+
import re, sys
|
|
723
|
+
from pathlib import Path
|
|
724
|
+
|
|
725
|
+
def check_step_order(steps_file):
|
|
726
|
+
"""Check if multi-item patterns come before single-item patterns."""
|
|
727
|
+
with open(steps_file) as f:
|
|
728
|
+
lines = f.readlines()
|
|
729
|
+
|
|
730
|
+
issues = []
|
|
731
|
+
when_patterns = []
|
|
732
|
+
|
|
733
|
+
for i, line in enumerate(lines, 1):
|
|
734
|
+
if match := re.match(r"@when\('.*with.*\{", line):
|
|
735
|
+
# Count parameters and keywords
|
|
736
|
+
param_count = line.count('{')
|
|
737
|
+
has_and = ' and ' in line
|
|
738
|
+
has_special_keyword = any(k in line for k in ['carbon neutral', 'shipped'])
|
|
739
|
+
|
|
740
|
+
specificity = param_count + (2 if has_and else 0) + (3 if has_special_keyword else 0)
|
|
741
|
+
when_patterns.append((i, specificity, line.strip()))
|
|
742
|
+
|
|
743
|
+
# Check if patterns are in descending specificity order
|
|
744
|
+
for i in range(len(when_patterns) - 1):
|
|
745
|
+
curr_line, curr_spec, curr_text = when_patterns[i]
|
|
746
|
+
next_line, next_spec, next_text = when_patterns[i + 1]
|
|
747
|
+
|
|
748
|
+
if next_spec > curr_spec:
|
|
749
|
+
issues.append(f"❌ Line {next_line} (specificity={next_spec}) should come BEFORE line {curr_line} (specificity={curr_spec})")
|
|
750
|
+
issues.append(f" More specific: {next_text}")
|
|
751
|
+
issues.append(f" Less specific: {curr_text}")
|
|
752
|
+
|
|
753
|
+
return issues
|
|
754
|
+
|
|
755
|
+
if __name__ == '__main__':
|
|
756
|
+
steps_dir = Path('features/steps')
|
|
757
|
+
all_issues = []
|
|
758
|
+
|
|
759
|
+
for steps_file in steps_dir.glob('*_steps.py'):
|
|
760
|
+
issues = check_step_order(steps_file)
|
|
761
|
+
if issues:
|
|
762
|
+
all_issues.extend([f"\n{steps_file}:"] + issues)
|
|
763
|
+
|
|
764
|
+
if all_issues:
|
|
765
|
+
print("Step Ordering Issues Found:")
|
|
766
|
+
print('\n'.join(all_issues))
|
|
767
|
+
sys.exit(1)
|
|
768
|
+
else:
|
|
769
|
+
print("✅ All step patterns correctly ordered (specific → general)")
|
|
770
|
+
sys.exit(0)
|
|
771
|
+
```
|
|
772
|
+
|
|
773
|
+
**Usage:**
|
|
774
|
+
```bash
|
|
775
|
+
cd test/api_logic_server_behave
|
|
776
|
+
python check_step_order.py # Run before committing tests
|
|
777
|
+
```
|
|
778
|
+
|
|
779
|
+
This automation prevents Rule #0.5 violations across ALL databases and projects!
|