Skip to content

Commit

Permalink
add test case
Browse files Browse the repository at this point in the history
  • Loading branch information
ganeshnj committed Sep 30, 2024
1 parent 988a354 commit 071fdd3
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 0 deletions.
55 changes: 55 additions & 0 deletions DatadogCore/Tests/Datadog/DatadogCore/DatadogCoreTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,61 @@ class DatadogCoreTests: XCTestCase {
XCTAssertEqual(requestBuilderSpy.requestParameters.count, 1, "It should send only one request")
}

func testWhenWritingEventsWithPendingConsentThenGranted_itUploadsAllEvents() throws {
// Given
let core = DatadogCore(
directory: temporaryCoreDirectory,
dateProvider: SystemDateProvider(),
initialConsent: .mockRandom(),
performance: .init(batchSize: .large, uploadFrequency: .frequent, bundleType: .iOSApp),
httpClient: HTTPClientMock(),
encryption: nil,
contextProvider: .mockAny(),
applicationVersion: .mockAny(),
maxBatchesPerUpload: .mockRandom(min: 1, max: 100),
backgroundTasksEnabled: .mockAny()
)

let requestBuilderSpy = FeatureRequestBuilderSpy()
try core.register(feature: FeatureMock(requestBuilder: requestBuilderSpy))
let scope = core.scope(for: FeatureMock.self)

// When
core.set(trackingConsent: .notGranted)
scope.eventWriteContext(bypassConsent: true) { context, writer in
writer.write(value: FeatureMock.Event(event: "not granted"))
}

core.set(trackingConsent: .granted)
scope.eventWriteContext(bypassConsent: true) { context, writer in
writer.write(value: FeatureMock.Event(event: "granted"))
}

// wait for 10 seconds asynchronously to make sure events are flushed and sent
// we don't want to manually flush because that's not how the SDK is used in production
waitForEvents(requestBuilder: requestBuilderSpy)

let uploadedEvents = requestBuilderSpy.requestParameters
.flatMap { $0.events }
.map { $0.data.utf8String }

XCTAssertEqual(
uploadedEvents,
[
#"{"event":"not granted"}"#,
#"{"event":"granted"}"#
],
"It should upload all events"
)
XCTAssertEqual(requestBuilderSpy.requestParameters.count, 1, "It should send only one request")
}

private func waitForEvents(requestBuilder: FeatureRequestBuilderSpy) {
while requestBuilder.requestParameters.isEmpty {
Thread.sleep(forTimeInterval: .fromMilliseconds(1))
}
}

func testWhenFeatureBaggageIsUpdated_thenNewValueIsImmediatellyAvailable() throws {
// Given
let core = DatadogCore(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ internal class FeatureRequestBuilderMock: FeatureRequestBuilder {

internal class FeatureRequestBuilderSpy: FeatureRequestBuilder {
/// Records parameters passed to `requet(for:with:)`
@ReadWriteLock
private(set) var requestParameters: [(events: [Event], context: DatadogContext)] = []

func request(
Expand Down

0 comments on commit 071fdd3

Please sign in to comment.