Hola buenas comunidad ! quiero consultar si me pu...
# general
d
Hola buenas comunidad ! quiero consultar si me pueden ayudar con este problema que estoy teniendo ... Arme un servidor de prueba WireMock donde armo un stub que recibe una solicitud y devuelve una respuesta con una plantilla fija ubicada en un archivo "response.json" donde tiene que setear los campos que le asigno con los valores de los campos de la solicitud, la ayuda que necesito es ver como lo seteo porque como lo tengo actualmente no lo esta realizando. Muchas graciasss ! dejo mi archivo "response.json" el cual no me esta seteando los valores.
Copy code
{
  "token_id": "{{randomValue length=36 type='ALPHANUMERIC'}}",
  "issuer_decision": "{{request.query.risk}}",
  "card_last_digits": "{{jsonPath request.body '$.account_number' | regex '\\d{4}$'}}",
  "expiration_date": "{{jsonPath request.body '$.expiration_date'}}",
  "token_last_digits": "{{random '5470' '6531' '1467'}}",
  "token_expiration_date": "{{random '1128' '0725' '1727'}}",
  "token_state": "ACTIVE",
  "payment_account_ref": "string",
  "info_card_product": {
    "bank_name": "Please Contact Your Bank",
    "card_type": "UNKNOWN",
    "primary_scheme": "VISA",
    "card_category_description": "Your Bank",
    "card_arts": {
      "foreground_color": "7aff54",
      "card_background_image_id": null,
      "bank_logo_id": null,
      "brand_logo_id": null,
      "cobrand_logo_id": null,
      "complete_card_image_id": "15ac4371-dcb9-4310-867e-b12338970276",
      "card_icon_id": "14e3044fa-949e-4900-800f-88b8fc6cc3d5"
    },
    "terms_condition_url": "string",
    "privacy_policy_url": "string"
  },
  "creation_timestamp": "{{random 'yyyyMMdd' 20220101 20231231}}",
  "thales_token_available": true
}
t
@Antonio Pérez Dieppa one for you perhaps
👍 1
a
Hola @Diego Ríos. En primer lugar, te pongo la documentación relacionada al "Dyanmic templating", estoy seguro que te será útil. En segundo lugar, te aconsejo que si no estás usando la última versión, la actualices. Lo siento, no lo hemos reflejado en la documentación, pero solo en recientes versiones(
2.3.0
creo) el "dynamic templating" está habilitado por defecto. Así que, si no estás usando la última versión, intenta probar con habilitarlo explícitamente. Si todavía pesiste el problema, dime qué output obtienes. 1. En el response ves los handlebars sin ser reemplazados 2. Directamente son remplazados por vacío 3. Una excepción Gracias
d
sigo con el problema , quiero sacarme una duda , yo recibo un body que tiene campos con valores que tengo que setearle a mi respuesta como mande en la pregunta anterior , esta bien la forma en que la estoy haciendo ? Muchas gracias. Saludos.
a
Hola Diego. No entiendo del todo tu pregunta. Pero básicamente tu estableces el response body con el dynamic template, usando los handlebars (arece que el
response.json
es correcto en este aspecto). Entonces cuando haces una llamada a ese endpoint y se produce un match, es decir el stub que especificas se corresponde con la llamada que has hecho, el response debería ser el. json ese, remplezando los handlebars con los parámetros de la request. Obviamente, la request tiene que tener esos parámetros. En tu caso necesitas tener un queryParam llamando
risk
, un campo en el request body llamado
account_number
, etc.
Con esto mi pregunta es, qué output obtienes cuando haces la llamada?
d
exacto Antonio , ese es mi output el que pase al principio ... es como que no me realiza el seteo , por ejemplo "issuer_decision": "{{request.query.risk}}" aca mi output tendria que ser: "issuer_decision": "GREEN" pero no me esta seteando ... nose como realizar el seteo porque asi como esta no lo toma .
a
Perdón por la tardanza. Estábamos en una reunión. Aaaah, ok. Pensé que ése era lo que tú pusiste(qué supongo que también).|Vale en ese caso, es buena señal. Parece que simplemente, de alguna forma, el dynamiic templating no está habilitado. Qué versión estás usando?
d
No hay problema Antonio agradezco tu predisposición , tengo la version 2.27.2
a
have you tried to enable it explicitly?
Perdón,has probado a habilitarlo explícítamente con el
Copy code
options().globalTemplating(true)
?
d
No probe esa solucion , lo aplicaria dentro del stub ?
a
Copy code
WireMockServer wm =
    new WireMockServer(options().globalTemplating(true));
d
Lo pruebo, muchas gracias Antonio
👍 1
a
Ya me cuentas
d
Perdon la demora Antonio , no me lo toma me tira esto: Cannot resolve method 'globalTemplating' in 'Object' .
no se si tengo mal la version o que estaria pasando pero no me setea lo valores y no puedo agregar globalTemplating a mi clase ... si necesitas ver algo mas de mi clase avisame antonio a ver si lo podemos hacer funcionar .. y desde ya muchas gracias por tu tiempo.
a
Buenos días. A ver, en primer lugar. Asegurar que tienes la última versión
confírmame esto cuando puedas
Si puedes mandarme todas la información que puedes. • Wiremock version que usas • Cómo estás construyendo el wiremockServer • EL fichero • Y en resumen todo lo que necesite para reproducirlo
d
Buenos dias antonio como estas , aqui te paso como esta armado el stub
Copy code
public static void main(String[] args) {

        WireMockServer wireMockServer = new WireMockServer();
        wireMockServer.start();
        WireMock.configureFor("localhost", 8080);


        WireMock.stubFor(<http://WireMock.post|WireMock.post>(WireMock.urlEqualTo("/api/decidir/v1tokensfile"))
                .willReturn(WireMock.aResponse()
                        .withBodyFile("response.json")
                        .withHeader("Content-Type", "application.json")
                        .withStatus(201)));

        try {
            Thread.sleep(Long.MAX_VALUE);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
despues aqui te digo la estructura donde esta el fichero : proyecto- --src --test --__files --response.json y el archivo esta armado asi dentro de ese file :
Copy code
{
  "token_id": "{{randomValue length=36 type='ALPHANUMERIC'}}",
  "issuer_decision": "{{request.query.risk}}",
  "card_last_digits": "{{jsonPath request.body '$.account_number' | regex '\\d{4}$'}}",
  "expiration_date": "{{jsonPath request.body '$.expiration_date'}}",
  "token_last_digits": "{{random '5470' '6531' '1467'}}",
  "token_expiration_date": "{{random '1128' '0725' '1727'}}",
  "token_state": "ACTIVE",
  "payment_account_ref": "string",
  "info_card_product": {
    "bank_name": "Please Contact Your Bank",
    "card_type": "UNKNOWN",
    "primary_scheme": "VISA",
    "card_category_description": "Your Bank",
    "card_arts": {
      "foreground_color": "7aff54",
      "card_background_image_id": null,
      "bank_logo_id": null,
      "brand_logo_id": null,
      "cobrand_logo_id": null,
      "complete_card_image_id": "15ac4371-dcb9-4310-867e-b12338970276",
      "card_icon_id": "14e3044fa-949e-4900-800f-88b8fc6cc3d5"
    },
    "terms_condition_url": "string",
    "privacy_policy_url": "string"
  },
  "creation_timestamp": "{{random 'yyyyMMdd' 20220101 20231231}}",
  "thales_token_available": true
}
la version de wireMock que tengo actualmente es esta :
Copy code
<dependency>
    <groupId>com.github.tomakehurst</groupId>
    <artifactId>wiremock</artifactId>
    <version>2.27.2</version>
    <scope>test</scope>
</dependency>
a
puedes actualizar la versión a la 3.0.1?
d
lo actualice pero sigo sinn la conversion de valores , no se que puede ser .
a
Ok.pues intentaré reproducirlo. Siendo viernes, no te garantizo una respuesta antes del lunes. Pero hago lo que pueda
d
Muchas gracias Antonio no hay problema , quedo a disposición por si necesitas algun dato mas . Saludos !
🙌 1
Buenos dias Antonio , por cualquier novedad que hayas tenido quedo a disposición. Saludos !
a
Buenos días Diego, lo siento hemos estado bastante a full con un cliente. intetaré echarle un ojo esta tarde cuando termine del trabajo o ya mañana.
Hello Diego, Creé un proyecto que fucionó sin problema siguiendo estos pasos: • Añadir la dependencia de wiremock 3.3.1
Copy code
implementation("org.wiremock:wiremock:3.3.1")
• Añadir el fichero
response.json
en
src/test/__files
• Crear la clase main con el siguiente código
Copy code
package org.example;

import com.github.tomakehurst.wiremock.WireMockServer;
import com.github.tomakehurst.wiremock.client.WireMock;

public class Main {
    public static void main(String[] args) {

        WireMockServer wireMockServer = new WireMockServer();
        wireMockServer.start();
        WireMock.configureFor("localhost", 8080);

        System.out.println("Server listening at 8080");

        WireMock.stubFor(WireMock.get(WireMock.urlEqualTo("/api/decidir/v1tokensfile"))
                .willReturn(WireMock.aResponse()
                        .withBodyFile("response.json")
                        .withTransformers("response-template")
                        .withStatus(201)));

        try {
            System.out.println("Sleeping for " + Long.MAX_VALUE);
            Thread.sleep(Long.MAX_VALUE);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
• Nota que añadí
.withTransformers("response-template")
Con eso me funcionó . Pruébalo y ya me dices algo. De todas formas te invito a que mires neustra documentación dedicada al templating https://wiremock.org/docs/response-templating/
Ten en cuenta también que mi objetivo era comprobar que el templating estaba habilitado y funcionaba. Así que el fichero le quite bastante para que solo cogiera del path y cambié el método
post
por
get
. Puede que alguno de los handlebars que usas estén incorrectos. No comprobé eso
hello @Diego Ríos, did it work?
d
Hola antonio como estas buenos dias , perdon la demora pero me mandaron con un problema que tuvimos y paso a 2do plano la maqueta , ahora lo retome nuevamente pero sin funcionar aun si quieres te mando aqui como lo tengo actualmente a ver si lo podemos solucionar .