Closed jemacineiras closed 3 months ago
As done in #2 , I am going to delegate the extraction of the IP to the frontend applications. I will focus on creating a REST endpoint so location information can be injected through a POST body, with a DTO.
I have decided to use the endpoint https://ip-api.com/, because it provides a configurable field called "proxy", which indicates if the IP corresponds to a "Proxy, VPN or Tor exit address". This way we get a solution for the last thing commented in the issue.
Caso de prueba no. | TC-08 |
Nombre | El servidor responde con un HTTP status code 400 cuando el cuerpo del método POST del endpoint habilitado para inyectar localizaciones de ip no está bien formado |
Precondiciones | 1. Un servidor de la aplicación está en marcha |
Pasos de prueba | 1. Se hace una llamada POST("/locations/inject") al servidor con cuerpo inválido, con un campo con valor null |
Resultado esperado | El servidor responde con una HTTP response 400, incluido un mensaje con el motivo concreto de la invalidez de la petición |
Resultados | 400 Bad Request { "ip": "no debe ser nulo" } |
Aprobado/reprobado | APROBADO |
Caso de prueba no. | TC-09 |
Nombre | El servidor responde con un HTTP status code 200 cuando se invoca correctamente el endpoint POST("/locations/inject") |
Precondiciones | 1. Un servidor de la aplicación está en marcha |
Pasos de prueba | 1. Se hace una llamada POST("/devices/inject") al servidor |
Resultado esperado | El servidor valida el cuerpo del método POST y responde con una HTTP response 200 |
Resultados | El servidor responde con un HTTP status code 200 |
Aprobado/reprobado | APROBADO |
Caso de prueba no. | TC-10 |
Nombre | El sistema responde con una excepción InstanceNotFoundException cuando el Dispositivo al que se intenta asociar una localización no existe en la base de datos |
Precondiciones | - |
Pasos de prueba | 1. Se lanza un comando de creación de Localización con un deviceId inexistente en base de datos 2. Se recupera el Device con la id inválida |
Resultado esperado | El sistema hace saltar una excepción InstanceNotFoundException |
Resultados | El sistema hace saltar una excepción InstanceNotFoundException |
Aprobado/reprobado | APROBADO |
Caso de prueba no. | TC-11 |
Nombre | El sistema genera satisfactoriamente una Localización en la base de datos |
Precondiciones | 1. Existe un Usuario creado en base de datos. 2. El usuario creado tiene asociado un Dispositivo en base de datos |
Pasos de prueba | 1. Se lanza un comando de creación de Localización con una ip válida y un deviceId existente en base de datos 2. Se utiliza un servicio externo para localizar la ip 3. Se instancia un objeto Localización con los datos obtenidos. 4. Se asocia la Localización con el Dispositivo correpondiente a la deviceId |
Resultado esperado | El sistema consigue localizar la ip y relacionarla correctamente con el dispositivo |
Resultados | El sistema consigue localizar la ip y relacionarla correctamente con el dispositivo |
Aprobado/reprobado | APROBADO |
As a Product Owner I want to collect the exact location for an user + device in order to recognize fraud attempts. The required information should be extracted from the request headers. External services should be needed to use in order to get physical location for IP, Sim Card etc..
Relevant data to keep store
Data should be extracted from the request and enrich with call to external services, For example:
This information should be use to query if an user is at the same time with several devices en different countries. Note - Investigate the detection of proxies and VPNs services.