Merge pull request #1414 from AlexDenisov/team_member_events
Team membership events
This commit is contained in:
commit
80685596d3
|
@ -179,6 +179,14 @@ span.update-author {
|
|||
&.merged {
|
||||
background-color: #2A2;
|
||||
}
|
||||
|
||||
&.joined {
|
||||
background-color: #1cb9ff;
|
||||
}
|
||||
|
||||
&.left {
|
||||
background-color: #ff5057;
|
||||
}
|
||||
}
|
||||
|
||||
form {
|
||||
|
|
|
@ -8,7 +8,9 @@ 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.membership_changed?
|
||||
"#{self.author_name} #{self.action_name} #{self.project.name}"
|
||||
else
|
||||
""
|
||||
end
|
||||
end
|
||||
|
|
|
@ -10,6 +10,8 @@ class Event < ActiveRecord::Base
|
|||
Pushed = 5
|
||||
Commented = 6
|
||||
Merged = 7
|
||||
Joined = 8 # User joined project
|
||||
Left = 9 # User left project
|
||||
|
||||
belongs_to :project
|
||||
belongs_to :target, polymorphic: true
|
||||
|
@ -37,7 +39,7 @@ class Event < ActiveRecord::Base
|
|||
# - new issue
|
||||
# - merge request
|
||||
def allowed?
|
||||
push? || issue? || merge_request?
|
||||
push? || issue? || merge_request? || membership_changed?
|
||||
end
|
||||
|
||||
def push?
|
||||
|
@ -84,6 +86,18 @@ class Event < ActiveRecord::Base
|
|||
[Closed, Reopened].include?(action)
|
||||
end
|
||||
|
||||
def joined?
|
||||
action == Joined
|
||||
end
|
||||
|
||||
def left?
|
||||
action == Left
|
||||
end
|
||||
|
||||
def membership_changed?
|
||||
joined? || left?
|
||||
end
|
||||
|
||||
def issue
|
||||
target if target_type == "Issue"
|
||||
end
|
||||
|
@ -101,6 +115,10 @@ class Event < ActiveRecord::Base
|
|||
"closed"
|
||||
elsif merged?
|
||||
"merged"
|
||||
elsif joined?
|
||||
'joined'
|
||||
elsif left?
|
||||
'left'
|
||||
else
|
||||
"opened"
|
||||
end
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -1,9 +1,24 @@
|
|||
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)
|
||||
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
|
||||
|
|
|
@ -11,3 +11,7 @@
|
|||
.event_feed
|
||||
= render "events/event_push", event: event
|
||||
|
||||
- elsif event.membership_changed?
|
||||
.event_feed
|
||||
= render "events/event_membership_changed", event: event
|
||||
|
||||
|
|
9
app/views/events/_event_membership_changed.html.haml
Normal file
9
app/views/events/_event_membership_changed.html.haml
Normal file
|
@ -0,0 +1,9 @@
|
|||
= 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)
|
||||
ago.
|
||||
|
|
@ -15,4 +15,14 @@ Feature: Dashboard
|
|||
And I click "Create Merge Request" link
|
||||
Then I see prefilled new Merge Request page
|
||||
|
||||
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 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
|
||||
|
||||
|
|
|
@ -109,3 +109,28 @@ 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
|
||||
|
||||
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
|
||||
|
||||
|
|
|
@ -49,4 +49,26 @@ describe Event do
|
|||
it { @event.branch_name.should == "master" }
|
||||
it { @event.author.should == @user }
|
||||
end
|
||||
|
||||
describe "Joined project team" 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
|
||||
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
|
||||
|
|
|
@ -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
|
||||
|
@ -37,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
|
||||
|
|
Loading…
Reference in a new issue