mirror of
https://github.com/Freika/dawarich.git
synced 2026-01-12 10:11:38 -05:00
126 lines
3.2 KiB
Ruby
126 lines
3.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'rails_helper'
|
|
|
|
RSpec.describe Visits::Names::Builder do
|
|
describe '.build_from_properties' do
|
|
it 'builds a name from all available properties' do
|
|
properties = {
|
|
'name' => 'Coffee Shop',
|
|
'street' => 'Main St',
|
|
'housenumber' => '123',
|
|
'city' => 'New York',
|
|
'state' => 'NY'
|
|
}
|
|
|
|
result = described_class.build_from_properties(properties)
|
|
expect(result).to eq('Coffee Shop, Main St, 123, New York, NY')
|
|
end
|
|
|
|
it 'handles missing properties' do
|
|
properties = {
|
|
'name' => 'Coffee Shop',
|
|
'city' => 'New York',
|
|
'state' => 'NY'
|
|
}
|
|
|
|
result = described_class.build_from_properties(properties)
|
|
expect(result).to eq('Coffee Shop, New York, NY')
|
|
end
|
|
|
|
it 'deduplicates components' do
|
|
properties = {
|
|
'name' => 'New York Cafe',
|
|
'city' => 'New York',
|
|
'state' => 'NY'
|
|
}
|
|
|
|
result = described_class.build_from_properties(properties)
|
|
expect(result).to eq('New York Cafe, New York, NY')
|
|
end
|
|
|
|
it 'returns nil for empty properties' do
|
|
result = described_class.build_from_properties({})
|
|
expect(result).to be_nil
|
|
end
|
|
|
|
it 'returns nil for nil properties' do
|
|
result = described_class.build_from_properties(nil)
|
|
expect(result).to be_nil
|
|
end
|
|
end
|
|
|
|
describe '#call' do
|
|
subject { described_class.new(features, feature_type, name).call }
|
|
|
|
let(:feature_type) { 'amenity' }
|
|
let(:name) { 'Coffee Shop' }
|
|
let(:features) do
|
|
[
|
|
{
|
|
'properties' => {
|
|
'type' => 'amenity',
|
|
'name' => 'Coffee Shop',
|
|
'street' => '123 Main St',
|
|
'city' => 'San Francisco',
|
|
'state' => 'CA'
|
|
}
|
|
},
|
|
{
|
|
'properties' => {
|
|
'type' => 'park',
|
|
'name' => 'Central Park',
|
|
'city' => 'New York',
|
|
'state' => 'NY'
|
|
}
|
|
}
|
|
]
|
|
end
|
|
|
|
it 'returns a descriptive name with all available components' do
|
|
expect(subject).to eq('Coffee Shop, 123 Main St, San Francisco, CA')
|
|
end
|
|
|
|
context 'when feature uses osm_value instead of type' do
|
|
let(:features) do
|
|
[
|
|
{
|
|
'properties' => {
|
|
'osm_value' => 'amenity',
|
|
'name' => 'Coffee Shop',
|
|
'street' => '123 Main St',
|
|
'city' => 'San Francisco',
|
|
'state' => 'CA'
|
|
}
|
|
}
|
|
]
|
|
end
|
|
|
|
it 'finds the feature using osm_value' do
|
|
expect(subject).to eq('Coffee Shop, 123 Main St, San Francisco, CA')
|
|
end
|
|
end
|
|
|
|
context 'when no matching feature is found' do
|
|
let(:name) { 'Non-existent Shop' }
|
|
|
|
it 'returns nil' do
|
|
expect(subject).to be_nil
|
|
end
|
|
end
|
|
|
|
context 'with empty inputs' do
|
|
it 'returns nil for empty features' do
|
|
expect(described_class.new([], feature_type, name).call).to be_nil
|
|
end
|
|
|
|
it 'returns nil for blank feature_type' do
|
|
expect(described_class.new(features, '', name).call).to be_nil
|
|
end
|
|
|
|
it 'returns nil for blank name' do
|
|
expect(described_class.new(features, feature_type, '').call).to be_nil
|
|
end
|
|
end
|
|
end
|
|
end
|