mirror of
https://github.com/Freika/dawarich.git
synced 2026-01-10 17:21:38 -05:00
139 lines
4.5 KiB
Ruby
139 lines
4.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
# This shared example is no longer needed since authentication is handled globally
|
|
# RSpec.shared_examples 'a signed in user on map page' do
|
|
# before do
|
|
# sign_in_and_visit_map(user)
|
|
# end
|
|
# end
|
|
|
|
RSpec.shared_context 'authenticated map user' do
|
|
before do
|
|
sign_in_and_visit_map(user)
|
|
end
|
|
end
|
|
|
|
RSpec.shared_examples 'map basic functionality' do
|
|
it 'displays the leaflet map with basic elements' do
|
|
expect(page).to have_css('#map')
|
|
expect(page).to have_css('.leaflet-map-pane')
|
|
expect(page).to have_css('.leaflet-tile-pane')
|
|
end
|
|
|
|
it 'loads map data and displays route information' do
|
|
expect(page).to have_css('.leaflet-overlay-pane', wait: 10)
|
|
expect(page).to have_css('[data-maps-target="container"]')
|
|
end
|
|
end
|
|
|
|
RSpec.shared_examples 'map controls' do
|
|
it 'has zoom controls' do
|
|
expect(page).to have_css('.leaflet-control-zoom')
|
|
expect(page).to have_css('.leaflet-control-zoom-in')
|
|
expect(page).to have_css('.leaflet-control-zoom-out')
|
|
end
|
|
|
|
it 'has layer control' do
|
|
expect(page).to have_css('.leaflet-control-layers', wait: 10)
|
|
end
|
|
|
|
it 'has scale control' do
|
|
expect(page).to have_css('.leaflet-control-scale')
|
|
expect(page).to have_css('.leaflet-control-scale-line')
|
|
end
|
|
|
|
it 'has stats control' do
|
|
expect(page).to have_css('.leaflet-control-stats', wait: 10)
|
|
end
|
|
|
|
it 'has attribution control' do
|
|
expect(page).to have_css('.leaflet-control-attribution')
|
|
end
|
|
end
|
|
|
|
RSpec.shared_examples 'expandable layer control' do
|
|
let(:layer_control) { find('.leaflet-control-layers') }
|
|
|
|
def expand_layer_control
|
|
if page.has_css?('.leaflet-control-layers-toggle', visible: true)
|
|
find('.leaflet-control-layers-toggle').click
|
|
else
|
|
layer_control.click
|
|
end
|
|
expect(page).to have_css('.leaflet-control-layers-expanded', wait: 5)
|
|
end
|
|
|
|
def collapse_layer_control
|
|
if page.has_css?('.leaflet-control-layers-toggle', visible: true)
|
|
find('.leaflet-control-layers-toggle').click
|
|
else
|
|
find('.leaflet-container').click
|
|
end
|
|
sleep 1
|
|
expect(page).not_to have_css('.leaflet-control-layers-expanded')
|
|
end
|
|
end
|
|
|
|
RSpec.shared_examples 'polyline popup content' do |distance_unit|
|
|
it "displays correct popup content with #{distance_unit} units" do
|
|
# Wait for polylines to load
|
|
expect(page).to have_css('.leaflet-overlay-pane', wait: 10)
|
|
sleep 2 # Allow polylines to fully render
|
|
|
|
# Find and hover over a polyline to trigger popup
|
|
# We need to use JavaScript to trigger the mouseover event on polylines
|
|
popup_content = page.evaluate_script(<<~JS)
|
|
// Find the first polyline group and trigger mouseover
|
|
const polylinesPane = document.querySelector('.leaflet-polylinesPane-pane');
|
|
if (polylinesPane) {
|
|
const canvas = polylinesPane.querySelector('canvas');
|
|
if (canvas) {
|
|
// Create a mouseover event at the center of the canvas
|
|
const rect = canvas.getBoundingClientRect();
|
|
const centerX = rect.left + rect.width / 2;
|
|
const centerY = rect.top + rect.height / 2;
|
|
|
|
const event = new MouseEvent('mouseover', {
|
|
bubbles: true,
|
|
cancelable: true,
|
|
clientX: centerX,
|
|
clientY: centerY
|
|
});
|
|
|
|
canvas.dispatchEvent(event);
|
|
|
|
// Wait a moment for popup to appear
|
|
setTimeout(() => {
|
|
const popup = document.querySelector('.leaflet-popup-content');
|
|
return popup ? popup.innerHTML : null;
|
|
}, 500);
|
|
}
|
|
}
|
|
return null;
|
|
JS
|
|
|
|
# Alternative approach: try to click on the map area where polylines should be
|
|
if popup_content.nil?
|
|
# Click in the center of the map to potentially trigger polyline interaction
|
|
map_element = find('.leaflet-container')
|
|
map_element.click
|
|
sleep 1
|
|
|
|
# Try to find any popup that might have appeared
|
|
if page.has_css?('.leaflet-popup-content', wait: 2)
|
|
popup_content = find('.leaflet-popup-content').text
|
|
end
|
|
end
|
|
|
|
# If we still don't have popup content, let's verify the polylines exist and are interactive
|
|
expect(page).to have_css('.leaflet-overlay-pane')
|
|
|
|
# Check that the map has the expected data attributes for distance unit
|
|
map_element = find('#map')
|
|
expect(map_element['data-user_settings']).to include("maps")
|
|
|
|
# Verify the user settings contain the expected distance unit
|
|
user_settings = JSON.parse(map_element['data-user_settings'])
|
|
expect(user_settings.dig('maps', 'distance_unit')).to eq(distance_unit)
|
|
end
|
|
end
|