summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Denisov <1101.debian@gmail.com>2012-09-09 23:18:28 +0300
committerAlex Denisov <1101.debian@gmail.com>2012-09-09 23:18:28 +0300
commita86bd87afcb8ba8221aa72562a6591139fa763c0 (patch)
tree647d5115dd83b58290154b8c136f9d6d9d640fab
parenta56cec113204130385e0fbc3f2223d81101357ef (diff)
downloadgitlab-ce-a86bd87afcb8ba8221aa72562a6591139fa763c0.tar.gz
User joined project event added
-rw-r--r--app/assets/stylesheets/common.scss8
-rw-r--r--app/decorators/event_decorator.rb5
-rw-r--r--app/models/event.rb9
-rw-r--r--app/observers/users_project_observer.rb6
-rw-r--r--app/views/events/_event.html.haml4
-rw-r--r--app/views/events/_event_joined.html.haml8
-rw-r--r--features/dashboard/dashboard.feature7
-rw-r--r--features/step_definitions/dashboard_steps.rb15
-rw-r--r--spec/models/event_spec.rb11
-rw-r--r--spec/observers/users_project_observer_spec.rb8
10 files changed, 78 insertions, 3 deletions
diff --git a/app/assets/stylesheets/common.scss b/app/assets/stylesheets/common.scss
index aa27a280a18..012aad031b1 100644
--- a/app/assets/stylesheets/common.scss
+++ b/app/assets/stylesheets/common.scss
@@ -179,6 +179,14 @@ span.update-author {
&.merged {
background-color: #2A2;
}
+
+ &.joined {
+ background-color: #1cb9ff;
+ }
+
+ &.left {
+ background-color: #ff5057;
+ }
}
form {
diff --git a/app/decorators/event_decorator.rb b/app/decorators/event_decorator.rb
index 7df9081f045..265dbe1add4 100644
--- a/app/decorators/event_decorator.rb
+++ b/app/decorators/event_decorator.rb
@@ -8,7 +8,10 @@ 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
- else
+ elsif self.joined?
+ "#{self.author_name} #{self.action_name} #{self.project.name}"
+
+ else
""
end
end
diff --git a/app/models/event.rb b/app/models/event.rb
index e20b79e2a82..15095d3b487 100644
--- a/app/models/event.rb
+++ b/app/models/event.rb
@@ -10,6 +10,7 @@ class Event < ActiveRecord::Base
Pushed = 5
Commented = 6
Merged = 7
+ Joined = 8 # User joined project
belongs_to :project
belongs_to :target, polymorphic: true
@@ -37,7 +38,7 @@ class Event < ActiveRecord::Base
# - new issue
# - merge request
def allowed?
- push? || issue? || merge_request?
+ push? || issue? || merge_request? || joined?
end
def push?
@@ -84,6 +85,10 @@ class Event < ActiveRecord::Base
[Closed, Reopened].include?(action)
end
+ def joined?
+ action == self.class::Joined
+ end
+
def issue
target if target_type == "Issue"
end
@@ -101,6 +106,8 @@ class Event < ActiveRecord::Base
"closed"
elsif merged?
"merged"
+ elsif joined?
+ 'joined'
else
"opened"
end
diff --git a/app/observers/users_project_observer.rb b/app/observers/users_project_observer.rb
index 763b2c87f63..2a98a194d52 100644
--- a/app/observers/users_project_observer.rb
+++ b/app/observers/users_project_observer.rb
@@ -1,6 +1,12 @@
class UsersProjectObserver < ActiveRecord::Observer
def after_create(users_project)
Notify.project_access_granted_email(users_project.id).deliver
+
+ Event.create(
+ project_id: users_project.project.id,
+ action: Event::Joined,
+ author_id: users_project.user.id
+ )
end
def after_update(users_project)
diff --git a/app/views/events/_event.html.haml b/app/views/events/_event.html.haml
index d49f0382dea..7566c09474c 100644
--- a/app/views/events/_event.html.haml
+++ b/app/views/events/_event.html.haml
@@ -11,3 +11,7 @@
.event_feed
= render "events/event_push", event: event
+ - elsif event.joined?
+ .event_feed
+ = render "events/event_joined", event: event
+
diff --git a/app/views/events/_event_joined.html.haml b/app/views/events/_event_joined.html.haml
new file mode 100644
index 00000000000..6195da81faf
--- /dev/null
+++ b/app/views/events/_event_joined.html.haml
@@ -0,0 +1,8 @@
+= image_tag gravatar_icon(event.author_email), class: "avatar"
+%strong #{event.author_name}
+%span.event_label{class: event.action_name}= event.action_name
+%strong= link_to event.project.name, event.project
+%span.cgray
+ = time_ago_in_words(event.created_at)
+ ago.
+
diff --git a/features/dashboard/dashboard.feature b/features/dashboard/dashboard.feature
index a8c2205c143..8775e08154d 100644
--- a/features/dashboard/dashboard.feature
+++ b/features/dashboard/dashboard.feature
@@ -15,4 +15,9 @@ 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
+
diff --git a/features/step_definitions/dashboard_steps.rb b/features/step_definitions/dashboard_steps.rb
index 867233c82cb..3771fb9c267 100644
--- a/features/step_definitions/dashboard_steps.rb
+++ b/features/step_definitions/dashboard_steps.rb
@@ -109,3 +109,18 @@ Given /^I have authored merge requests$/ do
:author => @user,
:project => project2
end
+
+Given /^user with name "(.*?)" joined project "(.*?)"$/ do |user_name, project_name|
+ user = Factory.create(:user, {name: user_name})
+ project = Project.find_by_name project_name
+ Event.create(
+ project: project,
+ author_id: user.id,
+ action: Event::Joined
+ )
+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 aaffda3199e..81459233cf6 100644
--- a/spec/models/event_spec.rb
+++ b/spec/models/event_spec.rb
@@ -49,4 +49,15 @@ describe Event do
it { @event.branch_name.should == "master" }
it { @event.author.should == @user }
end
+
+ describe "New team mamber" do
+ let(:project) {Factory.create :project}
+ let(:new_user) {Factory.create :user}
+ it "should create event" do
+ UsersProject.observers.enable :users_project_observer
+ expect{
+ UsersProject.bulk_import(project, [new_user.id], UsersProject::DEVELOPER)
+ }.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 3e3920407cb..99130aa5161 100644
--- a/spec/observers/users_project_observer_spec.rb
+++ b/spec/observers/users_project_observer_spec.rb
@@ -23,6 +23,14 @@ describe UsersProjectObserver do
Notify.should_receive(:project_access_granted_email).with(users_project.id).and_return(double(deliver: true))
subject.after_create(users_project)
end
+ it "should create new event" do
+ Event.should_receive(:create).with(
+ project_id: users_project.project.id,
+ action: Event::Joined,
+ author_id: users_project.user.id
+ )
+ subject.after_create(users_project)
+ end
end
describe "#after_update" do