diff --git a/src/api/app/models/bs_request.rb b/src/api/app/models/bs_request.rb index ac91e5e4f5d..b9e1546d3bc 100644 --- a/src/api/app/models/bs_request.rb +++ b/src/api/app/models/bs_request.rb @@ -706,7 +706,7 @@ def cancelapproval(opts) end def calculate_state_from_reviews - return :declined if reviews.any?(&:declined?) + return :declined if reviews.declined.exists? if reviews.all?(&:accepted?) :new else @@ -715,10 +715,7 @@ def calculate_state_from_reviews end def find_review_for_opts(opts) - reviews.reverse_each do |review| - return review if review.reviewable_by?(opts) - end - nil + reviews.reverse.find { |review| review.reviewable_by?(opts) } end def supersede_request(history_arguments, superseded_opt) diff --git a/src/api/app/models/review.rb b/src/api/app/models/review.rb index 82e50833a67..fbe90701d3d 100644 --- a/src/api/app/models/review.rb +++ b/src/api/app/models/review.rb @@ -45,6 +45,8 @@ class NotFoundError < APIError scope :bs_request_ids_of_involved_groups, ->(group_ids) { where(group_id: group_ids, state: :new).select(:bs_request_id) } scope :bs_request_ids_of_involved_users, ->(user_ids) { where(user_id: user_ids).select(:bs_request_id) } + scope :declined, -> { where(state: :declined) } + before_validation(on: :create) do self.state = :new if self[:state].nil? end diff --git a/src/api/spec/models/bs_request_spec.rb b/src/api/spec/models/bs_request_spec.rb index 7723e528b00..cf1f6428dad 100644 --- a/src/api/spec/models/bs_request_spec.rb +++ b/src/api/spec/models/bs_request_spec.rb @@ -152,15 +152,11 @@ end it 'raises exception on missing by_ paramter' do - expect do - request.change_review_state(:accepted) - end.to raise_error(BsRequest::InvalidReview) + expect { request.change_review_state(:accepted) }.to raise_error(BsRequest::InvalidReview) end it 'raises exception on wrong user' do - expect do - request.change_review_state(:accepted, by_user: someone.login) - end.to raise_error(Review::NotFoundError) + expect { request.change_review_state(:accepted, by_user: someone.login) }.to raise_error(Review::NotFoundError) expect(request.state).to be(:review) end