diff --git a/app/services/find_not_expected_bibs.rb b/app/services/find_not_expected_bibs.rb index 29262d3f6..bdd383846 100644 --- a/app/services/find_not_expected_bibs.rb +++ b/app/services/find_not_expected_bibs.rb @@ -1,22 +1,22 @@ -require "ostruct" - class FindNotExpectedBibs include Interactors::Errors include SplitAnalyzable + Response = Struct.new(:errors, :bib_numbers, keyword_init: true) + def self.perform(event_group, split_name) new(event_group, split_name).perform end def initialize(event_group, split_name) @event_group = event_group - @parameterized_split_name = split_name.parameterize + @parameterized_split_name = split_name.to_s.parameterize @errors = [] validate_setup end def perform - OpenStruct.new(errors: errors, bib_numbers: bib_numbers) + Response.new(errors: errors, bib_numbers: bib_numbers) end private @@ -31,8 +31,8 @@ def bib_numbers end def validate_setup - unless parameterized_split_names.include?(parameterized_split_name) - errors << invalid_split_name_error(parameterized_split_name, parameterized_split_names) - end + return if parameterized_split_names.include?(parameterized_split_name) + + errors << invalid_split_name_error(parameterized_split_name, parameterized_split_names) end end diff --git a/spec/services/find_not_expected_bibs_spec.rb b/spec/services/find_not_expected_bibs_spec.rb new file mode 100644 index 000000000..3afd17815 --- /dev/null +++ b/spec/services/find_not_expected_bibs_spec.rb @@ -0,0 +1,35 @@ +require "rails_helper" + +RSpec.describe FindNotExpectedBibs do + subject { described_class.perform(event_group, split_name) } + + let(:event_group) { event_groups(:hardrock_2015) } + + context "when the split name is valid for the event group" do + let(:split_name) { "Sherman" } + + it "returns bib numbers without errors" do + expect(subject.errors).to be_empty + expect(subject.bib_numbers).to be_an(Array) + end + end + + context "when the split name is not found in the event group" do + let(:split_name) { "Nonexistent" } + + it "returns an invalid split name error" do + expect(subject.errors.first[:title]).to eq("Invalid split name") + expect(subject.bib_numbers).to eq([]) + end + end + + context "when the split name is nil" do + let(:split_name) { nil } + + it "returns an invalid split name error instead of raising" do + expect { subject }.not_to raise_error + expect(subject.errors.first[:title]).to eq("Invalid split name") + expect(subject.bib_numbers).to eq([]) + end + end +end