Skip to content
This repository has been archived by the owner on Apr 26, 2023. It is now read-only.

Update slot opp detector, added support for new and old cores #53

Merged
merged 1 commit into from
Feb 4, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion PlayerCore
Original file line number Diff line number Diff line change
Expand Up @@ -8,26 +8,17 @@ extension Detectors {
var playbackInitiated = false
var sessionID: UUID?

func process(sessionID: UUID,
adPlaying: Bool,
adSkipped: Bool,
adFailed: Bool,
contentPlaying: Bool) -> Bool {
func process(sessionID: UUID, playbackStarted: Bool) -> Bool {
if self.sessionID != sessionID {
self.sessionID = sessionID
playbackInitiated = false
}

guard playbackInitiated == false else { return false }
switch (adSkipped, contentPlaying, adPlaying, adFailed) {
case (true, true, _, false),
(_, true, _, true),
(false, _, true, false):
playbackInitiated = true
return true

default: return false
}
guard playbackInitiated == false,
playbackStarted else { return false }

playbackInitiated = true
return true
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,97 +13,23 @@ class SlotOpportunityDetectorTests: XCTestCase {
sut = Detectors.SlotOpportunity()
}

override func tearDown() {
sut = nil

super.tearDown()
}

func testAdPlayingProcess() {
let id = UUID()
var result = sut.process(sessionID: id,
adPlaying: false,
adSkipped: false,
adFailed: false,
contentPlaying: false)
XCTAssertFalse(result)
result = sut.process(sessionID: id,
adPlaying: true,
adSkipped: false,
adFailed: false,
contentPlaying: false)
XCTAssertTrue(result)

result = sut.process(sessionID: id,
adPlaying: true,
adSkipped: false,
adFailed: false,
contentPlaying: false)
XCTAssertFalse(result)
}

func testAdSkipProcess() {
func testPlayingProcess() {
let id = UUID()
var result = sut.process(sessionID: id,
adPlaying: false,
adSkipped: true,
adFailed: false,
contentPlaying: false)
var result = sut.process(sessionID: id, playbackStarted: false)
XCTAssertFalse(result)

result = sut.process(sessionID: id,
adPlaying: false,
adSkipped: true,
adFailed: false,
contentPlaying: true)
result = sut.process(sessionID: id, playbackStarted: true)
XCTAssertTrue(result)

result = sut.process(sessionID: id,
adPlaying: false,
adSkipped: true,
adFailed: false,
contentPlaying: true)
result = sut.process(sessionID: id, playbackStarted: true)
XCTAssertFalse(result)
}

func testAdFailProcess() {
let id = UUID()
var result = sut.process(sessionID: id,
adPlaying: false,
adSkipped: false,
adFailed: true,
contentPlaying: false)
XCTAssertFalse(result)

result = sut.process(sessionID: id,
adPlaying: false,
adSkipped: false,
adFailed: true,
contentPlaying: true)
XCTAssertTrue(result)

result = sut.process(sessionID: id,
adPlaying: false,
adSkipped: false,
adFailed: true,
contentPlaying: true)
XCTAssertFalse(result)
}

func testSessionChnageProcess() {
let id = UUID()
_ = sut.process(sessionID: id,
adPlaying: true,
adSkipped: false,
adFailed: false,
contentPlaying: false)
func testSessionChanageProcess() {
_ = sut.process(sessionID: UUID(), playbackStarted: true)
XCTAssertTrue(sut.playbackInitiated)

_ = sut.process(sessionID: UUID(),
adPlaying: false,
adSkipped: false,
adFailed: false,
contentPlaying: false)
_ = sut.process(sessionID: UUID(), playbackStarted: false)
XCTAssertFalse(sut.playbackInitiated)
}
}
7 changes: 3 additions & 4 deletions sources/metrics/detectors/vrm/AdEngineRequestDetector.swift
Original file line number Diff line number Diff line change
Expand Up @@ -30,18 +30,17 @@ extension Detectors {
}

return scheduledItems
.filter { _, candidatesSet in
candidatesSet.isSubset(of: processedCandidates) == false
}.reduce(into: []) { result, pair in
.reduce(into: []) { result, pair in
return pair.value.forEach { candidate in
result.append(NormalizedScheduledItem(item: pair.key, candidate: candidate))
}
}.filter { normalized in
processedCandidates.contains(normalized.candidate) == false
}.compactMap { normalized in
processedCandidates.insert(normalized.candidate)
return Result(adInfo: .init(metaInfo: normalized.item.metaInfo), transactionId: transactionId)
}
}
}

}

13 changes: 13 additions & 0 deletions sources/metrics/detectors/vrm/AdEngineRequestDetectorTest.swift
Original file line number Diff line number Diff line change
Expand Up @@ -80,4 +80,17 @@ class AdEngineRequestDetectorTest: XCTestCase {
result = detector.process(transactionId: "", scheduledItems: queue)
XCTAssertTrue(result.isEmpty)
}

func testDetectNewCandidate() {
var candidates = Set([firstCandidate])
var queue: [VRMCore.Item: Set<ScheduledVRMItems.Candidate>] = [firstItem: candidates]
var result = detector.process(transactionId: "", scheduledItems: queue)
XCTAssertEqual(result.count, 1)

candidates.insert(secondCandidate)
queue[firstItem] = candidates

result = detector.process(transactionId: "", scheduledItems: queue)
XCTAssertEqual(result.count, 1)
}
}
Loading