hackatime/test/services/heartbeat_import_service_test.rb
Mahad Kalam 667d3a7c93
WakaTime/Hackatime v1 imports + Settings v2 (#1062)
* Imports are back!!

* Settings UI v3

* Use Inertia forms for heartbeat imports

* Update app/javascript/pages/Users/Settings/Data.svelte

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Update Bundle

* Fix broken Form/Button markup in Data.svelte settings page

* Update JS deps

* Greptile fixes

* Remove dead code

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-03-12 21:27:10 +00:00

72 lines
2 KiB
Ruby

require "test_helper"
class HeartbeatImportServiceTest < ActiveSupport::TestCase
test "deduplicates imported heartbeats by fields hash" do
user = User.create!(timezone: "UTC")
file_content = {
heartbeats: [
{
entity: "/tmp/test.rb",
type: "file",
time: 1_700_000_000.0,
project: "hackatime",
language: "Ruby",
is_write: true
},
{
entity: "/tmp/test.rb",
type: "file",
time: 1_700_000_000.0,
project: "hackatime",
language: "Ruby",
is_write: true
}
]
}.to_json
result = HeartbeatImportService.import_from_file(file_content, user)
assert result[:success]
assert_equal 2, result[:total_count]
assert_equal 1, result[:imported_count]
assert_equal 1, result[:skipped_count]
assert_equal 1, user.heartbeats.count
end
test "imports heartbeats from wakatime data dump day groups" do
user = User.create!(timezone: "UTC")
file_content = {
range: { start: 1_727_905_169, end: 1_727_905_177 },
days: [
{
date: "2024-10-02",
heartbeats: [
{
entity: "/home/skyfall/tavern/manifest.json",
type: "file",
time: 1_727_905_177,
category: "coding",
project: "tavern",
language: "JSON",
editor: "vscode",
operating_system: "Linux",
machine_name_id: "skyfall-pc",
user_agent_id: "wakatime/v1.102.1",
is_write: true
}
]
}
]
}.to_json
result = HeartbeatImportService.import_from_file(file_content, user)
assert result[:success]
assert_equal 1, result[:total_count]
assert_equal 1, result[:imported_count]
heartbeat = user.heartbeats.order(:created_at).last
assert_equal "skyfall-pc", heartbeat.machine
assert_equal "wakatime/v1.102.1", heartbeat.user_agent
end
end