Commit a8af7b22ca29ff534a2f7a01d33c10135d14b4a1
1 parent
2b589530
Exists in
master
generate notice_fingerprinter on access
Showing
2 changed files
with
19 additions
and
0 deletions
Show diff stats
app/models/app.rb
| @@ -31,6 +31,7 @@ class App | @@ -31,6 +31,7 @@ class App | ||
| 31 | before_validation :generate_api_key, on: :create | 31 | before_validation :generate_api_key, on: :create |
| 32 | before_save :normalize_github_repo | 32 | before_save :normalize_github_repo |
| 33 | before_create :build_notice_fingerprinter | 33 | before_create :build_notice_fingerprinter |
| 34 | + after_find :build_notice_fingerprinter | ||
| 34 | after_update :store_cached_attributes_on_problems | 35 | after_update :store_cached_attributes_on_problems |
| 35 | 36 | ||
| 36 | validates :name, :api_key, presence: true, uniqueness: { allow_blank: true } | 37 | validates :name, :api_key, presence: true, uniqueness: { allow_blank: true } |
| @@ -54,6 +55,9 @@ class App | @@ -54,6 +55,9 @@ class App | ||
| 54 | } | 55 | } |
| 55 | 56 | ||
| 56 | def build_notice_fingerprinter | 57 | def build_notice_fingerprinter |
| 58 | + # no need to build a notice_fingerprinter if we already have one | ||
| 59 | + return if notice_fingerprinter.present? | ||
| 60 | + | ||
| 57 | attrs = SiteConfig.document.notice_fingerprinter_attributes | 61 | attrs = SiteConfig.document.notice_fingerprinter_attributes |
| 58 | self.notice_fingerprinter = attrs | 62 | self.notice_fingerprinter = attrs |
| 59 | end | 63 | end |
spec/models/app_spec.rb
| @@ -220,4 +220,19 @@ describe App, type: 'model' do | @@ -220,4 +220,19 @@ describe App, type: 'model' do | ||
| 220 | end.to raise_error(Mongoid::Errors::DocumentNotFound) | 220 | end.to raise_error(Mongoid::Errors::DocumentNotFound) |
| 221 | end | 221 | end |
| 222 | end | 222 | end |
| 223 | + | ||
| 224 | + describe '#notice_fingerprinter' do | ||
| 225 | + it 'app acquires a notice_fingerprinter when it doesn\'t have one' do | ||
| 226 | + app = Fabricate(:app, name: 'Errbit') | ||
| 227 | + app.notice_fingerprinter.delete | ||
| 228 | + | ||
| 229 | + # has a notice_fingerprinter because it's been accessed when blank | ||
| 230 | + expect(app.reload.notice_fingerprinter).to be_a(NoticeFingerprinter) | ||
| 231 | + end | ||
| 232 | + | ||
| 233 | + it 'brand new app has a notice_fingerprinter' do | ||
| 234 | + app = Fabricate(:app, name: 'Errbit') | ||
| 235 | + expect(app.notice_fingerprinter).to be_a(NoticeFingerprinter) | ||
| 236 | + end | ||
| 237 | + end | ||
| 223 | end | 238 | end |