require 'rails_helper' module Tables RSpec.describe WheelSwap do context "when the solution has three tables" do let(:initial_solution) do Distribution.new(min_per_table: 3, max_per_table: 3).tap do |distribution| distribution.tables << Set[:a, :b, :c].to_table distribution.tables << Set[:d, :e, :f].to_table distribution.tables << Set[:g, :h, :i].to_table end end it "swaps a random guest from each table with a guest from another table", :aggregate_failures do result = described_class.new(initial_solution).call expect(result.tables.size).to eq(3) expect(result.tables.map(&:size)).to all(eq(3)) expect(result.tables).not_to include(initial_solution.tables[0]) expect(result.tables).not_to include(initial_solution.tables[1]) expect(result.tables).not_to include(initial_solution.tables[2]) expect(result.tables.map(&:to_a).flatten).to contain_exactly(*(:a..:i).to_a) end end end end