diff --git a/app/interactors/save_tournament_to_database.rb b/app/interactors/save_tournament_to_database.rb new file mode 100644 index 0000000..40acf12 --- /dev/null +++ b/app/interactors/save_tournament_to_database.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +class SaveTournamentToDatabase + include Interactor + + def call + if context.tournament.save + nil + else + context.fail! + end + end +end diff --git a/spec/interactors/save_tournament_to_database_interactor_spec.rb b/spec/interactors/save_tournament_to_database_interactor_spec.rb new file mode 100644 index 0000000..b10bba5 --- /dev/null +++ b/spec/interactors/save_tournament_to_database_interactor_spec.rb @@ -0,0 +1,40 @@ +# frozen_string_literal: true + +RSpec.describe SaveTournamentToDatabase do + before do + @tournament = create(:tournament) + end + + context 'save succeeds' do + let(:context) do + SaveTournamentToDatabase.call(tournament: @tournament) + end + before do + expect_any_instance_of(Tournament) + .to receive(:save).and_return(true) + end + + it 'succeeds' do + expect(context).to be_a_success + end + + it 'provides the tournament' do + expect(context.tournament).to eq(@tournament) + end + end + + context 'save fails' do + let(:context) do + SaveTournamentToDatabase.call(tournament: @tournament) + end + before do + expect_any_instance_of(Tournament) + .to receive(:save).and_return(false) + end + + it 'fails' do + test = context.failure? + expect(test).to eq(true) + end + end +end