From 8ccac1c0a6e5bfda04cfb159b41f27ce0e22ec78 Mon Sep 17 00:00:00 2001
From: Dariusz Rybicki <dariusz@elixxir.io>
Date: Fri, 23 Sep 2022 16:10:52 +0200
Subject: [PATCH] Add unimplemented constructors

---
 .../XXLegacyDatabaseMigrator/Migrator.swift   |  6 ++++
 Sources/XXModels/Database.swift               | 33 +++++++++++++++++++
 Sources/XXModels/Operations/BulkUpdate.swift  |  6 ++++
 Sources/XXModels/Operations/Delete.swift      |  6 ++++
 Sources/XXModels/Operations/DeleteMany.swift  |  6 ++++
 Sources/XXModels/Operations/Drop.swift        |  3 ++
 Sources/XXModels/Operations/Fetch.swift       |  6 ++++
 .../XXModels/Operations/FetchPublisher.swift  |  8 +++++
 Sources/XXModels/Operations/Save.swift        |  6 ++++
 .../MigratorTests.swift                       |  4 +--
 10 files changed, 82 insertions(+), 2 deletions(-)

diff --git a/Sources/XXLegacyDatabaseMigrator/Migrator.swift b/Sources/XXLegacyDatabaseMigrator/Migrator.swift
index 2e15273..73af8c3 100644
--- a/Sources/XXLegacyDatabaseMigrator/Migrator.swift
+++ b/Sources/XXLegacyDatabaseMigrator/Migrator.swift
@@ -70,7 +70,13 @@ extension Migrator {
 }
 
 #if DEBUG
+import XCTestDynamicOverlay
+
 extension Migrator {
   public static let failing = Migrator { _, _, _, _ in fatalError() }
+
+  public static let unimplemented = Migrator(
+    run: XCTUnimplemented("\(Self.self)")
+  )
 }
 #endif
diff --git a/Sources/XXModels/Database.swift b/Sources/XXModels/Database.swift
index 7b20c22..d1801b0 100644
--- a/Sources/XXModels/Database.swift
+++ b/Sources/XXModels/Database.swift
@@ -209,5 +209,38 @@ extension Database {
     deleteFileTransfer: .failing(),
     drop: .failing
   )
+
+  static public let unimplemented = Database(
+    fetchChatInfos: .unimplemented(),
+    fetchChatInfosPublisher: .unimplemented(),
+    fetchContacts: .unimplemented(),
+    fetchContactsPublisher: .unimplemented(),
+    saveContact: .unimplemented(),
+    bulkUpdateContacts: .unimplemented(),
+    deleteContact: .unimplemented(),
+    fetchContactChatInfos: .unimplemented(),
+    fetchContactChatInfosPublisher: .unimplemented(),
+    fetchGroups: .unimplemented(),
+    fetchGroupsPublisher: .unimplemented(),
+    saveGroup: .unimplemented(),
+    deleteGroup: .unimplemented(),
+    fetchGroupChatInfos: .unimplemented(),
+    fetchGroupChatInfosPublisher: .unimplemented(),
+    fetchGroupInfos: .unimplemented(),
+    fetchGroupInfosPublisher: .unimplemented(),
+    saveGroupMember: .unimplemented(),
+    deleteGroupMember: .unimplemented(),
+    fetchMessages: .unimplemented(),
+    fetchMessagesPublisher: .unimplemented(),
+    saveMessage: .unimplemented(),
+    bulkUpdateMessages: .unimplemented(),
+    deleteMessage: .unimplemented(),
+    deleteMessages: .unimplemented(),
+    fetchFileTransfers: .unimplemented(),
+    fetchFileTransfersPublisher: .unimplemented(),
+    saveFileTransfer: .unimplemented(),
+    deleteFileTransfer: .unimplemented(),
+    drop: .unimplemented
+  )
 }
 #endif
diff --git a/Sources/XXModels/Operations/BulkUpdate.swift b/Sources/XXModels/Operations/BulkUpdate.swift
index 6c9c28f..ca08bdb 100644
--- a/Sources/XXModels/Operations/BulkUpdate.swift
+++ b/Sources/XXModels/Operations/BulkUpdate.swift
@@ -22,9 +22,15 @@ public struct BulkUpdate<Query, Assignments> {
 }
 
 #if DEBUG
+import XCTestDynamicOverlay
+
 extension BulkUpdate {
   public static func failing<Query, Assignments>() -> BulkUpdate<Query, Assignments> {
     BulkUpdate<Query, Assignments> { _, _ in fatalError() }
   }
+
+  public static func unimplemented<Query, Assignments>() -> BulkUpdate<Query, Assignments> {
+    BulkUpdate<Query, Assignments>(run: XCTUnimplemented("\(Self.self)"))
+  }
 }
 #endif
diff --git a/Sources/XXModels/Operations/Delete.swift b/Sources/XXModels/Operations/Delete.swift
index b305699..85119dc 100644
--- a/Sources/XXModels/Operations/Delete.swift
+++ b/Sources/XXModels/Operations/Delete.swift
@@ -22,9 +22,15 @@ public struct Delete<Model> {
 }
 
 #if DEBUG
+import XCTestDynamicOverlay
+
 extension Delete {
   public static func failing<Model>() -> Delete<Model> {
     Delete<Model> { _ in fatalError() }
   }
+
+  public static func unimplemented<Model>() -> Delete<Model> {
+    Delete<Model>(run: XCTUnimplemented("\(Self.self)"))
+  }
 }
 #endif
diff --git a/Sources/XXModels/Operations/DeleteMany.swift b/Sources/XXModels/Operations/DeleteMany.swift
index 43c155c..b75c627 100644
--- a/Sources/XXModels/Operations/DeleteMany.swift
+++ b/Sources/XXModels/Operations/DeleteMany.swift
@@ -21,9 +21,15 @@ public struct DeleteMany<Model, Query> {
 }
 
 #if DEBUG
+import XCTestDynamicOverlay
+
 extension DeleteMany {
   public static func failing<Model, Query>() -> DeleteMany<Model, Query> {
     DeleteMany<Model, Query> { _ in fatalError() }
   }
+
+  public static func unimplemented<Model>() -> DeleteMany<Model, Query> {
+    DeleteMany<Model, Query>(run: XCTUnimplemented("\(Self.self)"))
+  }
 }
 #endif
diff --git a/Sources/XXModels/Operations/Drop.swift b/Sources/XXModels/Operations/Drop.swift
index d80e242..4821f69 100644
--- a/Sources/XXModels/Operations/Drop.swift
+++ b/Sources/XXModels/Operations/Drop.swift
@@ -20,7 +20,10 @@ public struct Drop {
 }
 
 #if DEBUG
+import XCTestDynamicOverlay
+
 extension Drop {
   public static let failing = Drop { fatalError() }
+  public static let unimplemented = Drop(run: XCTUnimplemented("\(Self.self)"))
 }
 #endif
diff --git a/Sources/XXModels/Operations/Fetch.swift b/Sources/XXModels/Operations/Fetch.swift
index 7fe8e6e..ff9c0ee 100644
--- a/Sources/XXModels/Operations/Fetch.swift
+++ b/Sources/XXModels/Operations/Fetch.swift
@@ -22,9 +22,15 @@ public struct Fetch<Model, Query> {
 }
 
 #if DEBUG
+import XCTestDynamicOverlay
+
 extension Fetch {
   public static func failing<Model, Query>() -> Fetch<Model, Query> {
     Fetch<Model, Query> { _ in fatalError() }
   }
+
+  public static func unimplemented<Model, Query>() -> Fetch<Model, Query> {
+    Fetch<Model, Query>(run: XCTUnimplemented("\(Self.self)"))
+  }
 }
 #endif
diff --git a/Sources/XXModels/Operations/FetchPublisher.swift b/Sources/XXModels/Operations/FetchPublisher.swift
index fe78d3b..9372d2a 100644
--- a/Sources/XXModels/Operations/FetchPublisher.swift
+++ b/Sources/XXModels/Operations/FetchPublisher.swift
@@ -23,9 +23,17 @@ public struct FetchPublisher<Model, Query> {
 }
 
 #if DEBUG
+import XCTestDynamicOverlay
+
 extension FetchPublisher {
   public static func failing<Model, Query>() -> FetchPublisher<Model, Query> {
     FetchPublisher<Model, Query> { _ in fatalError() }
   }
+
+  public static func unimplemented<Model, Query>() -> FetchPublisher<Model, Query> {
+    FetchPublisher<Model, Query>(
+      run: XCTUnimplemented("\(Self.self)", placeholder: Empty().eraseToAnyPublisher())
+    )
+  }
 }
 #endif
diff --git a/Sources/XXModels/Operations/Save.swift b/Sources/XXModels/Operations/Save.swift
index 31ec662..6ab8076 100644
--- a/Sources/XXModels/Operations/Save.swift
+++ b/Sources/XXModels/Operations/Save.swift
@@ -25,9 +25,15 @@ public struct Save<Model> {
 }
 
 #if DEBUG
+import XCTestDynamicOverlay
+
 extension Save {
   public static func failing<Model>() -> Save<Model> {
     Save<Model> { _ in fatalError() }
   }
+
+  public static func unimplemented<Model>() -> Save<Model> {
+    Save<Model>(run: XCTUnimplemented("\(Self.self)"))
+  }
 }
 #endif
diff --git a/Tests/XXLegacyDatabaseMigratorTests/MigratorTests.swift b/Tests/XXLegacyDatabaseMigratorTests/MigratorTests.swift
index 2a83537..68fcbf6 100644
--- a/Tests/XXLegacyDatabaseMigratorTests/MigratorTests.swift
+++ b/Tests/XXLegacyDatabaseMigratorTests/MigratorTests.swift
@@ -36,7 +36,7 @@ final class MigratorTests: XCTestCase {
 
     var didSaveContacts = [XXModels.Contact]()
 
-    var newDb = XXModels.Database.failing
+    var newDb = XXModels.Database.unimplemented
     newDb.fetchContacts = .init { _ in [] }
     newDb.saveContact = .init(run: {
       didSaveContacts.append($0)
@@ -182,7 +182,7 @@ final class MigratorTests: XCTestCase {
 
     // Mock up new database:
 
-    var newDb = XXModels.Database.failing
+    var newDb = XXModels.Database.unimplemented
     newDb.fetchContacts = .init { _ in [] }
     newDb.saveContact = .init { $0 }
 
-- 
GitLab