Skip to content
Snippets Groups Projects
Commit 1f240b09 authored by Alex Denisov's avatar Alex Denisov
Browse files

User left project event added

parent a86bd87a
No related branches found
No related tags found
1 merge request!1414Team membership events
Loading
Loading
@@ -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
Loading
Loading
Loading
Loading
@@ -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
Loading
Loading
@@ -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?
Loading
Loading
@@ -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
Loading
Loading
@@ -108,6 +117,8 @@ class Event < ActiveRecord::Base
"merged"
elsif joined?
'joined'
elsif left?
'left'
else
"opened"
end
Loading
Loading
Loading
Loading
@@ -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
Loading
Loading
Loading
Loading
@@ -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
Loading
Loading
@@ -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
 
= 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)
Loading
Loading
Loading
Loading
@@ -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
Loading
Loading
@@ -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
Loading
Loading
Loading
Loading
@@ -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
Loading
Loading
@@ -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
Loading
Loading
@@ -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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment