mirror of
https://github.com/Freika/dawarich.git
synced 2026-01-11 01:31:39 -05:00
117 lines
3.2 KiB
Ruby
117 lines
3.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'rails_helper'
|
|
|
|
RSpec.describe Maps::BoundsCalculator do
|
|
describe '.call' do
|
|
subject(:calculate_bounds) do
|
|
described_class.new(user:, start_date:, end_date:).call
|
|
end
|
|
|
|
let(:user) { create(:user) }
|
|
let(:start_date) { '2024-06-01T00:00:00Z' }
|
|
let(:end_date) { '2024-06-30T23:59:59Z' }
|
|
|
|
context 'with valid user and date range' do
|
|
before do
|
|
# Create test points within the date range
|
|
create(:point, user:, latitude: 40.6, longitude: -74.1,
|
|
timestamp: Time.new(2024, 6, 1, 12, 0).to_i)
|
|
create(:point, user:, latitude: 40.8, longitude: -73.9,
|
|
timestamp: Time.new(2024, 6, 30, 15, 0).to_i)
|
|
create(:point, user:, latitude: 40.7, longitude: -74.0,
|
|
timestamp: Time.new(2024, 6, 15, 10, 0).to_i)
|
|
end
|
|
|
|
it 'returns success with bounds data' do
|
|
expect(calculate_bounds).to match(
|
|
{
|
|
success: true,
|
|
data: {
|
|
min_lat: 40.6,
|
|
max_lat: 40.8,
|
|
min_lng: -74.1,
|
|
max_lng: -73.9,
|
|
point_count: 3
|
|
}
|
|
}
|
|
)
|
|
end
|
|
end
|
|
|
|
context 'with no points in date range' do
|
|
before do
|
|
# Create points outside the date range
|
|
create(:point, user:, latitude: 40.7, longitude: -74.0,
|
|
timestamp: Time.new(2024, 5, 15, 10, 0).to_i)
|
|
end
|
|
|
|
it 'returns failure with no data message' do
|
|
expect(calculate_bounds).to match(
|
|
{
|
|
success: false,
|
|
error: 'No data found for the specified date range',
|
|
point_count: 0
|
|
}
|
|
)
|
|
end
|
|
end
|
|
|
|
context 'with no user' do
|
|
let(:user) { nil }
|
|
|
|
it 'raises NoUserFoundError' do
|
|
expect { calculate_bounds }.to raise_error(
|
|
Maps::BoundsCalculator::NoUserFoundError,
|
|
'No user found'
|
|
)
|
|
end
|
|
end
|
|
|
|
context 'with no start date' do
|
|
let(:start_date) { nil }
|
|
|
|
it 'raises NoDateRangeError' do
|
|
expect { calculate_bounds }.to raise_error(
|
|
Maps::BoundsCalculator::NoDateRangeError,
|
|
'No date range specified'
|
|
)
|
|
end
|
|
end
|
|
|
|
context 'with no end date' do
|
|
let(:end_date) { nil }
|
|
|
|
it 'raises NoDateRangeError' do
|
|
expect { calculate_bounds }.to raise_error(
|
|
Maps::BoundsCalculator::NoDateRangeError,
|
|
'No date range specified'
|
|
)
|
|
end
|
|
end
|
|
|
|
context 'with invalid date parsing' do
|
|
let(:start_date) { 'invalid-date' }
|
|
|
|
it 'raises ArgumentError for invalid dates' do
|
|
expect { calculate_bounds }.to raise_error(ArgumentError, 'Invalid date format: invalid-date')
|
|
end
|
|
end
|
|
|
|
context 'with timestamp format dates' do
|
|
let(:start_date) { 1_717_200_000 }
|
|
let(:end_date) { 1_719_791_999 }
|
|
|
|
before do
|
|
create(:point, user:, latitude: 41.0, longitude: -74.5,
|
|
timestamp: Time.new(2024, 6, 5, 9, 0).to_i)
|
|
end
|
|
|
|
it 'handles timestamp format correctly' do
|
|
result = calculate_bounds
|
|
expect(result[:success]).to be true
|
|
expect(result[:data][:point_count]).to eq(1)
|
|
end
|
|
end
|
|
end
|
|
end
|