From 82174be99068790d5acac9cc7c5e01e025c70aa1 Mon Sep 17 00:00:00 2001
From: Bruno Muniz Azevedo Filho <bruno@elixxir.io>
Date: Fri, 26 Aug 2022 21:40:06 -0300
Subject: [PATCH] Add mock implementation of SendReport and ReportingStatus

---
 Sources/App/DependencyRegistrator.swift        |  6 ++++--
 Sources/ReportingFeature/ReportingStatus.swift | 13 +++++++++++++
 Sources/ReportingFeature/SendReport.swift      | 12 ++++++++++++
 3 files changed, 29 insertions(+), 2 deletions(-)

diff --git a/Sources/App/DependencyRegistrator.swift b/Sources/App/DependencyRegistrator.swift
index cdb3495d..182ac2f5 100644
--- a/Sources/App/DependencyRegistrator.swift
+++ b/Sources/App/DependencyRegistrator.swift
@@ -57,6 +57,8 @@ struct DependencyRegistrator {
         container.register(XXLogger.noop)
         container.register(CrashReporter.noop)
         container.register(VersionChecker.mock)
+        container.register(ReportingStatus.mock())
+        container.register(SendReport.mock())
         container.register(XXNetwork<BindingsMock>() as XXNetworking)
         container.register(MockNetworkMonitor() as NetworkMonitoring)
         container.register(KeyObjectStore.userDefaults)
@@ -81,6 +83,8 @@ struct DependencyRegistrator {
         container.register(XXLogger.live())
         container.register(CrashReporter.live)
         container.register(VersionChecker.live())
+        container.register(ReportingStatus.live())
+        container.register(SendReport.live)
 
         container.register(XXNetwork<BindingsClient>() as XXNetworking)
         container.register(NetworkMonitor() as NetworkMonitoring)
@@ -103,9 +107,7 @@ struct DependencyRegistrator {
     static private func registerCommonDependencies() {
         container.register(Voxophone())
         container.register(BackupService())
-        container.register(ReportingStatus.live())
         container.register(MakeAppScreenshot.live)
-        container.register(SendReport.live)
         container.register(FetchBannedList.live)
         container.register(ProcessBannedList.live)
         container.register(MakeReportDrawer.live)
diff --git a/Sources/ReportingFeature/ReportingStatus.swift b/Sources/ReportingFeature/ReportingStatus.swift
index 2ed407a8..1bb72983 100644
--- a/Sources/ReportingFeature/ReportingStatus.swift
+++ b/Sources/ReportingFeature/ReportingStatus.swift
@@ -35,4 +35,17 @@ extension ReportingStatus {
             }
         )
     }
+
+    public static func mock(
+        isEnabled: Bool = false,
+        isOptional: Bool = true
+    ) -> ReportingStatus {
+        let isEnabledSubject = CurrentValueSubject<Bool, Never>(isEnabled)
+        return ReportingStatus(
+            isOptional: { isOptional },
+            isEnabled: { isEnabledSubject.value },
+            isEnabledPublisher: { isEnabledSubject.eraseToAnyPublisher() },
+            enable: { isEnabledSubject.send($0) }
+        )
+    }
 }
diff --git a/Sources/ReportingFeature/SendReport.swift b/Sources/ReportingFeature/SendReport.swift
index acc24a0c..4793d998 100644
--- a/Sources/ReportingFeature/SendReport.swift
+++ b/Sources/ReportingFeature/SendReport.swift
@@ -37,6 +37,18 @@ extension SendReport {
         }
         task.resume()
     }
+
+    public static func mock(
+        result: Result<Void, Error> = .success(())
+    ) -> SendReport {
+        SendReport { report, completion in
+            print("[SendReport.mock] Sending report: \(report)")
+            DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
+                print("[SendReport.mock] Sending report finished")
+                completion(result)
+            }
+        }
+    }
 }
 
 extension SendReport {
-- 
GitLab