Commit a86bd87afcb8ba8221aa72562a6591139fa763c0

Authored by Alex Denisov
1 parent a56cec11

User joined project event added

app/assets/stylesheets/common.scss
... ... @@ -179,6 +179,14 @@ span.update-author {
179 179 &.merged {
180 180 background-color: #2A2;
181 181 }
  182 +
  183 + &.joined {
  184 + background-color: #1cb9ff;
  185 + }
  186 +
  187 + &.left {
  188 + background-color: #ff5057;
  189 + }
182 190 }
183 191  
184 192 form {
... ...
app/decorators/event_decorator.rb
... ... @@ -8,7 +8,10 @@ class EventDecorator < ApplicationDecorator
8 8 "#{self.author_name} #{self.action_name} MR ##{self.target_id}:" + self.merge_request_title
9 9 elsif self.push?
10 10 "#{self.author_name} #{self.push_action_name} #{self.ref_type} " + self.ref_name
11   - else
  11 + elsif self.joined?
  12 + "#{self.author_name} #{self.action_name} #{self.project.name}"
  13 +
  14 + else
12 15 ""
13 16 end
14 17 end
... ...
app/models/event.rb
... ... @@ -10,6 +10,7 @@ class Event < ActiveRecord::Base
10 10 Pushed = 5
11 11 Commented = 6
12 12 Merged = 7
  13 + Joined = 8 # User joined project
13 14  
14 15 belongs_to :project
15 16 belongs_to :target, polymorphic: true
... ... @@ -37,7 +38,7 @@ class Event < ActiveRecord::Base
37 38 # - new issue
38 39 # - merge request
39 40 def allowed?
40   - push? || issue? || merge_request?
  41 + push? || issue? || merge_request? || joined?
41 42 end
42 43  
43 44 def push?
... ... @@ -84,6 +85,10 @@ class Event < ActiveRecord::Base
84 85 [Closed, Reopened].include?(action)
85 86 end
86 87  
  88 + def joined?
  89 + action == self.class::Joined
  90 + end
  91 +
87 92 def issue
88 93 target if target_type == "Issue"
89 94 end
... ... @@ -101,6 +106,8 @@ class Event < ActiveRecord::Base
101 106 "closed"
102 107 elsif merged?
103 108 "merged"
  109 + elsif joined?
  110 + 'joined'
104 111 else
105 112 "opened"
106 113 end
... ...
app/observers/users_project_observer.rb
1 1 class UsersProjectObserver < ActiveRecord::Observer
2 2 def after_create(users_project)
3 3 Notify.project_access_granted_email(users_project.id).deliver
  4 +
  5 + Event.create(
  6 + project_id: users_project.project.id,
  7 + action: Event::Joined,
  8 + author_id: users_project.user.id
  9 + )
4 10 end
5 11  
6 12 def after_update(users_project)
... ...
app/views/events/_event.html.haml
... ... @@ -11,3 +11,7 @@
11 11 .event_feed
12 12 = render "events/event_push", event: event
13 13  
  14 + - elsif event.joined?
  15 + .event_feed
  16 + = render "events/event_joined", event: event
  17 +
... ...
app/views/events/_event_joined.html.haml 0 → 100644
... ... @@ -0,0 +1,8 @@
  1 += image_tag gravatar_icon(event.author_email), class: "avatar"
  2 +%strong #{event.author_name}
  3 +%span.event_label{class: event.action_name}= event.action_name
  4 +%strong= link_to event.project.name, event.project
  5 +%span.cgray
  6 + = time_ago_in_words(event.created_at)
  7 + ago.
  8 +
... ...
features/dashboard/dashboard.feature
... ... @@ -15,4 +15,9 @@ Feature: Dashboard
15 15 And I click "Create Merge Request" link
16 16 Then I see prefilled new Merge Request page
17 17  
18   -
  18 + @current
  19 + Scenario: I should see User joined Project event
  20 + Given user with name "John Doe" joined project "Shop"
  21 + When I visit dashboard page
  22 + Then I should see "John Doe joined Shop" event
  23 +
... ...
features/step_definitions/dashboard_steps.rb
... ... @@ -109,3 +109,18 @@ Given /^I have authored merge requests$/ do
109 109 :author => @user,
110 110 :project => project2
111 111 end
  112 +
  113 +Given /^user with name "(.*?)" joined project "(.*?)"$/ do |user_name, project_name|
  114 + user = Factory.create(:user, {name: user_name})
  115 + project = Project.find_by_name project_name
  116 + Event.create(
  117 + project: project,
  118 + author_id: user.id,
  119 + action: Event::Joined
  120 + )
  121 +end
  122 +
  123 +Then /^I should see "(.*?)" event$/ do |event_text|
  124 + page.should have_content(event_text)
  125 +end
  126 +
... ...
spec/models/event_spec.rb
... ... @@ -49,4 +49,15 @@ describe Event do
49 49 it { @event.branch_name.should == "master" }
50 50 it { @event.author.should == @user }
51 51 end
  52 +
  53 + describe "New team mamber" do
  54 + let(:project) {Factory.create :project}
  55 + let(:new_user) {Factory.create :user}
  56 + it "should create event" do
  57 + UsersProject.observers.enable :users_project_observer
  58 + expect{
  59 + UsersProject.bulk_import(project, [new_user.id], UsersProject::DEVELOPER)
  60 + }.to change{Event.count}.by(1)
  61 + end
  62 + end
52 63 end
... ...
spec/observers/users_project_observer_spec.rb
... ... @@ -23,6 +23,14 @@ describe UsersProjectObserver do
23 23 Notify.should_receive(:project_access_granted_email).with(users_project.id).and_return(double(deliver: true))
24 24 subject.after_create(users_project)
25 25 end
  26 + it "should create new event" do
  27 + Event.should_receive(:create).with(
  28 + project_id: users_project.project.id,
  29 + action: Event::Joined,
  30 + author_id: users_project.user.id
  31 + )
  32 + subject.after_create(users_project)
  33 + end
26 34 end
27 35  
28 36 describe "#after_update" do
... ...