Detect a LiveTrack session ending the moment Garmin confirms it, not 30min later
Watched the session from the last two commits actually get saved: Garmin updated its `end` field from the future 24h placeholder to within a second of the last point's own time, immediately — much faster than the recency-of-last-point fallback alone would have noticed (that only flips after ACTIVE_WITHIN with no new points, so a just-saved session with a last point seconds old would still read as active for up to 30 more minutes). Now checks end-already-in-the-past first (authoritative and near instant when Garmin has set it), falling back to point recency only when end still shows the future placeholder — the case an abandoned, never-saved session never updates.
This commit is contained in:
1 parent
3106f8c103
commit
b0c93d10d7
2 files changed
+41
-13
No files matched your search
@@ -71,6 +71,22 @@ class LiveTrackClientTest < Minitest::Test
|
||||
assert Maptool::LiveTrackClient.summarize(result)["active"]
|
||||
end
|
||||
|
||||
# Verified live the same day: Garmin updates a real session's `end` from
|
||||
# the future placeholder to within a second of the last point's own
|
||||
# time immediately once the activity is saved on the watch — so a fresh
|
||||
# last point alone isn't enough, `end` already being in the past has to
|
||||
# win even then.
|
||||
def test_summarize_marks_inactive_once_end_is_in_the_past_even_with_a_fresh_point
|
||||
payloads = @client.send(:parse_payloads, FAKE_PAGE)
|
||||
points = @client.send(:clean, @client.send(:search, payloads) { |n| n["trackPoints"] if n["trackPoints"].is_a?(Array) })
|
||||
points[-1] = points[-1].merge("dateTime" => Time.now.utc.iso8601)
|
||||
session = @client.send(:clean, @client.send(:search, payloads) { |n| n if n["sessionName"] })
|
||||
.merge("end" => (Time.now.utc - 1).iso8601)
|
||||
result = Maptool::LiveTrackClient::Result.new(points: points, session: session)
|
||||
|
||||
refute Maptool::LiveTrackClient.summarize(result)["active"]
|
||||
end
|
||||
|
||||
def test_finds_the_planned_course_alongside_the_actual_track
|
||||
payloads = @client.send(:parse_payloads, FAKE_PAGE)
|
||||
course = @client.send(:clean, @client.send(:search, payloads) { |n| n["courses"].first if n["courses"].is_a?(Array) && !n["courses"].empty? })
|
||||
|
||||
Reference in new issue
Block a user