diff --git a/.rubocop_todo/rspec/feature_category.yml b/.rubocop_todo/rspec/feature_category.yml index 9f33c89366a5de912ac7bc7f001adb0724345b77..a4e1633b5fcb175ef4a6a25e8e49188e9c651325 100644 --- a/.rubocop_todo/rspec/feature_category.yml +++ b/.rubocop_todo/rspec/feature_category.yml @@ -3324,7 +3324,6 @@ RSpec/FeatureCategory: - 'spec/models/legacy_diff_discussion_spec.rb' - 'spec/models/legacy_diff_note_spec.rb' - 'spec/models/lfs_download_object_spec.rb' - - 'spec/models/lfs_file_lock_spec.rb' - 'spec/models/license_template_spec.rb' - 'spec/models/list_spec.rb' - 'spec/models/list_user_preference_spec.rb' diff --git a/app/models/lfs_file_lock.rb b/app/models/lfs_file_lock.rb index c442760dce10383daf91e64d3d78fe4531fb1262..e0df817e49f0c274a3aa8713518f1da3cde549b3 100644 --- a/app/models/lfs_file_lock.rb +++ b/app/models/lfs_file_lock.rb @@ -9,6 +9,10 @@ class LfsFileLock < ApplicationRecord validates :project_id, :user_id, :path, presence: true + def self.for_path!(path) + find_by!(path: path) + end + def can_be_unlocked_by?(current_user, forced = false) return true if current_user.id == user_id diff --git a/app/services/lfs/unlock_file_service.rb b/app/services/lfs/unlock_file_service.rb index a96994af7a9c7bb173a13ad072ade17af12d9ce8..677bbacd9fbaeafc9b4593b9b68003828874e8a4 100644 --- a/app/services/lfs/unlock_file_service.rb +++ b/app/services/lfs/unlock_file_service.rb @@ -34,17 +34,15 @@ def unlock_file end end - # rubocop: disable CodeReuse/ActiveRecord def lock return @lock if defined?(@lock) @lock = if params[:id].present? project.lfs_file_locks.find(params[:id]) elsif params[:path].present? - project.lfs_file_locks.find_by!(path: params[:path]) + project.lfs_file_locks.for_path!(params[:path]) end end - # rubocop: enable CodeReuse/ActiveRecord end end diff --git a/spec/models/lfs_file_lock_spec.rb b/spec/models/lfs_file_lock_spec.rb index 5afad6c184fb1f756e7dfa50babffdd43471e827..c879beb39304cdad31ffa36bce9d7f7b50c8cc36 100644 --- a/spec/models/lfs_file_lock_spec.rb +++ b/spec/models/lfs_file_lock_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe LfsFileLock do +RSpec.describe LfsFileLock, feature_category: :source_code_management do let_it_be(:lfs_file_lock, reload: true) { create(:lfs_file_lock) } subject { lfs_file_lock } @@ -57,4 +57,18 @@ end end end + + describe '#for_path!(path)' do + context 'when the lfs_file_lock exists' do + it 'returns the lfs file lock' do + expect(described_class.for_path!(lfs_file_lock.path)).to eq(lfs_file_lock) + end + end + + context 'when the path does not exist' do + it 'raises an error' do + expect { described_class.for_path!('not_a_real_path.rb') }.to raise_error(ActiveRecord::RecordNotFound) + end + end + end end