diff options
author | Yorick Peterse <yorickpeterse@gmail.com> | 2017-07-07 13:16:53 +0000 |
---|---|---|
committer | Yorick Peterse <yorickpeterse@gmail.com> | 2017-07-07 13:16:53 +0000 |
commit | 87d90b5b5e2fa6d0eed469db61878b942afdbee7 (patch) | |
tree | 6714fab62ed6d90d13fad79f9132ea6ab180d0e9 | |
parent | c0e18e865778a4886eb9aada33c7e6bdd80ee099 (diff) | |
parent | 38fd773bd3bb7ff479ca3d607da6966139e262e3 (diff) | |
download | gitlab-ce-87d90b5b5e2fa6d0eed469db61878b942afdbee7.tar.gz |
Merge branch 'fix-sha-attribute-no-table' into 'master'
Fix ShaAttribute concern when there is no table
Closes #34798
See merge request !12705
-rw-r--r-- | app/models/concerns/sha_attribute.rb | 2 | ||||
-rw-r--r-- | spec/models/concerns/sha_attribute_spec.rb | 31 |
2 files changed, 27 insertions, 6 deletions
diff --git a/app/models/concerns/sha_attribute.rb b/app/models/concerns/sha_attribute.rb index c28974a3cdf..67ecf470f7e 100644 --- a/app/models/concerns/sha_attribute.rb +++ b/app/models/concerns/sha_attribute.rb @@ -3,6 +3,8 @@ module ShaAttribute module ClassMethods def sha_attribute(name) + return unless table_exists? + column = columns.find { |c| c.name == name.to_s } # In case the table doesn't exist we won't be able to find the column, diff --git a/spec/models/concerns/sha_attribute_spec.rb b/spec/models/concerns/sha_attribute_spec.rb index 9e37c2b20c4..610793ee557 100644 --- a/spec/models/concerns/sha_attribute_spec.rb +++ b/spec/models/concerns/sha_attribute_spec.rb @@ -13,15 +13,34 @@ describe ShaAttribute do end describe '#sha_attribute' do - it 'defines a SHA attribute for a binary column' do - expect(model).to receive(:attribute) - .with(:sha1, an_instance_of(Gitlab::Database::ShaAttribute)) + context' when the table exists' do + before do + allow(model).to receive(:table_exists?).and_return(true) + end - model.sha_attribute(:sha1) + it 'defines a SHA attribute for a binary column' do + expect(model).to receive(:attribute) + .with(:sha1, an_instance_of(Gitlab::Database::ShaAttribute)) + + model.sha_attribute(:sha1) + end + + it 'raises ArgumentError when the column type is not :binary' do + expect { model.sha_attribute(:name) }.to raise_error(ArgumentError) + end end - it 'raises ArgumentError when the column type is not :binary' do - expect { model.sha_attribute(:name) }.to raise_error(ArgumentError) + context' when the table does not exist' do + before do + allow(model).to receive(:table_exists?).and_return(false) + end + + it 'does nothing' do + expect(model).not_to receive(:columns) + expect(model).not_to receive(:attribute) + + model.sha_attribute(:name) + end end end end |