import request from "supertest" import app from "../src/app" import { Server, IncomingMessage, ServerResponse } from "http" import * as dotenv from "dotenv" dotenv.config({path: '../../.env'}) const port = parseInt(process.env.BAR_PORT || '3000') let serveur : Server describe("Test the otm city path", () => { test("It should response the 200 code for GET method", done => { request(app) .get("/otm/city") .query({'name':'La roche sur yon'}) .then(response => { expect(response.statusCode).toBe(200) done() }) }) test("It should response the GET method with content", done => { const out = { "type": "FeatureCollection", "features": [{ "type": "Feature", "id": "562635", "geometry": { "type": "Point", "coordinates": [ -1.4344594, 46.6686478 ] }, "properties": { "xid": "N4032296324", "name": "Le 27 point carré", "dist": 236.40360026, "rate": 1, "osm": "node/4032296324", "kinds": "foods,bars,tourist_facilities" } }] } request(app) .get("/otm/city") .query({'name':'La roche sur yon', "radius": 240}) .then(response => { console.log(response.text) expect(response.text).toEqual(JSON.stringify(out)) done() }) }) test("It should response the 400 code for GET method", done => { request(app) .get("/otm/city") .then(response => { console.log(response.text) expect(response.statusCode).toBe(400) done() }) }) test("It should response the 200 code for GET method", done => { request(app) .get("/otm/radius") .query({'lon':'-1.4344594', 'lat' : '46.6686478', 'radius': '10'}) .then(response => { expect(response.statusCode).toBe(200) done() }) }) test("It should response the 200 code for GET method (default radius)", done => { request(app) .get("/otm/radius") .query({'lon':'-1.4344594', 'lat' : '46.6686478'}) .then(response => { expect(response.statusCode).toBe(200) done() }) }) test("It should response the 400 code for GET method (missing lon and lat)", done => { request(app) .get("/otm/radius") .then(response => { expect(response.statusCode).toBe(400) done() }) }) test("Get bar in radius from API", done => { const out = { "type": "FeatureCollection", "features": [{ "type": "Feature", "id": "562635", "geometry": { "type": "Point", "coordinates": [ -1.4344594, 46.6686478 ] }, "properties": { "xid": "N4032296324", "name": "Le 27 point carré", "dist": 0.17652159, "rate": 1, "osm": "node/4032296324", "kinds": "foods,bars,tourist_facilities" } }] } request(app) .get("/otm/radius") .query({'lon':'-1.4344594', 'lat' : '46.6686478', 'radius': '10'}) .then(response => { expect(response.text).toEqual(JSON.stringify(out)) done() }) }) test("It should response the 200 code for GET method", done => { request(app) .get("/otm/poidetaill") .query({'id':'562635'}) .then(response => { expect(response.statusCode).toBe(200) done() }) }) test("Get bar in radius from API", done => { const out = { "xid": "N4032296324", "name": "Le 27 point carré", "address": { "road": "Rue Raymond Poincaré", "town": "La Roche-sur-Yon", "state": "Pays de la Loire", "county": "La Roche-sur-Yon", "suburb": "Zola", "country": "France", "postcode": "85000", "country_code": "fr", "house_number": "27", "neighbourhood": "Cité des Forges" }, "rate": "1", "osm": "node/4032296324", "kinds": "foods,bars,tourist_facilities", "sources": { "geometry": "osm", "attributes": [ "osm" ] }, "otm": "https://opentripmap.com/en/card/N4032296324", "point": { "lon": -1.4344594478607178, "lat": 46.66864776611328 } } request(app) .get("/otm/poidetaill") .query({'id':'562635'}) .then(response => { expect(response.text).toEqual(JSON.stringify(out)) done() }) }) test("It should response the 400 code for GET method (no id)", done => { request(app) .get("/otm/poidetaill") .then(response => { expect(response.statusCode).toBe(400) done() }) }) test("It should response the 200 code for GET method", done => { request(app) .get("/otm/box") .query({'lon1':'-1.435199','lon2':'-1.43519', 'lat1':'46.668460', 'lat2':'46.668461'}) .then(response => { expect(response.statusCode).toBe(200) done() }) }) test("Get bar in box from API", done => { const out = { "type": "FeatureCollection", "features": [ { "type": "Feature", "id": "562633", "geometry": { "type": "Point", "coordinates": [ -1.435197, 46.6684608 ] }, "properties": { "xid": "N4032296323", "name": "Le Cube", "rate": 1, "osm": "node/4032296323", "kinds": "foods,cafes,tourist_facilities" } } ] } request(app) .get("/otm/box") .query({'lon1':'-1.435199','lon2':'-1.43519', 'lat1':'46.668460', 'lat2':'46.668461'}) .then(response => { expect(response.text).toEqual(JSON.stringify(out)) done() }) }) test("Get bar in box from API lat reversed", done => { const out = { "type": "FeatureCollection", "features": [ { "type": "Feature", "id": "562633", "geometry": { "type": "Point", "coordinates": [ -1.435197, 46.6684608 ] }, "properties": { "xid": "N4032296323", "name": "Le Cube", "rate": 1, "osm": "node/4032296323", "kinds": "foods,cafes,tourist_facilities" } } ] } request(app) .get("/otm/box") .query({'lon1':'-1.435199','lon2':'-1.43519', 'lat2':'46.668460', 'lat1':'46.668461'}) .then(response => { expect(response.text).toEqual(JSON.stringify(out)) done() }) }) test("It should response the 400 code for GET method (no coordonaite)", done => { request(app) .get("/otm/box") .then(response => { expect(response.statusCode).toBe(400) done() }) }) })