dawarich/spec/services/maps/hexagon_center_manager_spec.rb

78 lines
2.5 KiB
Ruby
Raw Normal View History

2025-09-16 14:41:53 -04:00
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe Maps::HexagonCenterManager do
describe '.call' do
2025-09-18 16:23:47 -04:00
subject(:manage_centers) { described_class.new(stat:, user:).call }
2025-09-16 14:41:53 -04:00
let(:user) { create(:user) }
let(:target_user) { user }
context 'with pre-calculated hexagon centers' do
let(:pre_calculated_centers) do
2025-09-20 08:25:16 -04:00
[
['8a1fb46622dffff', 5, 1_717_200_000, 1_717_203_600], # h3_index, count, earliest, latest timestamps
['8a1fb46622e7fff', 3, 1_717_210_000, 1_717_213_600],
['8a1fb46632dffff', 8, 1_717_220_000, 1_717_223_600]
]
2025-09-16 14:41:53 -04:00
end
2025-09-19 13:55:27 -04:00
let(:stat) { create(:stat, user:, year: 2024, month: 6, h3_hex_ids: pre_calculated_centers) }
2025-09-16 14:41:53 -04:00
it 'returns success with pre-calculated data' do
result = manage_centers
expect(result[:success]).to be true
expect(result[:pre_calculated]).to be true
expect(result[:data]['type']).to eq('FeatureCollection')
expect(result[:data]['features'].length).to eq(3)
expect(result[:data]['metadata']['pre_calculated']).to be true
expect(result[:data]['metadata']['count']).to eq(3)
expect(result[:data]['metadata']['user_id']).to eq(target_user.id)
end
it 'generates proper hexagon features from centers' do
result = manage_centers
features = result[:data]['features']
features.each_with_index do |feature, index|
expect(feature['type']).to eq('Feature')
expect(feature['id']).to eq(index + 1)
expect(feature['geometry']['type']).to eq('Polygon')
expect(feature['geometry']['coordinates'].first.length).to eq(7) # 6 vertices + closing
properties = feature['properties']
expect(properties['hex_id']).to eq(index + 1)
expect(properties['earliest_point']).to be_present
expect(properties['latest_point']).to be_present
end
end
end
context 'with no stat' do
let(:stat) { nil }
it 'returns nil' do
expect(manage_centers).to be_nil
end
end
context 'with stat but no hexagon_centers' do
2025-09-19 13:55:27 -04:00
let(:stat) { create(:stat, user:, year: 2024, month: 6, h3_hex_ids: nil) }
2025-09-16 14:41:53 -04:00
it 'returns nil' do
expect(manage_centers).to be_nil
end
end
context 'with empty hexagon_centers' do
2025-09-20 08:25:16 -04:00
let(:stat) { create(:stat, user:, year: 2024, month: 6, h3_hex_ids: []) }
2025-09-16 14:41:53 -04:00
it 'returns nil' do
expect(manage_centers).to be_nil
end
end
end
end