mirror of
https://github.com/Freika/dawarich.git
synced 2026-01-11 09:41:40 -05:00
Fix tracks create job spec
This commit is contained in:
parent
91f4cf7c7a
commit
dc8460a948
3 changed files with 52 additions and 23 deletions
|
|
@ -5,26 +5,21 @@ class Tracks::CreateJob < ApplicationJob
|
||||||
|
|
||||||
def perform(user_id, start_at: nil, end_at: nil, mode: :daily)
|
def perform(user_id, start_at: nil, end_at: nil, mode: :daily)
|
||||||
user = User.find(user_id)
|
user = User.find(user_id)
|
||||||
|
|
||||||
# Translate mode parameter to Generator mode
|
# Translate mode parameter to Generator mode
|
||||||
generator_mode = case mode
|
generator_mode = case mode
|
||||||
when :daily then :daily
|
when :daily then :daily
|
||||||
when :none then :incremental
|
when :none then :incremental
|
||||||
else :bulk
|
else :bulk
|
||||||
end
|
end
|
||||||
|
|
||||||
# Count tracks before generation
|
# Generate tracks and get the count of tracks created
|
||||||
tracks_before = user.tracks.count
|
tracks_created = Tracks::Generator.new(
|
||||||
|
|
||||||
Tracks::Generator.new(
|
|
||||||
user,
|
user,
|
||||||
start_at: start_at,
|
start_at: start_at,
|
||||||
end_at: end_at,
|
end_at: end_at,
|
||||||
mode: generator_mode
|
mode: generator_mode
|
||||||
).call
|
).call
|
||||||
|
|
||||||
# Calculate tracks created
|
|
||||||
tracks_created = user.tracks.count - tracks_before
|
|
||||||
|
|
||||||
create_success_notification(user, tracks_created)
|
create_success_notification(user, tracks_created)
|
||||||
rescue StandardError => e
|
rescue StandardError => e
|
||||||
|
|
|
||||||
|
|
@ -42,14 +42,19 @@ class Tracks::Generator
|
||||||
|
|
||||||
points = load_points
|
points = load_points
|
||||||
Rails.logger.debug "Generator: loaded #{points.size} points for user #{user.id} in #{mode} mode"
|
Rails.logger.debug "Generator: loaded #{points.size} points for user #{user.id} in #{mode} mode"
|
||||||
return if points.empty?
|
return 0 if points.empty?
|
||||||
|
|
||||||
segments = split_points_into_segments(points)
|
segments = split_points_into_segments(points)
|
||||||
Rails.logger.debug "Generator: created #{segments.size} segments"
|
Rails.logger.debug "Generator: created #{segments.size} segments"
|
||||||
|
|
||||||
segments.each { |segment| create_track_from_segment(segment) }
|
tracks_created = 0
|
||||||
|
segments.each do |segment|
|
||||||
|
track = create_track_from_segment(segment)
|
||||||
|
tracks_created += 1 if track
|
||||||
|
end
|
||||||
|
|
||||||
Rails.logger.info "Generated #{segments.size} tracks for user #{user.id} in #{mode} mode"
|
Rails.logger.info "Generated #{tracks_created} tracks for user #{user.id} in #{mode} mode"
|
||||||
|
tracks_created
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
|
||||||
|
|
@ -17,11 +17,9 @@ RSpec.describe Tracks::CreateJob, type: :job do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'calls the generator and creates a notification' do
|
it 'calls the generator and creates a notification' do
|
||||||
# Mock the generator to actually create tracks
|
# Mock the generator to return the count of tracks created
|
||||||
allow(generator_instance).to receive(:call) do
|
allow(generator_instance).to receive(:call).and_return(2)
|
||||||
create_list(:track, 2, user: user)
|
|
||||||
end
|
|
||||||
|
|
||||||
described_class.new.perform(user.id)
|
described_class.new.perform(user.id)
|
||||||
|
|
||||||
expect(Tracks::Generator).to have_received(:new).with(
|
expect(Tracks::Generator).to have_received(:new).with(
|
||||||
|
|
@ -53,12 +51,9 @@ RSpec.describe Tracks::CreateJob, type: :job do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'passes custom parameters to the generator' do
|
it 'passes custom parameters to the generator' do
|
||||||
# Create some existing tracks and mock generator to create 1 more
|
# Mock generator to return the count of tracks created
|
||||||
create_list(:track, 5, user: user)
|
allow(generator_instance).to receive(:call).and_return(1)
|
||||||
allow(generator_instance).to receive(:call) do
|
|
||||||
create(:track, user: user)
|
|
||||||
end
|
|
||||||
|
|
||||||
described_class.new.perform(user.id, start_at: start_at, end_at: end_at, mode: mode)
|
described_class.new.perform(user.id, start_at: start_at, end_at: end_at, mode: mode)
|
||||||
|
|
||||||
expect(Tracks::Generator).to have_received(:new).with(
|
expect(Tracks::Generator).to have_received(:new).with(
|
||||||
|
|
@ -87,6 +82,8 @@ RSpec.describe Tracks::CreateJob, type: :job do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'translates :none to :incremental' do
|
it 'translates :none to :incremental' do
|
||||||
|
allow(generator_instance).to receive(:call).and_return(0)
|
||||||
|
|
||||||
described_class.new.perform(user.id, mode: :none)
|
described_class.new.perform(user.id, mode: :none)
|
||||||
|
|
||||||
expect(Tracks::Generator).to have_received(:new).with(
|
expect(Tracks::Generator).to have_received(:new).with(
|
||||||
|
|
@ -104,6 +101,8 @@ RSpec.describe Tracks::CreateJob, type: :job do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'translates :daily to :daily' do
|
it 'translates :daily to :daily' do
|
||||||
|
allow(generator_instance).to receive(:call).and_return(0)
|
||||||
|
|
||||||
described_class.new.perform(user.id, mode: :daily)
|
described_class.new.perform(user.id, mode: :daily)
|
||||||
|
|
||||||
expect(Tracks::Generator).to have_received(:new).with(
|
expect(Tracks::Generator).to have_received(:new).with(
|
||||||
|
|
@ -121,6 +120,8 @@ RSpec.describe Tracks::CreateJob, type: :job do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'translates other modes to :bulk' do
|
it 'translates other modes to :bulk' do
|
||||||
|
allow(generator_instance).to receive(:call).and_return(0)
|
||||||
|
|
||||||
described_class.new.perform(user.id, mode: :replace)
|
described_class.new.perform(user.id, mode: :replace)
|
||||||
|
|
||||||
expect(Tracks::Generator).to have_received(:new).with(
|
expect(Tracks::Generator).to have_received(:new).with(
|
||||||
|
|
@ -185,6 +186,34 @@ RSpec.describe Tracks::CreateJob, type: :job do
|
||||||
expect(ExceptionReporter).to have_received(:call)
|
expect(ExceptionReporter).to have_received(:call)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'when tracks are deleted and recreated' do
|
||||||
|
it 'returns the correct count of newly created tracks' do
|
||||||
|
# Create some existing tracks first
|
||||||
|
create_list(:track, 3, user: user)
|
||||||
|
|
||||||
|
# Mock the generator to simulate deleting existing tracks and creating new ones
|
||||||
|
# This should return the count of newly created tracks, not the difference
|
||||||
|
allow(generator_instance).to receive(:call).and_return(2)
|
||||||
|
|
||||||
|
described_class.new.perform(user.id, mode: :bulk)
|
||||||
|
|
||||||
|
expect(Tracks::Generator).to have_received(:new).with(
|
||||||
|
user,
|
||||||
|
start_at: nil,
|
||||||
|
end_at: nil,
|
||||||
|
mode: :bulk
|
||||||
|
)
|
||||||
|
expect(generator_instance).to have_received(:call)
|
||||||
|
expect(Notifications::Create).to have_received(:new).with(
|
||||||
|
user: user,
|
||||||
|
kind: :info,
|
||||||
|
title: 'Tracks Generated',
|
||||||
|
content: 'Created 2 tracks from your location data. Check your tracks section to view them.'
|
||||||
|
)
|
||||||
|
expect(notification_service).to have_received(:call)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'queue' do
|
describe 'queue' do
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue