From 2dd11bb83dae12cc7e3ed261a3ecf9ac29c60720 Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Thu, 1 Aug 2024 20:45:01 +0200 Subject: [PATCH] Initial tests for the swap class --- app/services/tables/distribution.rb | 1 + spec/services/tables/swap_spec.rb | 33 +++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 spec/services/tables/swap_spec.rb diff --git a/app/services/tables/distribution.rb b/app/services/tables/distribution.rb index d10d73f..42924c2 100644 --- a/app/services/tables/distribution.rb +++ b/app/services/tables/distribution.rb @@ -7,6 +7,7 @@ module Tables def initialize(min_per_table:, max_per_table:) @min_per_table = min_per_table @max_per_table = max_per_table + @tables = [] end def random_distribution(people) diff --git a/spec/services/tables/swap_spec.rb b/spec/services/tables/swap_spec.rb new file mode 100644 index 0000000..bd246e2 --- /dev/null +++ b/spec/services/tables/swap_spec.rb @@ -0,0 +1,33 @@ +require 'rails_helper' + +module Tables + RSpec.describe Swap do + describe '#each' do + let(:initial_solution) do + Distribution.new(min_per_table: 2, max_per_table: 2).tap do |distribution| + distribution.tables << %i[a b] + distribution.tables << %i[c d] + end + end + + let(:swaps) do + acc = [] + described_class.new(initial_solution).each do |solution| + acc << solution.tables.map(&:dup) + end + acc + end + + it 'yields all possible swaps' do + expect(swaps.count).to eq(4) + end + + it 'swaps the people' do + expect(swaps).to include([%i[a d], %i[c b]]) + expect(swaps).to include([%i[b c], %i[d a]]) + expect(swaps).to include([%i[a c], %i[d b]]) + expect(swaps).to include([%i[b d], %i[c a]]) + end + end + end +end