merchant

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

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 */