summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Denisov <1101.debian@gmail.com>2012-09-10 00:27:47 +0300
committerAlex Denisov <1101.debian@gmail.com>2012-09-10 00:27:47 +0300
commit1f240b09ed5f9f5476a863dd2f906398e5a9f0d4 (patch)
tree043a9a48f08507b96064cef157ff733ca89ce2b4
parenta86bd87afcb8ba8221aa72562a6591139fa763c0 (diff)
downloadgitlab-ce-1f240b09ed5f9f5476a863dd2f906398e5a9f0d4.tar.gz
User left project event added
-rw-r--r--app/decorators/event_decorator.rb3
-rw-r--r--app/models/event.rb15
-rw-r--r--app/models/users_project.rb2
-rw-r--r--app/observers/users_project_observer.rb9
-rw-r--r--app/views/events/_event.html.haml4
-rw-r--r--app/views/events/_event_membership_changed.html.haml (renamed from app/views/events/_event_joined.html.haml)1
-rw-r--r--features/dashboard/dashboard.feature9
-rw-r--r--features/step_definitions/dashboard_steps.rb10
-rw-r--r--spec/models/event_spec.rb13
-rw-r--r--spec/observers/users_project_observer_spec.rb19
10 files changed, 75 insertions, 10 deletions
diff --git a/app/decorators/event_decorator.rb b/app/decorators/event_decorator.rb
index 265dbe1add4..ce0aaa039b9 100644
--- a/app/decorators/event_decorator.rb
+++ b/app/decorators/event_decorator.rb
@@ -8,9 +8,8 @@ class EventDecorator < ApplicationDecorator
"#{self.author_name} #{self.action_name} MR ##{self.target_id}:" + self.merge_request_title
elsif self.push?
"#{self.author_name} #{self.push_action_name} #{self.ref_type} " + self.ref_name
- elsif self.joined?
+ elsif self.membership_changed?
"#{self.author_name} #{self.action_name} #{self.project.name}"
-
else
""
end
diff --git a/app/models/event.rb b/app/models/event.rb
index 15095d3b487..308ffd63961 100644
--- a/app/models/event.rb
+++ b/app/models/event.rb
@@ -11,6 +11,7 @@ class Event < ActiveRecord::Base
Commented = 6
Merged = 7
Joined = 8 # User joined project
+ Left = 9 # User left project
belongs_to :project
belongs_to :target, polymorphic: true
@@ -38,7 +39,7 @@ class Event < ActiveRecord::Base
# - new issue
# - merge request
def allowed?
- push? || issue? || merge_request? || joined?
+ push? || issue? || merge_request? || membership_changed?
end
def push?
@@ -86,7 +87,15 @@ class Event < ActiveRecord::Base
end
def joined?
- action == self.class::Joined
+ action == Joined
+ end
+
+ def left?
+ action == Left
+ end
+
+ def membership_changed?
+ joined? || left?
end
def issue
@@ -108,6 +117,8 @@ class Event < ActiveRecord::Base
"merged"
elsif joined?
'joined'
+ elsif left?
+ 'left'
else
"opened"
end
diff --git a/app/models/users_project.rb b/app/models/users_project.rb
index 3b951f0dae9..ce64a10f3f0 100644
--- a/app/models/users_project.rb
+++ b/app/models/users_project.rb
@@ -23,7 +23,7 @@ class UsersProject < ActiveRecord::Base
def self.bulk_delete(project, user_ids)
UsersProject.transaction do
UsersProject.where(:user_id => user_ids, :project_id => project.id).each do |users_project|
- users_project.delete
+ users_project.destroy
end
end
end
diff --git a/app/observers/users_project_observer.rb b/app/observers/users_project_observer.rb
index 2a98a194d52..b2cea9f279e 100644
--- a/app/observers/users_project_observer.rb
+++ b/app/observers/users_project_observer.rb
@@ -12,4 +12,13 @@ class UsersProjectObserver < ActiveRecord::Observer
def after_update(users_project)
Notify.project_access_granted_email(users_project.id).deliver
end
+
+ def after_destroy(users_project)
+ Event.create(
+ project_id: users_project.project.id,
+ action: Event::Left,
+ author_id: users_project.user.id
+ )
+ end
+
end
diff --git a/app/views/events/_event.html.haml b/app/views/events/_event.html.haml
index 7566c09474c..7bae8db13f7 100644
--- a/app/views/events/_event.html.haml
+++ b/app/views/events/_event.html.haml
@@ -11,7 +11,7 @@
.event_feed
= render "events/event_push", event: event
- - elsif event.joined?
+ - elsif event.membership_changed?
.event_feed
- = render "events/event_joined", event: event
+ = render "events/event_membership_changed", event: event
diff --git a/app/views/events/_event_joined.html.haml b/app/views/events/_event_membership_changed.html.haml
index 6195da81faf..b079c138f5a 100644
--- a/app/views/events/_event_joined.html.haml
+++ b/app/views/events/_event_membership_changed.html.haml
@@ -1,6 +1,7 @@
= image_tag gravatar_icon(event.author_email), class: "avatar"
%strong #{event.author_name}
%span.event_label{class: event.action_name}= event.action_name
+project
%strong= link_to event.project.name, event.project
%span.cgray
= time_ago_in_words(event.created_at)
diff --git a/features/dashboard/dashboard.feature b/features/dashboard/dashboard.feature
index 8775e08154d..98bb49803f3 100644
--- a/features/dashboard/dashboard.feature
+++ b/features/dashboard/dashboard.feature
@@ -15,9 +15,14 @@ Feature: Dashboard
And I click "Create Merge Request" link
Then I see prefilled new Merge Request page
- @current
Scenario: I should see User joined Project event
Given user with name "John Doe" joined project "Shop"
When I visit dashboard page
- Then I should see "John Doe joined Shop" event
+ Then I should see "John Doe joined project Shop" event
+
+ Scenario: I should see User left Project event
+ Given user with name "John Doe" joined project "Shop"
+ And user with name "John Doe" left project "Shop"
+ When I visit dashboard page
+ Then I should see "John Doe left project Shop" event
diff --git a/features/step_definitions/dashboard_steps.rb b/features/step_definitions/dashboard_steps.rb
index 3771fb9c267..3ddc68e931c 100644
--- a/features/step_definitions/dashboard_steps.rb
+++ b/features/step_definitions/dashboard_steps.rb
@@ -120,6 +120,16 @@ Given /^user with name "(.*?)" joined project "(.*?)"$/ do |user_name, project_n
)
end
+Given /^user with name "(.*?)" left project "(.*?)"$/ do |user_name, project_name|
+ user = User.find_by_name user_name
+ project = Project.find_by_name project_name
+ Event.create(
+ project: project,
+ author_id: user.id,
+ action: Event::Left
+ )
+end
+
Then /^I should see "(.*?)" event$/ do |event_text|
page.should have_content(event_text)
end
diff --git a/spec/models/event_spec.rb b/spec/models/event_spec.rb
index 81459233cf6..ee022e959e7 100644
--- a/spec/models/event_spec.rb
+++ b/spec/models/event_spec.rb
@@ -50,7 +50,7 @@ describe Event do
it { @event.author.should == @user }
end
- describe "New team mamber" do
+ describe "Joined project team" do
let(:project) {Factory.create :project}
let(:new_user) {Factory.create :user}
it "should create event" do
@@ -60,4 +60,15 @@ describe Event do
}.to change{Event.count}.by(1)
end
end
+ describe "Left project team" do
+ let(:project) {Factory.create :project}
+ let(:new_user) {Factory.create :user}
+ it "should create event" do
+ UsersProject.bulk_import(project, [new_user.id], UsersProject::DEVELOPER)
+ UsersProject.observers.enable :users_project_observer
+ expect{
+ UsersProject.bulk_delete(project, [new_user.id])
+ }.to change{Event.count}.by(1)
+ end
+ end
end
diff --git a/spec/observers/users_project_observer_spec.rb b/spec/observers/users_project_observer_spec.rb
index 99130aa5161..f38d98620a3 100644
--- a/spec/observers/users_project_observer_spec.rb
+++ b/spec/observers/users_project_observer_spec.rb
@@ -45,4 +45,23 @@ describe UsersProjectObserver do
subject.after_update(users_project)
end
end
+ describe "#after_destroy" do
+ it "should called when UsersProject destroyed" do
+ subject.should_receive(:after_destroy)
+ UsersProject.observers.enable :users_project_observer do
+ UsersProject.bulk_delete(
+ users_project.project,
+ [users_project.user.id]
+ )
+ end
+ end
+ it "should create new event" do
+ Event.should_receive(:create).with(
+ project_id: users_project.project.id,
+ action: Event::Left,
+ author_id: users_project.user.id
+ )
+ subject.after_destroy(users_project)
+ end
+ end
end