mirror of
https://github.com/wahyd4/gitlabhq.git
synced 2026-08-27 21:46:16 +10:00
Refactor contributions events and write tests for calendar
This commit is contained in:
@@ -4,10 +4,7 @@ class UsersController < ApplicationController
|
||||
layout :determine_layout
|
||||
|
||||
def show
|
||||
@contributed_projects = Project.
|
||||
where(id: authorized_projects_ids & @user.contributed_projects_ids).
|
||||
in_group_namespace.
|
||||
includes(:namespace).
|
||||
@contributed_projects = contributed_projects.joined(@user).
|
||||
reject(&:forked?)
|
||||
|
||||
@projects = @user.personal_projects.
|
||||
@@ -76,11 +73,12 @@ class UsersController < ApplicationController
|
||||
|
||||
def contributed_projects
|
||||
@contributed_projects = Project.
|
||||
where(id: authorized_projects_ids & @user.contributed_projects_ids).reject(&:forked?)
|
||||
where(id: authorized_projects_ids & @user.contributed_projects_ids).
|
||||
includes(:namespace)
|
||||
end
|
||||
|
||||
def contributions_calendar
|
||||
@contributions_calendar ||= Gitlab::ContributionsCalendar.
|
||||
new(contributed_projects, @user)
|
||||
new(contributed_projects.reject(&:forked?), @user)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -55,6 +55,12 @@ class Event < ActiveRecord::Base
|
||||
order('id DESC').limit(100).
|
||||
update_all(updated_at: Time.now)
|
||||
end
|
||||
|
||||
def contributions
|
||||
where("action = ? OR (target_type in (?) AND action in (?))",
|
||||
Event::PUSHED, ["MergeRequest", "Issue"],
|
||||
[Event::CREATED, Event::CLOSED, Event::MERGED])
|
||||
end
|
||||
end
|
||||
|
||||
def proper?
|
||||
|
||||
+2
-5
@@ -603,13 +603,10 @@ class User < ActiveRecord::Base
|
||||
end
|
||||
|
||||
def contributed_projects_ids
|
||||
Event.where(author_id: self).
|
||||
Event.contributions.where(author_id: self).
|
||||
where("created_at > ?", Time.now - 1.year).
|
||||
where("action = :pushed OR (target_type = 'MergeRequest' AND action = :created)",
|
||||
pushed: Event::PUSHED, created: Event::CREATED).
|
||||
reorder(project_id: :desc).
|
||||
select(:project_id).
|
||||
uniq
|
||||
.map(&:project_id)
|
||||
uniq.map(&:project_id)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
- if @contributed_projects.present?
|
||||
.panel.panel-default
|
||||
.panel.panel-default.contributed-projects
|
||||
.panel-heading Projects contributed to
|
||||
= render 'shared/projects_list',
|
||||
projects: @contributed_projects.sort_by(&:star_count).reverse,
|
||||
|
||||
@@ -7,4 +7,39 @@ class Spinach::Features::User < Spinach::FeatureSteps
|
||||
step 'I should see user "John Doe" page' do
|
||||
expect(title).to match(/^\s*John Doe/)
|
||||
end
|
||||
|
||||
step '"John Doe" has contributions' do
|
||||
user = User.find_by(name: 'John Doe')
|
||||
project = contributed_project
|
||||
|
||||
# Issue controbution
|
||||
issue_params = { title: 'Bug in old browser' }
|
||||
Issues::CreateService.new(project, user, issue_params).execute
|
||||
|
||||
# Push code contribution
|
||||
push_params = {
|
||||
project: project,
|
||||
action: Event::PUSHED,
|
||||
author_id: user.id,
|
||||
data: { commit_count: 3 }
|
||||
}
|
||||
|
||||
Event.create(push_params)
|
||||
end
|
||||
|
||||
step 'I should see contributed projects' do
|
||||
within '.contributed-projects' do
|
||||
page.should have_content(@contributed_project.name)
|
||||
end
|
||||
end
|
||||
|
||||
step 'I should see contributions calendar' do
|
||||
within '.calendar' do
|
||||
page.should have_css('.graph-rect.r2.q2')
|
||||
end
|
||||
end
|
||||
|
||||
def contributed_project
|
||||
@contributed_project ||= create(:project, :public)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -67,3 +67,12 @@ Feature: User
|
||||
And I should see project "Enterprise"
|
||||
And I should not see project "Internal"
|
||||
And I should not see project "Community"
|
||||
|
||||
@javascript
|
||||
Scenario: "John Doe" contribution profile
|
||||
Given I sign in as a user
|
||||
And "John Doe" has contributions
|
||||
When I visit user "John Doe" page
|
||||
Then I should see user "John Doe" page
|
||||
And I should see contributed projects
|
||||
And I should see contributions calendar
|
||||
|
||||
@@ -14,7 +14,7 @@ module Gitlab
|
||||
date_from = 1.year.ago
|
||||
date_to = Date.today
|
||||
|
||||
events = Event.where(author_id: user.id).where(action: event_type).
|
||||
events = Event.contributions.where(author_id: user.id).
|
||||
where("created_at > ?", date_from).where(project_id: projects)
|
||||
|
||||
grouped_events = events.to_a.group_by { |event| event.created_at.to_date.to_s }
|
||||
@@ -41,7 +41,7 @@ module Gitlab
|
||||
end
|
||||
|
||||
def events_by_date(date)
|
||||
events = Event.where(author_id: user.id).where(action: event_type).
|
||||
events = Event.contributions.where(author_id: user.id).
|
||||
where("created_at > ? AND created_at < ?", date.beginning_of_day, date.end_of_day).
|
||||
where(project_id: projects)
|
||||
|
||||
@@ -57,9 +57,5 @@ module Gitlab
|
||||
def starting_month
|
||||
Date.today.strftime("%m").to_i
|
||||
end
|
||||
|
||||
def event_type
|
||||
[Event::PUSHED, Event::CREATED, Event::CLOSED, Event::MERGED]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user