Skip to content

Commit c97dbac

Browse files
committed
[chain-pr 7/10] DatadogFlags: typed-bus migration
1 parent 588136c commit c97dbac

5 files changed

Lines changed: 38 additions & 27 deletions

File tree

DatadogFlags/Sources/Client/FlagsClient.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ public final class FlagsClient {
189189
),
190190
exposureLogger: feature.makeExposureLogger(featureScope),
191191
evaluationLogger: feature.makeEvaluationLogger(featureScope),
192-
rumFlagEvaluationReporter: feature.makeRUMFlagEvaluationReporter(featureScope)
192+
rumFlagEvaluationReporter: feature.makeRUMFlagEvaluationReporter()
193193
)
194194

195195
feature.clientRegistry.register(client, named: name)

DatadogFlags/Sources/Client/RUMFlagEvaluationReporter.swift

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,17 @@ internal protocol RUMFlagEvaluationReporting {
1212
}
1313

1414
internal final class RUMFlagEvaluationReporter: RUMFlagEvaluationReporting {
15-
private let featureScope: any FeatureScope
15+
private let messageBus: any MessageBus
1616

17-
init(featureScope: any FeatureScope) {
18-
self.featureScope = featureScope
17+
init(messageBus: any MessageBus) {
18+
self.messageBus = messageBus
1919
}
2020

2121
func sendFlagEvaluation<T>(flagKey: String, value: T) where T: FlagValue {
22-
featureScope.send(
23-
message: .payload(
24-
RUMFlagEvaluationMessage(
25-
flagKey: flagKey,
26-
value: value
27-
)
22+
messageBus.send(
23+
message: RUMFlagEvaluationMessage(
24+
flagKey: flagKey,
25+
value: value
2826
)
2927
)
3028
}

DatadogFlags/Sources/Feature/FlagsFeature.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ internal struct FlagsFeature: DatadogRemoteFeature {
2121
let clientRegistry: FlagsClientRegistry
2222
let makeExposureLogger: (any FeatureScope) -> any ExposureLogging
2323
let makeEvaluationLogger: (any FeatureScope) -> any EvaluationLogging
24-
let makeRUMFlagEvaluationReporter: (any FeatureScope) -> any RUMFlagEvaluationReporting
24+
let makeRUMFlagEvaluationReporter: () -> any RUMFlagEvaluationReporting
2525
let performanceOverride: PerformancePresetOverride?
2626
let issueReporter: IssueReporter
2727
private let evaluationAggregator: EvaluationAggregator?
@@ -76,11 +76,11 @@ internal struct FlagsFeature: DatadogRemoteFeature {
7676
return EvaluationLogger(aggregator: aggregator)
7777
}
7878

79-
makeRUMFlagEvaluationReporter = { featureScope in
79+
makeRUMFlagEvaluationReporter = { [messageBus = core.messageBus] in
8080
guard configuration.rumIntegrationEnabled else {
8181
return NOPRUMFlagEvaluationReporter()
8282
}
83-
return RUMFlagEvaluationReporter(featureScope: featureScope)
83+
return RUMFlagEvaluationReporter(messageBus: messageBus)
8484
}
8585
performanceOverride = PerformancePresetOverride(maxObjectsInFile: 50)
8686

DatadogFlags/Tests/Client/FlagsClientTests.swift

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -308,15 +308,18 @@ final class FlagsClientTests: XCTestCase {
308308
date: .mockAny()
309309
)
310310
let data = try JSONEncoder().encode(initialState)
311-
let messageReceiver = FeatureMessageReceiverMock()
312311
let core = SingleFeatureCoreMock<FlagsFeature>(
313312
dataStore: DataStoreMock(
314313
storage: [
315314
FlagsClient.defaultName: .value(data, dataStoreDefaultKeyVersion)
316315
]
317-
),
318-
messageReceiver: messageReceiver
316+
)
319317
)
318+
var rumMessages: [RUMFlagEvaluationMessage] = []
319+
let subscription = core.messageBus.subscribe { (msg: RUMFlagEvaluationMessage, _) in
320+
rumMessages.append(msg)
321+
}
322+
defer { core.messageBus.unsubscribe(subscription) }
320323

321324
// When
322325
Flags.enable(with: .init(trackExposures: false), in: core)
@@ -326,7 +329,7 @@ final class FlagsClientTests: XCTestCase {
326329

327330
// Then
328331
XCTAssertEqual(core.events(ofType: ExposureEvent.self).count, 0, "No exposure events should be written")
329-
XCTAssertEqual(messageReceiver.messages.filter(\.isRUMMessage).count, 1, "RUM integration should still work")
332+
XCTAssertEqual(rumMessages.count, 1, "RUM integration should still work")
330333
}
331334

332335
func testRUMIntegrationDisabled() throws {
@@ -337,15 +340,18 @@ final class FlagsClientTests: XCTestCase {
337340
date: .mockAny()
338341
)
339342
let data = try JSONEncoder().encode(initialState)
340-
let messageReceiver = FeatureMessageReceiverMock()
341343
let core = SingleFeatureCoreMock<FlagsFeature>(
342344
dataStore: DataStoreMock(
343345
storage: [
344346
FlagsClient.defaultName: .value(data, dataStoreDefaultKeyVersion)
345347
]
346-
),
347-
messageReceiver: messageReceiver
348+
)
348349
)
350+
var rumMessages: [RUMFlagEvaluationMessage] = []
351+
let subscription = core.messageBus.subscribe { (msg: RUMFlagEvaluationMessage, _) in
352+
rumMessages.append(msg)
353+
}
354+
defer { core.messageBus.unsubscribe(subscription) }
349355

350356
// When
351357
Flags.enable(with: .init(rumIntegrationEnabled: false), in: core)
@@ -355,7 +361,7 @@ final class FlagsClientTests: XCTestCase {
355361

356362
// Then
357363
XCTAssertEqual(core.events(ofType: ExposureEvent.self).count, 1, "Exposure should still be logged")
358-
XCTAssertEqual(messageReceiver.messages.filter(\.isRUMMessage).count, 0, "No RUM messages should be sent")
364+
XCTAssertEqual(rumMessages.count, 0, "No RUM messages should be sent")
359365
}
360366

361367
// MARK: - Internal methods consumed by the React Native SDK

DatadogFlags/Tests/Client/RUMFlagEvaluationReporterTests.swift

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,20 @@ import DatadogInternal
1010

1111
@testable import DatadogFlags
1212

13-
final class RUMFlagEvaluationReporterTests: XCTestCase {
14-
private let featureScope = FeatureScopeMock()
13+
private final class RUMFlagEvaluationRecorder: BusMessageReceiver {
14+
private(set) var messages: [RUMFlagEvaluationMessage] = []
15+
func receive(message: RUMFlagEvaluationMessage, from core: DatadogCoreProtocol) {
16+
messages.append(message)
17+
}
18+
}
1519

20+
final class RUMFlagEvaluationReporterTests: XCTestCase {
1621
func testSendFlagEvaluation() throws {
1722
// Given
18-
let reporter = RUMFlagEvaluationReporter(featureScope: featureScope)
23+
let core = PassthroughCoreMock()
24+
let recorder = RUMFlagEvaluationRecorder()
25+
core.subscribe(receiver: recorder)
26+
let reporter = RUMFlagEvaluationReporter(messageBus: core.messageBus)
1927

2028
// When
2129
reporter.sendFlagEvaluation(
@@ -24,10 +32,9 @@ final class RUMFlagEvaluationReporterTests: XCTestCase {
2432
)
2533

2634
// Then
27-
let messages = featureScope.messagesSent()
28-
XCTAssertEqual(messages.count, 1, "Should send flag evaluation message")
35+
XCTAssertEqual(recorder.messages.count, 1, "Should send flag evaluation message")
2936

30-
let flagEvaluation = try XCTUnwrap(messages.firstPayload as? RUMFlagEvaluationMessage)
37+
let flagEvaluation = try XCTUnwrap(recorder.messages.first)
3138
XCTAssertEqual(flagEvaluation.flagKey, "feature-flag")
3239
XCTAssertEqual(flagEvaluation.value as? Bool, true)
3340
}

0 commit comments

Comments
 (0)