Commit 0b615eb0e2b5cca7685360c0cae72484741d672e
1 parent
7339464e
Exists in
spb-stable
and in
2 other branches
Filter out old notes in NotesFinder
Showing
2 changed files
with
14 additions
and
1 deletions
Show diff stats
app/finders/notes_finder.rb
| 1 | 1 | class NotesFinder |
| 2 | + FETCH_OVERLAP = 5.seconds | |
| 3 | + | |
| 2 | 4 | def execute(project, current_user, params) |
| 3 | 5 | target_type = params[:target_type] |
| 4 | 6 | target_id = params[:target_id] |
| 7 | + last_fetched_at = params.fetch(:last_fetched_at) | |
| 5 | 8 | |
| 6 | - case target_type | |
| 9 | + notes = case target_type | |
| 7 | 10 | when "commit" |
| 8 | 11 | project.notes.for_commit_id(target_id).not_inline.fresh |
| 9 | 12 | when "issue" |
| ... | ... | @@ -15,5 +18,8 @@ class NotesFinder |
| 15 | 18 | else |
| 16 | 19 | raise 'invalid target_type' |
| 17 | 20 | end |
| 21 | + | |
| 22 | + # Use overlapping intervals to avoid worrying about race conditions | |
| 23 | + notes.where('updated_at > ?', last_fetched_at - FETCH_OVERLAP) | |
| 18 | 24 | end |
| 19 | 25 | end | ... | ... |
spec/finders/notes_finder_spec.rb
| ... | ... | @@ -27,5 +27,12 @@ describe NotesFinder do |
| 27 | 27 | params = { target_id: commit.id, target_type: 'invalid' } |
| 28 | 28 | expect { NotesFinder.new.execute(project, user, params) }.to raise_error('invalid target_type') |
| 29 | 29 | end |
| 30 | + | |
| 31 | + it 'filters out old notes' do | |
| 32 | + note2.update_attribute(:updated_at, 2.hours.ago) | |
| 33 | + params = { target_id: commit.id, target_type: 'commit', last_fetched_at: 1.hour.ago } | |
| 34 | + notes = NotesFinder.new.execute(project, user, params) | |
| 35 | + notes.should eq([note1]) | |
| 36 | + end | |
| 30 | 37 | end |
| 31 | 38 | end | ... | ... |