dawarich/spec/services/visits/merger_spec.rb

81 lines
2 KiB
Ruby
Raw Permalink Normal View History

2025-03-05 14:04:26 -05:00
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe Visits::Merger do
let(:user) { create(:user) }
let(:points) { double('Points') }
subject { described_class.new(points) }
describe '#merge_visits' do
let(:visit1) do
{
start_time: 2.hours.ago.to_i,
end_time: 1.hour.ago.to_i,
center_lat: 40.7128,
center_lon: -74.0060,
points: [double('Point1'), double('Point2')]
}
end
let(:visit2) do
{
start_time: 50.minutes.ago.to_i,
end_time: 40.minutes.ago.to_i,
center_lat: 40.7129,
center_lon: -74.0061,
points: [double('Point3'), double('Point4')]
}
end
let(:visit3) do
{
start_time: 30.minutes.ago.to_i,
end_time: 20.minutes.ago.to_i,
center_lat: 40.7500,
center_lon: -74.0500,
points: [double('Point5'), double('Point6')]
}
end
context 'when visits can be merged' do
let(:visits) { [visit1, visit2, visit3] }
before do
allow(subject).to receive(:can_merge_visits?).with(visit1, visit2).and_return(true)
allow(subject).to receive(:can_merge_visits?).with(anything, visit3).and_return(false)
end
it 'merges consecutive visits that meet criteria' do
merged = subject.merge_visits(visits)
expect(merged.size).to eq(2)
expect(merged.first[:points].size).to eq(4)
expect(merged.first[:end_time]).to eq(visit2[:end_time])
expect(merged.last).to eq(visit3)
end
end
context 'when visits cannot be merged' do
let(:visits) { [visit1, visit2, visit3] }
before do
allow(subject).to receive(:can_merge_visits?).and_return(false)
end
it 'keeps visits separate' do
merged = subject.merge_visits(visits)
expect(merged.size).to eq(3)
expect(merged).to eq(visits)
end
end
context 'with empty visits array' do
it 'returns an empty array' do
expect(subject.merge_visits([])).to eq([])
end
end
end
end