 
 protocol FirebaseAdapter {
 
+    var fcmToken: String { get }
+
     func setAPNSToken(deviceToken: Data)
     func subscribe(toTopic topic: String)
     func unsubscribe(fromTopic topic: String)
 
 }
 
+protocol FCMDeviceRegistration {
+
+    func registerFCM(_ fcm: String)
+
+}
+
 class CapturingFirebaseAdapter: FirebaseAdapter {
 
     private(set) var registeredDeviceToken: Data?

        let context = assembleApp(configuration: .debug)
        XCTAssertFalse(context.capturingFirebaseAdapter.subscribedToAnnouncements)
    }
    
}


    private var buildConfiguration: BuildConfigurationProviding
    private var firebaseAdapter: FirebaseAdapter
    private var fcmRegistration: FCMDeviceRegistration

    init(buildConfiguration: BuildConfigurationProviding,
         firebaseAdapter: FirebaseAdapter,
         fcmRegistration: FCMDeviceRegistration) {
        self.buildConfiguration = buildConfiguration
        self.firebaseAdapter = firebaseAdapter
        self.fcmRegistration = fcmRegistration


    }

    func registerDevicePushToken(_ token: Data) {
        fcmRegistration.registerFCM(firebaseAdapter.fcmToken)
        firebaseAdapter.setAPNSToken(deviceToken: token)
        firebaseAdapter.subscribe(toTopic: Topic.announcements.rawValue)

