From fd9ae729d818079aadae5fd6f1a48a8b5dcc4daa Mon Sep 17 00:00:00 2001
From: Dariusz Rybicki <dariusz@elixxir.io>
Date: Mon, 15 Aug 2022 18:54:21 +0100
Subject: [PATCH] Add FetchBannedList functor

---
 .../ReportingFeature/FetchBannedList.swift    | 45 +++++++++++++++++++
 1 file changed, 45 insertions(+)
 create mode 100644 Sources/ReportingFeature/FetchBannedList.swift

diff --git a/Sources/ReportingFeature/FetchBannedList.swift b/Sources/ReportingFeature/FetchBannedList.swift
new file mode 100644
index 00000000..55617df4
--- /dev/null
+++ b/Sources/ReportingFeature/FetchBannedList.swift
@@ -0,0 +1,45 @@
+import Foundation
+import XCTestDynamicOverlay
+
+public struct FetchBannedList {
+    public enum Error: Swift.Error, Equatable {
+        case network(URLError)
+        case invalidResponse
+    }
+
+    public typealias Completion = (Result<Data, Error>) -> Void
+
+    public var run: (@escaping Completion) -> Void
+
+    public func callAsFunction(completion: @escaping Completion) {
+        run(completion)
+    }
+}
+
+extension FetchBannedList {
+    public static let live = FetchBannedList { completion in
+        let url = URL(string: "https://elixxir-bins.s3.us-west-1.amazonaws.com/client/bannedUsers/bannedTesting.csv")!
+        let session = URLSession.shared
+        let task = session.dataTask(with: url) { data, response, error in
+            if let error = error {
+                completion(.failure(.network(error as! URLError)))
+                return
+            }
+            guard let response = response as? HTTPURLResponse,
+                  (200..<300).contains(response.statusCode),
+                  let data = data
+            else {
+                completion(.failure(.invalidResponse))
+                return
+            }
+            completion(.success(data))
+        }
+        task.resume()
+    }
+}
+
+extension FetchBannedList {
+    public static let unimplemented = FetchBannedList(
+        run: XCTUnimplemented("\(Self.self)")
+    )
+}
-- 
GitLab