Files
space_game_server/game/spec/position_spec.rb
T

73 lines
2.1 KiB
Ruby

# frozen_string_literal: true
require './position'
RSpec.describe Position do
let(:even_pair) { [4, 6] } # 4+6 = 10 → even
let(:odd_pair) { [3, 4] } # 3+4 = 7 → odd
describe 'initialisation' do
context 'with two arguments' do
it 'stores the coordinates when the sum is even' do
pos = Position.new(*even_pair)
expect(pos.x_pos).to eq even_pair[0]
expect(pos.y_pos).to eq even_pair[1]
end
it 'raises ArgumentError when the sum is odd' do
expect { Position.new(*odd_pair) }
.to raise_error(ArgumentError, /must sum to an even number/)
end
end
context 'with three arguments' do
it 'raises NotImplementedError' do
expect { Position.new(1, 2, 3) }
.to raise_error(NotImplementedError, /positioning not implimented/)
end
end
context 'with an unsupported number of arguments' do
it 'raises ArgumentError when no arguments are supplied' do
expect { Position.new }
.to raise_error(ArgumentError, /requires two or three integer args/)
end
it 'raises ArgumentError when too many arguments are supplied' do
expect { Position.new(1, 2, 3, 4) }
.to raise_error(ArgumentError, /requires two or three integer args/)
end
end
end
describe '#two_d_cartesian' do
it 'returns the original (x, y) pair' do
pos = Position.new(*even_pair)
expect(pos.two_d_cartesian).to eq even_pair
end
end
describe '#two_d_hexagonal' do
it 'returns an array of nil values for a, b, c' do
pos = Position.new(*even_pair)
expect(pos.two_d_hexagonal).to eq [nil, nil, nil]
end
end
describe '#to_s' do
it 'puts out the coordinates' do
expect(Position.new(*even_pair).to_s).to eq '(4, 6)'
end
end
describe '#==' do
it 'returns false when the positions differ' do
expect(Position.new(*even_pair) == Position.new(6, 8)).to eq false
end
it 'returns true when the positions are the same' do
expect(Position.new(*even_pair) == Position.new(4, 6)).to eq true
end
end
end