From 661f0e63565a472dd02398965cf5dc9cf17d3a46 Mon Sep 17 00:00:00 2001
From: Deepraj Baidya <deeprajbaidya@gmail.com>
Date: Thu, 29 Aug 2024 17:33:14 +0530
Subject: [PATCH] =?UTF-8?q?=E2=9C=85=20(chore):=20all=20test=20passing=20f?=
 =?UTF-8?q?or=20`lib/codegen/swift/urlsession.dart`?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 test/codegen/swift_urlsession_test.dart | 658 ++++++++++++++++++++++--
 1 file changed, 621 insertions(+), 37 deletions(-)

diff --git a/test/codegen/swift_urlsession_test.dart b/test/codegen/swift_urlsession_test.dart
index 318f386c..d4408528 100644
--- a/test/codegen/swift_urlsession_test.dart
+++ b/test/codegen/swift_urlsession_test.dart
@@ -332,49 +332,583 @@ task.resume()
     });
   });
   group("HTTPVerb.post", () {
-      test('POST 2', () {
-        const expectedCode = r"""
+    test('POST 1', () {
+      const expectedCode = r"""
+import Foundation
+
+let parameters = "{\n\"text\": \"I LOVE Flutter\"\n}"
+let postData = parameters.data(using: .utf8)
+var request = URLRequest(url: URL(string: "https://api.apidash.dev/case/lower")!,timeoutInterval: Double.infinity)
+request.httpMethod = "POST"
+
+request.addValue("text/plain", forHTTPHeaderField: "Content-Type")
+
+request.httpBody = postData
+
+let task = URLSession.shared.dataTask(with: request) { data, response, error in 
+  guard let data = data else {
+    print(String(describing: error))
+    return
+  }
+  print(String(data: data, encoding: .utf8)!)
+}
+task.resume()
 """;
 
-        expect(
-            codeGen.getCode(
-                CodegenLanguage.swiftUrlsession, requestModelPost2, "https"),
-            expectedCode);
-      });
-
-      test('POST 3', () {
-        const expectedCode = r"""
-""";
-
-        expect(
-            codeGen.getCode(
-                CodegenLanguage.swiftUrlsession, requestModelPost3, "https"),
-            expectedCode);
-      });
-
-      test('POST 4', () {
-        const expectedCode = r"""
-""";
-
-        expect(
-            codeGen.getCode(
-                CodegenLanguage.swiftUrlsession, requestModelPost4, "https"),
-            expectedCode);
-      });
-
-      test('POST 5', () {
-        const expectedCode = r"""
-""";
-
-        expect(
-            codeGen.getCode(
-                CodegenLanguage.swiftUrlsession, requestModelPost5, "https"),
-            expectedCode);
-      });
+      expect(
+          codeGen.getCode(
+              CodegenLanguage.swiftUrlsession, requestModelPost1, "https"),
+          expectedCode);
     });
+    test('POST 2', () {
+      const expectedCode = r"""
+import Foundation
+
+let parameters = "{\n\"text\": \"I LOVE Flutter\",\n\"flag\": null,\n\"male\": true,\n\"female\": false,\n\"no\": 1.2,\n\"arr\": [\"null\", \"true\", \"false\", null]\n}"
+let postData = parameters.data(using: .utf8)
+var request = URLRequest(url: URL(string: "https://api.apidash.dev/case/lower")!,timeoutInterval: Double.infinity)
+request.httpMethod = "POST"
+
+request.addValue("application/json", forHTTPHeaderField: "Content-Type")
+
+request.httpBody = postData
+
+let task = URLSession.shared.dataTask(with: request) { data, response, error in 
+  guard let data = data else {
+    print(String(describing: error))
+    return
+  }
+  print(String(data: data, encoding: .utf8)!)
+}
+task.resume()
+""";
+
+      expect(
+          codeGen.getCode(
+              CodegenLanguage.swiftUrlsession, requestModelPost2, "https"),
+          expectedCode);
+    });
+
+    test('POST 3', () {
+      const expectedCode = r"""
+import Foundation
+
+let parameters = "{\n\"text\": \"I LOVE Flutter\"\n}"
+let postData = parameters.data(using: .utf8)
+var request = URLRequest(url: URL(string: "https://api.apidash.dev/case/lower")!,timeoutInterval: Double.infinity)
+request.httpMethod = "POST"
+
+request.addValue("Test Agent", forHTTPHeaderField: "User-Agent")
+
+request.addValue("application/json", forHTTPHeaderField: "Content-Type")
+
+request.httpBody = postData
+
+let task = URLSession.shared.dataTask(with: request) { data, response, error in 
+  guard let data = data else {
+    print(String(describing: error))
+    return
+  }
+  print(String(data: data, encoding: .utf8)!)
+}
+task.resume()
+""";
+
+      expect(
+          codeGen.getCode(
+              CodegenLanguage.swiftUrlsession, requestModelPost3, "https"),
+          expectedCode);
+    });
+
+    test('POST 4', () {
+      const expectedCode = r"""
+import Foundation
+
+let parameters = [
+
+  [
+    "key": "text",
+    "value": "API",
+    "type": "text"
+  ],
+
+  [
+    "key": "sep",
+    "value": "|",
+    "type": "text"
+  ],
+
+  [
+    "key": "times",
+    "value": "3",
+    "type": "text"
+  ],
+
+] as [[String: Any]]
+let boundary = "Boundary-\(UUID().uuidString)"
+var body = Data()
+var error: Error? = nil
+for param in parameters {
+  if param["disabled"] as? Bool == true { continue }
+  let paramName = param["key"] as! String
+  body.append("--\(boundary)\r\n".data(using: .utf8)!)
+  body.append("Content-Disposition:form-data; name=\"\(paramName)\"".data(using: .utf8)!)
+  if let contentType = param["contentType"] as? String {
+    body.append("\r\nContent-Type: \(contentType)".data(using: .utf8)!)
+  }
+  let paramType = param["type"] as! String
+  if paramType == "text" {
+    let paramValue = param["value"] as! String
+    body.append("\r\n\r\n\(paramValue)\r\n".data(using: .utf8)!)
+  } else if paramType == "file" {
+    let paramSrc = param["value"] as! String
+    let fileURL = URL(fileURLWithPath: paramSrc)
+    if let fileContent = try? Data(contentsOf: fileURL) {
+      body.append("; filename=\"\(paramSrc)\"\r\n".data(using: .utf8)!)
+      body.append("Content-Type: \"content-type header\"\r\n\r\n".data(using: .utf8)!)
+      body.append(fileContent)
+      body.append("\r\n".data(using: .utf8)!)
+    }
+  }
+}
+body.append("--\(boundary)--\r\n".data(using: .utf8)!)
+let postData = body
+var request = URLRequest(url: URL(string: "https://api.apidash.dev/io/form")!,timeoutInterval: Double.infinity)
+request.httpMethod = "POST"
+
+request.addValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
+
+request.httpBody = postData
+
+let task = URLSession.shared.dataTask(with: request) { data, response, error in 
+  guard let data = data else {
+    print(String(describing: error))
+    return
+  }
+  print(String(data: data, encoding: .utf8)!)
+}
+task.resume()
+""";
+
+      expect(
+          codeGen.getCode(
+              CodegenLanguage.swiftUrlsession, requestModelPost4, "https"),
+          expectedCode);
+    });
+
+    test('POST 5', () {
+      const expectedCode = r"""import Foundation
+
+let parameters = [
+
+  [
+    "key": "text",
+    "value": "API",
+    "type": "text"
+  ],
+
+  [
+    "key": "sep",
+    "value": "|",
+    "type": "text"
+  ],
+
+  [
+    "key": "times",
+    "value": "3",
+    "type": "text"
+  ],
+
+] as [[String: Any]]
+let boundary = "Boundary-\(UUID().uuidString)"
+var body = Data()
+var error: Error? = nil
+for param in parameters {
+  if param["disabled"] as? Bool == true { continue }
+  let paramName = param["key"] as! String
+  body.append("--\(boundary)\r\n".data(using: .utf8)!)
+  body.append("Content-Disposition:form-data; name=\"\(paramName)\"".data(using: .utf8)!)
+  if let contentType = param["contentType"] as? String {
+    body.append("\r\nContent-Type: \(contentType)".data(using: .utf8)!)
+  }
+  let paramType = param["type"] as! String
+  if paramType == "text" {
+    let paramValue = param["value"] as! String
+    body.append("\r\n\r\n\(paramValue)\r\n".data(using: .utf8)!)
+  } else if paramType == "file" {
+    let paramSrc = param["value"] as! String
+    let fileURL = URL(fileURLWithPath: paramSrc)
+    if let fileContent = try? Data(contentsOf: fileURL) {
+      body.append("; filename=\"\(paramSrc)\"\r\n".data(using: .utf8)!)
+      body.append("Content-Type: \"content-type header\"\r\n\r\n".data(using: .utf8)!)
+      body.append(fileContent)
+      body.append("\r\n".data(using: .utf8)!)
+    }
+  }
+}
+body.append("--\(boundary)--\r\n".data(using: .utf8)!)
+let postData = body
+var request = URLRequest(url: URL(string: "https://api.apidash.dev/io/form")!,timeoutInterval: Double.infinity)
+request.httpMethod = "POST"
+
+request.addValue("Test Agent", forHTTPHeaderField: "User-Agent")
+
+request.addValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
+
+request.httpBody = postData
+
+let task = URLSession.shared.dataTask(with: request) { data, response, error in 
+  guard let data = data else {
+    print(String(describing: error))
+    return
+  }
+  print(String(data: data, encoding: .utf8)!)
+}
+task.resume()
+""";
+
+      expect(
+          codeGen.getCode(
+              CodegenLanguage.swiftUrlsession, requestModelPost5, "https"),
+          expectedCode);
+    });
+    test('POST 6', () {
+      const expectedCode = r"""
+import Foundation
+
+let parameters = [
+
+  [
+    "key": "token",
+    "value": "xyz",
+    "type": "text"
+  ],
+
+  [
+    "key": "imfile",
+    "value": "/Documents/up/1.png",
+    "type": "file"
+  ],
+
+] as [[String: Any]]
+let boundary = "Boundary-\(UUID().uuidString)"
+var body = Data()
+var error: Error? = nil
+for param in parameters {
+  if param["disabled"] as? Bool == true { continue }
+  let paramName = param["key"] as! String
+  body.append("--\(boundary)\r\n".data(using: .utf8)!)
+  body.append("Content-Disposition:form-data; name=\"\(paramName)\"".data(using: .utf8)!)
+  if let contentType = param["contentType"] as? String {
+    body.append("\r\nContent-Type: \(contentType)".data(using: .utf8)!)
+  }
+  let paramType = param["type"] as! String
+  if paramType == "text" {
+    let paramValue = param["value"] as! String
+    body.append("\r\n\r\n\(paramValue)\r\n".data(using: .utf8)!)
+  } else if paramType == "file" {
+    let paramSrc = param["value"] as! String
+    let fileURL = URL(fileURLWithPath: paramSrc)
+    if let fileContent = try? Data(contentsOf: fileURL) {
+      body.append("; filename=\"\(paramSrc)\"\r\n".data(using: .utf8)!)
+      body.append("Content-Type: \"content-type header\"\r\n\r\n".data(using: .utf8)!)
+      body.append(fileContent)
+      body.append("\r\n".data(using: .utf8)!)
+    }
+  }
+}
+body.append("--\(boundary)--\r\n".data(using: .utf8)!)
+let postData = body
+var request = URLRequest(url: URL(string: "https://api.apidash.dev/io/img")!,timeoutInterval: Double.infinity)
+request.httpMethod = "POST"
+
+request.addValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
+
+request.httpBody = postData
+
+let task = URLSession.shared.dataTask(with: request) { data, response, error in 
+  guard let data = data else {
+    print(String(describing: error))
+    return
+  }
+  print(String(data: data, encoding: .utf8)!)
+}
+task.resume()
+""";
+
+      expect(
+          codeGen.getCode(
+              CodegenLanguage.swiftUrlsession, requestModelPost6, "https"),
+          expectedCode);
+    });
+    test('POST 7', () {
+      const expectedCode = r"""
+import Foundation
+
+let parameters = [
+
+  [
+    "key": "token",
+    "value": "xyz",
+    "type": "text"
+  ],
+
+  [
+    "key": "imfile",
+    "value": "/Documents/up/1.png",
+    "type": "file"
+  ],
+
+] as [[String: Any]]
+let boundary = "Boundary-\(UUID().uuidString)"
+var body = Data()
+var error: Error? = nil
+for param in parameters {
+  if param["disabled"] as? Bool == true { continue }
+  let paramName = param["key"] as! String
+  body.append("--\(boundary)\r\n".data(using: .utf8)!)
+  body.append("Content-Disposition:form-data; name=\"\(paramName)\"".data(using: .utf8)!)
+  if let contentType = param["contentType"] as? String {
+    body.append("\r\nContent-Type: \(contentType)".data(using: .utf8)!)
+  }
+  let paramType = param["type"] as! String
+  if paramType == "text" {
+    let paramValue = param["value"] as! String
+    body.append("\r\n\r\n\(paramValue)\r\n".data(using: .utf8)!)
+  } else if paramType == "file" {
+    let paramSrc = param["value"] as! String
+    let fileURL = URL(fileURLWithPath: paramSrc)
+    if let fileContent = try? Data(contentsOf: fileURL) {
+      body.append("; filename=\"\(paramSrc)\"\r\n".data(using: .utf8)!)
+      body.append("Content-Type: \"content-type header\"\r\n\r\n".data(using: .utf8)!)
+      body.append(fileContent)
+      body.append("\r\n".data(using: .utf8)!)
+    }
+  }
+}
+body.append("--\(boundary)--\r\n".data(using: .utf8)!)
+let postData = body
+var request = URLRequest(url: URL(string: "https://api.apidash.dev/io/img")!,timeoutInterval: Double.infinity)
+request.httpMethod = "POST"
+
+request.addValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
+
+request.httpBody = postData
+
+let task = URLSession.shared.dataTask(with: request) { data, response, error in 
+  guard let data = data else {
+    print(String(describing: error))
+    return
+  }
+  print(String(data: data, encoding: .utf8)!)
+}
+task.resume()
+""";
+
+      expect(
+          codeGen.getCode(
+              CodegenLanguage.swiftUrlsession, requestModelPost7, "https"),
+          expectedCode);
+    });
+    test('POST 8', () {
+      const expectedCode = r"""
+import Foundation
+
+let parameters = [
+
+  [
+    "key": "text",
+    "value": "API",
+    "type": "text"
+  ],
+
+  [
+    "key": "sep",
+    "value": "|",
+    "type": "text"
+  ],
+
+  [
+    "key": "times",
+    "value": "3",
+    "type": "text"
+  ],
+
+] as [[String: Any]]
+let boundary = "Boundary-\(UUID().uuidString)"
+var body = Data()
+var error: Error? = nil
+for param in parameters {
+  if param["disabled"] as? Bool == true { continue }
+  let paramName = param["key"] as! String
+  body.append("--\(boundary)\r\n".data(using: .utf8)!)
+  body.append("Content-Disposition:form-data; name=\"\(paramName)\"".data(using: .utf8)!)
+  if let contentType = param["contentType"] as? String {
+    body.append("\r\nContent-Type: \(contentType)".data(using: .utf8)!)
+  }
+  let paramType = param["type"] as! String
+  if paramType == "text" {
+    let paramValue = param["value"] as! String
+    body.append("\r\n\r\n\(paramValue)\r\n".data(using: .utf8)!)
+  } else if paramType == "file" {
+    let paramSrc = param["value"] as! String
+    let fileURL = URL(fileURLWithPath: paramSrc)
+    if let fileContent = try? Data(contentsOf: fileURL) {
+      body.append("; filename=\"\(paramSrc)\"\r\n".data(using: .utf8)!)
+      body.append("Content-Type: \"content-type header\"\r\n\r\n".data(using: .utf8)!)
+      body.append(fileContent)
+      body.append("\r\n".data(using: .utf8)!)
+    }
+  }
+}
+body.append("--\(boundary)--\r\n".data(using: .utf8)!)
+let postData = body
+var request = URLRequest(url: URL(string: "https://api.apidash.dev/io/form?size=2&len=3")!,timeoutInterval: Double.infinity)
+request.httpMethod = "POST"
+
+request.addValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
+
+request.httpBody = postData
+
+let task = URLSession.shared.dataTask(with: request) { data, response, error in 
+  guard let data = data else {
+    print(String(describing: error))
+    return
+  }
+  print(String(data: data, encoding: .utf8)!)
+}
+task.resume()
+""";
+
+      expect(
+          codeGen.getCode(
+              CodegenLanguage.swiftUrlsession, requestModelPost8, "https"),
+          expectedCode);
+    });
+    test('POST 9', () {
+      const expectedCode = r"""
+import Foundation
+
+let parameters = [
+
+  [
+    "key": "token",
+    "value": "xyz",
+    "type": "text"
+  ],
+
+  [
+    "key": "imfile",
+    "value": "/Documents/up/1.png",
+    "type": "file"
+  ],
+
+] as [[String: Any]]
+let boundary = "Boundary-\(UUID().uuidString)"
+var body = Data()
+var error: Error? = nil
+for param in parameters {
+  if param["disabled"] as? Bool == true { continue }
+  let paramName = param["key"] as! String
+  body.append("--\(boundary)\r\n".data(using: .utf8)!)
+  body.append("Content-Disposition:form-data; name=\"\(paramName)\"".data(using: .utf8)!)
+  if let contentType = param["contentType"] as? String {
+    body.append("\r\nContent-Type: \(contentType)".data(using: .utf8)!)
+  }
+  let paramType = param["type"] as! String
+  if paramType == "text" {
+    let paramValue = param["value"] as! String
+    body.append("\r\n\r\n\(paramValue)\r\n".data(using: .utf8)!)
+  } else if paramType == "file" {
+    let paramSrc = param["value"] as! String
+    let fileURL = URL(fileURLWithPath: paramSrc)
+    if let fileContent = try? Data(contentsOf: fileURL) {
+      body.append("; filename=\"\(paramSrc)\"\r\n".data(using: .utf8)!)
+      body.append("Content-Type: \"content-type header\"\r\n\r\n".data(using: .utf8)!)
+      body.append(fileContent)
+      body.append("\r\n".data(using: .utf8)!)
+    }
+  }
+}
+body.append("--\(boundary)--\r\n".data(using: .utf8)!)
+let postData = body
+var request = URLRequest(url: URL(string: "https://api.apidash.dev/io/img?size=2&len=3")!,timeoutInterval: Double.infinity)
+request.httpMethod = "POST"
+
+request.addValue("Test Agent", forHTTPHeaderField: "User-Agent")
+
+request.addValue("true", forHTTPHeaderField: "Keep-Alive")
+
+request.addValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
+
+request.httpBody = postData
+
+let task = URLSession.shared.dataTask(with: request) { data, response, error in 
+  guard let data = data else {
+    print(String(describing: error))
+    return
+  }
+  print(String(data: data, encoding: .utf8)!)
+}
+task.resume()
+""";
+
+      expect(
+          codeGen.getCode(
+              CodegenLanguage.swiftUrlsession, requestModelPost9, "https"),
+          expectedCode);
+    });
+    test('POST 10', () {
+      const expectedCode = r"""
+import Foundation
+
+let parameters = "{\n\"text\": \"I LOVE Flutter\"\n}"
+let postData = parameters.data(using: .utf8)
+var request = URLRequest(url: URL(string: "https://api.apidash.dev/case/lower?size=2&len=3")!,timeoutInterval: Double.infinity)
+request.httpMethod = "POST"
+
+request.addValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")
+
+request.httpBody = postData
+
+let task = URLSession.shared.dataTask(with: request) { data, response, error in 
+  guard let data = data else {
+    print(String(describing: error))
+    return
+  }
+  print(String(data: data, encoding: .utf8)!)
+}
+task.resume()
+""";
+
+      expect(
+          codeGen.getCode(
+              CodegenLanguage.swiftUrlsession, requestModelPost10, "https"),
+          expectedCode);
+    });
+  });
   group('HTTPVerb.put', () {
     test('PUT 1', () {
       const expectedCode = r"""
+import Foundation
+
+let parameters = "{\n\"name\": \"morpheus\",\n\"job\": \"zion resident\"\n}"
+let postData = parameters.data(using: .utf8)
+var request = URLRequest(url: URL(string: "https://reqres.in/api/users/2")!,timeoutInterval: Double.infinity)
+request.httpMethod = "PUT"
+
+request.addValue("application/json", forHTTPHeaderField: "Content-Type")
+
+request.httpBody = postData
+
+let task = URLSession.shared.dataTask(with: request) { data, response, error in 
+  guard let data = data else {
+    print(String(describing: error))
+    return
+  }
+  print(String(data: data, encoding: .utf8)!)
+}
+task.resume()
 """;
 
       expect(
@@ -387,6 +921,25 @@ task.resume()
   group('HTTPVerb.patch', () {
     test('PATCH 1', () {
       const expectedCode = r"""
+import Foundation
+
+let parameters = "{\n\"name\": \"marfeus\",\n\"job\": \"accountant\"\n}"
+let postData = parameters.data(using: .utf8)
+var request = URLRequest(url: URL(string: "https://reqres.in/api/users/2")!,timeoutInterval: Double.infinity)
+request.httpMethod = "PATCH"
+
+request.addValue("application/json", forHTTPHeaderField: "Content-Type")
+
+request.httpBody = postData
+
+let task = URLSession.shared.dataTask(with: request) { data, response, error in 
+  guard let data = data else {
+    print(String(describing: error))
+    return
+  }
+  print(String(data: data, encoding: .utf8)!)
+}
+task.resume()
 """;
 
       expect(
@@ -399,6 +952,18 @@ task.resume()
   group('HTTPVerb.delete', () {
     test('DELETE 1', () {
       const expectedCode = r"""
+import Foundation
+
+var request = URLRequest(url: URL(string: "https://reqres.in/api/users/2")!,timeoutInterval: Double.infinity)
+request.httpMethod = "DELETE"
+let task = URLSession.shared.dataTask(with: request) { data, response, error in 
+  guard let data = data else {
+    print(String(describing: error))
+    return
+  }
+  print(String(data: data, encoding: .utf8)!)
+}
+task.resume()
 """;
 
       expect(
@@ -409,6 +974,25 @@ task.resume()
 
     test('DELETE 2', () {
       const expectedCode = r"""
+import Foundation
+
+let parameters = "{\n\"name\": \"marfeus\",\n\"job\": \"accountant\"\n}"
+let postData = parameters.data(using: .utf8)
+var request = URLRequest(url: URL(string: "https://reqres.in/api/users/2")!,timeoutInterval: Double.infinity)
+request.httpMethod = "DELETE"
+
+request.addValue("application/json", forHTTPHeaderField: "Content-Type")
+
+request.httpBody = postData
+
+let task = URLSession.shared.dataTask(with: request) { data, response, error in 
+  guard let data = data else {
+    print(String(describing: error))
+    return
+  }
+  print(String(data: data, encoding: .utf8)!)
+}
+task.resume()
 """;
 
       expect(