From 1990622bce3d1506fa882b2557630af0d57b976d Mon Sep 17 00:00:00 2001 From: morpheus-30 Date: Fri, 23 Jun 2023 12:54:57 +0530 Subject: [PATCH] Added appropriate tests for the new codegen. --- lib/codegen/python/pkg_http_client.dart | 2 +- .../python_http_client_codegen_test.dart | 135 ++++++++++++++++++ 2 files changed, 136 insertions(+), 1 deletion(-) create mode 100644 test/codegen/python_http_client_codegen_test.dart diff --git a/lib/codegen/python/pkg_http_client.dart b/lib/codegen/python/pkg_http_client.dart index f1aa1abd..22e93299 100644 --- a/lib/codegen/python/pkg_http_client.dart +++ b/lib/codegen/python/pkg_http_client.dart @@ -49,7 +49,7 @@ print(data.decode("utf-8")) result += "?"; for (final queryParam in requestModel.requestParams!) { result += - "${queryParam.k.replaceAll(" ", "%20")}=${queryParam.v.replaceAll(" ", "%20")}&"; + "${queryParam.k.toString().replaceAll(" ", "%20")}=${queryParam.v.toString().replaceAll(" ", "%20")}&"; } return result.substring(0, result.length - 1); } diff --git a/test/codegen/python_http_client_codegen_test.dart b/test/codegen/python_http_client_codegen_test.dart new file mode 100644 index 00000000..a665f6d3 --- /dev/null +++ b/test/codegen/python_http_client_codegen_test.dart @@ -0,0 +1,135 @@ +import 'package:apidash/codegen/python/pkg_http_client.dart'; +import 'package:apidash/models/models.dart' show KVRow, RequestModel; +import 'package:test/test.dart'; +import 'package:apidash/consts.dart'; + +void main() { + group('PythonHttpClient', () { + final PythonHttpClient pythonHttpClient = PythonHttpClient(); + + test('getCode returns valid code for GET request', () { + const requestModel = RequestModel( + url: 'https://jsonplaceholder.typicode.com/todos/1', + method: HTTPVerb.get, + id: '', + ); + const expectedCode = """import http.client +import json + +conn = http.client.HTTPSConnection('jsonplaceholder.typicode.com') +payload = json.dumps() +headers = { +'Content-Type':'application/json' +}, +conn.request("GET", "/todos/1", payload, headers)} +res = conn.getresponse() +data = res.read() +print(data.decode("utf-8")) +"""; + expect(pythonHttpClient.getCode(requestModel), expectedCode); + }); + + test('getCode returns valid code for POST request', () { + const requestModel = RequestModel( + url: 'https://jsonplaceholder.typicode.com/todos', + method: HTTPVerb.post, + requestBody: '{"title": "foo","body": "bar","userId": 1}', + requestBodyContentType: ContentType.json, + id: '1', + ); + const expectedCode = """import http.client +import json + +conn = http.client.HTTPSConnection('jsonplaceholder.typicode.com') +payload = json.dumps({"title": "foo","body": "bar","userId": 1}) +headers = { +'Content-Type':'application/json' +}, +conn.request("POST", "/todos", payload, headers)} +res = conn.getresponse() +data = res.read() +print(data.decode("utf-8")) +"""; + expect(pythonHttpClient.getCode(requestModel), expectedCode); + }); + + test('getCode returns valid code for DELETE request', () { + const requestModel = RequestModel( + url: 'https://jsonplaceholder.typicode.com/todos/1', + method: HTTPVerb.delete, + requestBody: '{"title": "foo","body": "bar","userId": 1}', + requestBodyContentType: ContentType.json, + id: '1', + ); + const expectedCode = """import http.client +import json + +conn = http.client.HTTPSConnection('jsonplaceholder.typicode.com') +payload = json.dumps({"title": "foo","body": "bar","userId": 1}) +headers = { +'Content-Type':'application/json' +}, +conn.request("DELETE", "/todos/1", payload, headers)} +res = conn.getresponse() +data = res.read() +print(data.decode("utf-8")) +"""; + expect(pythonHttpClient.getCode(requestModel), expectedCode); + }); + + test('getCode returns valid code for HEAD request', () { + const requestModel = RequestModel( + url: 'https://jsonplaceholder.typicode.com/todos/1', + method: HTTPVerb.head, + id: '1', + ); + const expectedCode = """import http.client +import json + +conn = http.client.HTTPSConnection('jsonplaceholder.typicode.com') +payload = json.dumps() +headers = { +'Content-Type':'application/json' +}, +conn.request("HEAD", "/todos/1", payload, headers)} +res = conn.getresponse() +data = res.read() +print(data.decode("utf-8")) +"""; + expect(pythonHttpClient.getCode(requestModel), expectedCode); + }); + + test( + 'getCode returns valid code for requests with headers and query parameters', + () { + const requestModel = RequestModel( + url: 'https://jsonplaceholder.typicode.com/posts', + method: HTTPVerb.get, + requestParams: [ + KVRow('userId', 1), + ], + requestHeaders: [ + KVRow('Custom-Header-1', 'Value-1'), + KVRow('Custom-Header-2', 'Value-2') + ], + id: '1', + ); + const expectedCode = """import http.client +import json + +conn = http.client.HTTPSConnection('jsonplaceholder.typicode.com') +payload = json.dumps() +headers = { +'Content-Type':'application/json' +'Custom-Header-1':'Value-1', +'Custom-Header-2':'Value-2', +}, +conn.request("GET", "/posts?userId=1", payload, headers)} +res = conn.getresponse() +data = res.read() +print(data.decode("utf-8")) +"""; + expect(pythonHttpClient.getCode(requestModel), expectedCode); + }); + }); +}