testing_api_cmd_delete_unit.c (4402B)
1 /* 2 This file is part of TALER 3 Copyright (C) 2025 Taler Systems SA 4 5 TALER is free software; you can redistribute it and/or modify 6 it under the terms of the GNU General Public License as 7 published by the Free Software Foundation; either version 3, or 8 (at your option) any later version. 9 10 TALER is distributed in the hope that it will be useful, but 11 WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 GNU General Public License for more details. 14 15 You should have received a copy of the GNU General Public 16 License along with TALER; see the file COPYING. If not, see 17 <http://www.gnu.org/licenses/> 18 */ 19 /** 20 * @file src/testing/testing_api_cmd_delete_unit.c 21 * @brief command to test DELETE /private/units/$ID 22 * @author Bohdan Potuzhnyi 23 */ 24 #include "platform.h" 25 struct DeleteUnitState; 26 #define TALER_MERCHANT_DELETE_PRIVATE_UNIT_RESULT_CLOSURE struct DeleteUnitState 27 #include <taler/taler_testing_lib.h> 28 #include "taler/taler_merchant_service.h" 29 #include "taler/taler_merchant_testing_lib.h" 30 #include <taler/merchant/delete-private-units-UNIT.h> 31 32 33 /** 34 * State for a DELETE /private/units/$ID command. 35 */ 36 struct DeleteUnitState 37 { 38 /** 39 * In-flight request handle. 40 */ 41 struct TALER_MERCHANT_DeletePrivateUnitHandle *udh; 42 43 /** 44 * Interpreter context. 45 */ 46 struct TALER_TESTING_Interpreter *is; 47 48 /** 49 * Merchant backend base URL. 50 */ 51 const char *merchant_url; 52 53 /** 54 * Unit identifier to delete. 55 */ 56 const char *unit_id; 57 58 /** 59 * Expected HTTP status. 60 */ 61 unsigned int http_status; 62 }; 63 64 65 /** 66 * Completion callback. 67 */ 68 static void 69 delete_unit_cb (struct DeleteUnitState *dus, 70 const struct TALER_MERCHANT_DeletePrivateUnitResponse *dur) 71 { 72 73 dus->udh = NULL; 74 if (dus->http_status != dur->hr.http_status) 75 { 76 TALER_TESTING_unexpected_status_with_body (dus->is, 77 dur->hr.http_status, 78 dus->http_status, 79 dur->hr.reply); 80 return; 81 } 82 TALER_TESTING_interpreter_next (dus->is); 83 } 84 85 86 /** 87 * Issue DELETE request. 88 */ 89 static void 90 delete_unit_run (void *cls, 91 const struct TALER_TESTING_Command *cmd, 92 struct TALER_TESTING_Interpreter *is) 93 { 94 struct DeleteUnitState *dus = cls; 95 96 dus->is = is; 97 dus->udh = TALER_MERCHANT_delete_private_unit_create ( 98 TALER_TESTING_interpreter_get_context (is), 99 dus->merchant_url, 100 dus->unit_id); 101 { 102 enum TALER_ErrorCode ec; 103 104 ec = TALER_MERCHANT_delete_private_unit_start (dus->udh, 105 &delete_unit_cb, 106 dus); 107 GNUNET_assert (TALER_EC_NONE == ec); 108 } 109 } 110 111 112 /** 113 * Provide traits. 114 */ 115 static enum GNUNET_GenericReturnValue 116 delete_unit_traits (void *cls, 117 const void **ret, 118 const char *trait, 119 unsigned int index) 120 { 121 struct DeleteUnitState *dus = cls; 122 struct TALER_TESTING_Trait traits[] = { 123 TALER_TESTING_make_trait_unit_id (dus->unit_id), 124 TALER_TESTING_trait_end () 125 }; 126 127 return TALER_TESTING_get_trait (traits, 128 ret, 129 trait, 130 index); 131 } 132 133 134 /** 135 * Cleanup. 136 */ 137 static void 138 delete_unit_cleanup (void *cls, 139 const struct TALER_TESTING_Command *cmd) 140 { 141 struct DeleteUnitState *dus = cls; 142 143 if (NULL != dus->udh) 144 { 145 TALER_MERCHANT_delete_private_unit_cancel (dus->udh); 146 dus->udh = NULL; 147 } 148 GNUNET_free (dus); 149 } 150 151 152 struct TALER_TESTING_Command 153 TALER_TESTING_cmd_merchant_delete_unit (const char *label, 154 const char *merchant_url, 155 const char *unit_id, 156 unsigned int http_status) 157 { 158 struct DeleteUnitState *dus; 159 160 dus = GNUNET_new (struct DeleteUnitState); 161 dus->merchant_url = merchant_url; 162 dus->unit_id = unit_id; 163 dus->http_status = http_status; 164 165 { 166 struct TALER_TESTING_Command cmd = { 167 .cls = dus, 168 .label = label, 169 .run = &delete_unit_run, 170 .cleanup = &delete_unit_cleanup, 171 .traits = &delete_unit_traits 172 }; 173 174 return cmd; 175 } 176 } 177 178 179 /* end of testing_api_cmd_delete_unit.c */