#import <Foundation/Foundation.h>
#import <CloudKit/CloudKit.h>
#import "keychain/ckks/CloudKitDependencies.h"
#import "keychain/ckks/CKKSNotifier.h"
NS_ASSUME_NONNULL_BEGIN
@class CKKSCKRecordHolder;
@class FakeCKZone;
typedef NSMutableDictionary<CKRecordZoneID*, FakeCKZone*> FakeCKDatabase;
@interface FakeCKModifyRecordZonesOperation : NSBlockOperation <CKKSModifyRecordZonesOperation>
@property (nullable) NSError* creationError;
@property (nonatomic, nullable) NSMutableArray<CKRecordZone *>* recordZonesSaved;
@property (nonatomic, nullable) NSMutableArray<CKRecordZoneID *>* recordZoneIDsDeleted;
+(FakeCKDatabase*) ckdb;
@end
@interface FakeCKModifySubscriptionsOperation : NSBlockOperation <CKKSModifySubscriptionsOperation>
@property (nullable) NSError* subscriptionError;
@property (nonatomic, nullable) NSMutableArray<CKSubscription *> *subscriptionsSaved;
@property (nonatomic, nullable) NSMutableArray<NSString *> *subscriptionIDsDeleted;
+(FakeCKDatabase*) ckdb;
@end
@interface FakeCKFetchRecordZoneChangesOperation : NSOperation <CKKSFetchRecordZoneChangesOperation>
+(FakeCKDatabase*) ckdb;
@end
@interface FakeAPSConnection : NSObject <CKKSAPSConnection>
@end
@interface FakeNSNotificationCenter : NSObject<CKKSNSNotificationCenter>
+ (instancetype)defaultCenter;
- (void)addObserver:(id)observer selector:(SEL)aSelector name:(nullable NSNotificationName)aName object:(nullable id)anObject;
@end
@interface FakeCKZone : NSObject
@property CKRecordZoneID* zoneID;
@property CKServerChangeToken* currentChangeToken;
@property NSMutableDictionary<CKRecordID*, CKRecord*>* currentDatabase;
@property NSMutableDictionary<CKServerChangeToken*, NSMutableDictionary<CKRecordID*, CKRecord*>*>* pastDatabases;
@property bool flag;
@property (nullable) NSError* creationError;
@property bool failCreationSilently;
@property (nullable) NSError* subscriptionError;
- (instancetype)initZone: (CKRecordZoneID*) zoneID;
- (void)rollChangeToken;
- (void)addToZone: (CKKSCKRecordHolder*) item zoneID: (CKRecordZoneID*) zoneID;
- (void)addToZone: (CKRecord*) record;
- (void)addCKRecordToZone: (CKRecord*) record;
- (NSError* _Nullable)deleteCKRecordIDFromZone:(CKRecordID*) recordID;
- (void)failNextFetchWith: (NSError*) fetchChangesError;
- (NSError * _Nullable)popFetchChangesError;
- (NSError * _Nullable)errorFromSavingRecord:(CKRecord*) record;
@end
@interface FakeCKKSNotifier : NSObject <CKKSNotifier>
@end
NS_ASSUME_NONNULL_END