import { render } from '@testing-library/react' import { describe, it, expect } from 'vitest' import { RoutingLinksView } from './RoutingLinksView' import type { Item } from '#types/Item' const itemWithPosition: Item = { id: '1', name: 'Test Location', position: { type: 'Point', coordinates: [9.667615, 50.588632], // longitude, latitude format }, } const itemWithoutPosition: Item = { id: '2', name: 'Test Item Without Position', } const itemWithNullPosition: Item = { id: '3', name: 'Test Item With Null Position', position: null, } describe('', () => { describe('when item has position coordinates', () => { it('renders routing service links', () => { const wrapper = render() expect(wrapper.getByText('Get Directions')).toBeInTheDocument() expect(wrapper.getByText('Google Maps')).toBeInTheDocument() expect(wrapper.getByText('Apple Maps')).toBeInTheDocument() expect(wrapper.getByText('OpenStreetMap')).toBeInTheDocument() }) it('generates correct Google Maps URL', () => { const wrapper = render() const googleMapsLink = wrapper.getByText('Google Maps').closest('a') expect(googleMapsLink).toHaveAttribute( 'href', 'https://www.google.com/maps/dir/?api=1&destination=50.588632,9.667615', ) }) it('generates correct Apple Maps URL', () => { const wrapper = render() const appleMapsLink = wrapper.getByText('Apple Maps').closest('a') expect(appleMapsLink).toHaveAttribute( 'href', 'https://maps.apple.com/?daddr=50.588632,9.667615', ) }) it('generates correct OpenStreetMap URL', () => { const wrapper = render() const osmLink = wrapper.getByText('OpenStreetMap').closest('a') expect(osmLink).toHaveAttribute( 'href', 'https://www.openstreetmap.org/directions?to=50.588632,9.667615', ) }) it('opens links in new tab', () => { const wrapper = render() const links = wrapper.container.querySelectorAll('a') links.forEach((link) => { expect(link).toHaveAttribute('target', '_blank') expect(link).toHaveAttribute('rel', 'noopener noreferrer') }) }) }) describe('when item does not have position', () => { it('does not render anything', () => { const wrapper = render() expect(wrapper.container.firstChild).toBeNull() }) }) describe('when item has null position', () => { it('does not render anything', () => { const wrapper = render() expect(wrapper.container.firstChild).toBeNull() }) }) })