diff options
-rw-r--r-- | CHANGELOG | 2 | ||||
-rw-r--r-- | app/models/note.rb | 2 | ||||
-rw-r--r-- | app/models/user.rb | 15 | ||||
-rw-r--r-- | spec/models/note_spec.rb | 6 | ||||
-rw-r--r-- | spec/models/user_spec.rb | 29 |
5 files changed, 51 insertions, 3 deletions
diff --git a/CHANGELOG b/CHANGELOG index 54f83e5aeac..6cbe51f1fb0 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,12 +1,14 @@ Please view this file on the master branch, on stable branches it's out of date. v 8.0.0 (unreleased) + - Only show recent push event if the branch still exists or a recent merge request has not been created (Stan Hu) - Remove satellites - Better performance for web editor (switched from satellites to rugged) - Faster merge - Ability to fetch merge requests from refs/merge-requests/:id - Allow displaying of archived projects in the admin interface (Artem Sidorenko) - Allow configuration of import sources for new projects (Artem Sidorenko) + - Search for comments should be case insensetive v 7.14.0 (unreleased) - Update default robots.txt rules to disallow crawling of irrelevant pages (Ben Bodenmiller) diff --git a/app/models/note.rb b/app/models/note.rb index 913a8c00337..36cad8f583d 100644 --- a/app/models/note.rb +++ b/app/models/note.rb @@ -90,7 +90,7 @@ class Note < ActiveRecord::Base end def search(query) - where("note like :query", query: "%#{query}%") + where("LOWER(note) like :query", query: "%#{query.downcase}%") end end diff --git a/app/models/user.rb b/app/models/user.rb index 57145cc6b6e..f70761074c5 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -471,8 +471,19 @@ class User < ActiveRecord::Base events = recent_events.code_push.where("created_at > ?", Time.now - 2.hours) events = events.where(project_id: project_id) if project_id - # Take only latest one - events = events.recent.limit(1).first + # Use the latest event that has not been pushed or merged recently + events.recent.find do |event| + project = Project.find_by_id(event.project_id) + next unless project + repo = project.repository + + if repo.branch_names.include?(event.branch_name) + merge_requests = MergeRequest.where("created_at >= ?", event.created_at). + where(source_project_id: project.id, + source_branch: event.branch_name) + merge_requests.empty? + end + end end def projects_sorted_by_activity diff --git a/spec/models/note_spec.rb b/spec/models/note_spec.rb index 250d1e2da80..331505a01b3 100644 --- a/spec/models/note_spec.rb +++ b/spec/models/note_spec.rb @@ -198,4 +198,10 @@ describe Note do let(:backref_text) { issue.gfm_reference } let(:set_mentionable_text) { ->(txt) { subject.note = txt } } end + + describe :search do + let!(:note) { create(:note, note: "WoW") } + + it { expect(Note.search('wow')).to include(note) } + end end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 876cfb1204a..a46e789eab4 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -710,4 +710,33 @@ describe User do it { expect(subject.can_be_removed?).to be_falsey } end end + + describe "#recent_push" do + subject { create(:user) } + let!(:project1) { create(:project) } + let!(:project2) { create(:project, forked_from_project: project1) } + let!(:push_data) { Gitlab::PushDataBuilder.build_sample(project2, subject) } + let!(:push_event) { create(:event, action: Event::PUSHED, project: project2, target: project1, author: subject, data: push_data) } + + before do + project1.team << [subject, :master] + project2.team << [subject, :master] + end + + it "includes push event" do + expect(subject.recent_push).to eq(push_event) + end + + it "excludes push event if branch has been deleted" do + allow_any_instance_of(Repository).to receive(:branch_names).and_return(['foo']) + + expect(subject.recent_push).to eq(nil) + end + + it "excludes push event if MR is opened for it" do + create(:merge_request, source_project: project2, target_project: project1, source_branch: project2.default_branch, target_branch: 'fix', author: subject) + + expect(subject.recent_push).to eq(nil) + end + end end |