merchant

Merchant backend to process payments, run by merchants
Log | Files | Refs | Submodules | README | LICENSE

commit 8e4fb784b0c0773e6951ce91a2bea0824d7bf677
parent 12223f6e8a3054104aaac161773f89348bcb48e0
Author: bohdan-potuzhnyi <bohdan.potuzhnyi@gmail.com>
Date:   Sun, 15 Feb 2026 17:09:06 +0100

fix + update to test suite for #0011082

Diffstat:
Msrc/backenddb/pg_do_handle_inventory_changes.sql | 20++++++++++++++++----
Msrc/testing/test_merchant_api.c | 92+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 108 insertions(+), 4 deletions(-)

diff --git a/src/backenddb/pg_do_handle_inventory_changes.sql b/src/backenddb/pg_do_handle_inventory_changes.sql @@ -65,7 +65,10 @@ BEGIN NEW.taxes::TEXT); resolved_body := replace_placeholder(resolved_body, 'price', - NEW.price::TEXT); + NEW.price_array[1]::TEXT); + resolved_body := replace_placeholder(resolved_body, + 'unit_price', + NEW.price_array::TEXT); resolved_body := replace_placeholder(resolved_body, 'total_stock', NEW.total_stock::TEXT); @@ -155,10 +158,16 @@ BEGIN NEW.taxes::TEXT); resolved_body := replace_placeholder(resolved_body, 'old_price', - OLD.price::TEXT); + OLD.price_array[1]::TEXT); + resolved_body := replace_placeholder(resolved_body, + 'old_unit_price', + OLD.price_array::TEXT); resolved_body := replace_placeholder(resolved_body, 'price', - NEW.price::TEXT); + NEW.price_array[1]::TEXT); + resolved_body := replace_placeholder(resolved_body, + 'unit_price', + NEW.price_array::TEXT); resolved_body := replace_placeholder(resolved_body, 'old_total_stock', OLD.total_stock::TEXT); @@ -251,7 +260,10 @@ BEGIN OLD.taxes::TEXT); resolved_body := replace_placeholder(resolved_body, 'price', - OLD.price::TEXT); + OLD.price_array[1]::TEXT); + resolved_body := replace_placeholder(resolved_body, + 'unit_price', + OLD.price_array::TEXT); resolved_body := replace_placeholder(resolved_body, 'total_stock', OLD.total_stock::TEXT); diff --git a/src/testing/test_merchant_api.c b/src/testing/test_merchant_api.c @@ -2411,6 +2411,96 @@ run (void *cls, MHD_HTTP_NO_CONTENT), TALER_TESTING_cmd_end () }; + struct TALER_TESTING_Command inventory_webhooks[] = { + TALER_TESTING_cmd_testserver ( + "launch-http-server-for-inventory-webhooks", + 12346), + TALER_TESTING_cmd_merchant_post_webhooks2 ( + "post-webhooks-inventory-added", + merchant_url, + "webhook-inventory-added", + "inventory_added", + "http://localhost:12346/", + "POST", + "Taler-test-header: inventory", + "inventory-added", + MHD_HTTP_NO_CONTENT), + TALER_TESTING_cmd_merchant_post_webhooks2 ( + "post-webhooks-inventory-updated", + merchant_url, + "webhook-inventory-updated", + "inventory_updated", + "http://localhost:12346/", + "POST", + "Taler-test-header: inventory", + "inventory-updated", + MHD_HTTP_NO_CONTENT), + TALER_TESTING_cmd_merchant_post_webhooks2 ( + "post-webhooks-inventory-deleted", + merchant_url, + "webhook-inventory-deleted", + "inventory_deleted", + "http://localhost:12346/", + "POST", + "Taler-test-header: inventory", + "inventory-deleted", + MHD_HTTP_NO_CONTENT), + TALER_TESTING_cmd_merchant_post_products ( + "post-product-inventory-hook", + merchant_url, + "product-inventory-hook", + "webhook inventory product", + "EUR:1", + MHD_HTTP_NO_CONTENT), + cmd_webhook ("pending-webhooks-inventory-added"), + TALER_TESTING_cmd_checkserver2 ( + "check-inventory-webhook-added", + "launch-http-server-for-inventory-webhooks", + 0, + "/", + "POST", + NULL, + "inventory-added"), + TALER_TESTING_cmd_merchant_patch_product ( + "patch-product-inventory-hook", + merchant_url, + "product-inventory-hook", + "webhook inventory product patched", + json_object (), + "unit", + "EUR:2", + "", + json_array (), + 5, + 0, + json_object (), + GNUNET_TIME_relative_to_timestamp (GNUNET_TIME_UNIT_MINUTES), + MHD_HTTP_NO_CONTENT), + cmd_webhook ("pending-webhooks-inventory-updated"), + TALER_TESTING_cmd_checkserver2 ( + "check-inventory-webhook-updated", + "launch-http-server-for-inventory-webhooks", + 1, + "/", + "POST", + NULL, + "inventory-updated"), + TALER_TESTING_cmd_merchant_delete_product ( + "delete-product-inventory-hook", + merchant_url, + "product-inventory-hook", + MHD_HTTP_NO_CONTENT), + cmd_webhook ("pending-webhooks-inventory-deleted"), + TALER_TESTING_cmd_checkserver2 ( + "check-inventory-webhook-deleted", + "launch-http-server-for-inventory-webhooks", + 2, + "/", + "POST", + NULL, + "inventory-deleted"), + TALER_TESTING_cmd_end () + }; struct TALER_TESTING_Command repurchase[] = { cmd_transfer_to_exchange ( "create-reserve-30x", @@ -3181,6 +3271,8 @@ run (void *cls, templates), TALER_TESTING_cmd_batch ("webhooks", webhooks), + TALER_TESTING_cmd_batch ("inventory-webhooks", + inventory_webhooks), TALER_TESTING_cmd_batch ("auth", auth), TALER_TESTING_cmd_batch ("repurchase",