|
| 1 | +# frozen_string_literal: true |
| 2 | + |
| 3 | +require_relative '../../app/models/coffee_shop' |
| 4 | + |
| 5 | +RSpec.describe CoffeeShop do |
| 6 | + describe '#initialize' do |
| 7 | + it 'creates a valid coffee shop' do |
| 8 | + shop = CoffeeShop.new('Test Shop', 45.0, -122.0) |
| 9 | + |
| 10 | + expect(shop.name).to eq('Test Shop') |
| 11 | + expect(shop.latitude).to eq(45.0) |
| 12 | + expect(shop.longitude).to eq(-122.0) |
| 13 | + end |
| 14 | + |
| 15 | + it 'raises error for invalid coordinates' do |
| 16 | + expect { CoffeeShop.new('Test', 100.0, 0) }.to raise_error(CoffeeShop::InvalidCoordinatesError) |
| 17 | + expect { CoffeeShop.new('Test', 0, 200.0) }.to raise_error(CoffeeShop::InvalidCoordinatesError) |
| 18 | + end |
| 19 | + |
| 20 | + it 'raises error for empty name' do |
| 21 | + expect { CoffeeShop.new('', 0, 0) }.to raise_error(ArgumentError) |
| 22 | + end |
| 23 | + end |
| 24 | + |
| 25 | + describe '#distance_to' do |
| 26 | + let(:shop) { CoffeeShop.new('Test', 0.0, 0.0) } |
| 27 | + |
| 28 | + it 'calculates distance correctly' do |
| 29 | + expect(shop.distance_to(3.0, 4.0)).to eq(5.0) |
| 30 | + expect(shop.distance_to(1.0, 1.0)).to eq(1.4142) |
| 31 | + end |
| 32 | + |
| 33 | + it 'raises error for invalid user coordinates' do |
| 34 | + expect { shop.distance_to(95.0, 0) }.to raise_error(CoffeeShop::InvalidCoordinatesError) |
| 35 | + end |
| 36 | + end |
| 37 | +end |
0 commit comments