2016-09-13 22:43:25 -04:00
|
|
|
require 'spec_helper'
|
|
|
|
|
2017-01-26 12:59:50 -05:00
|
|
|
feature 'Contributions Calendar', :feature, :js do
|
|
|
|
let(:user) { create(:user) }
|
2017-03-28 17:13:16 -04:00
|
|
|
let(:contributed_project) { create(:empty_project, :public) }
|
2017-01-26 12:59:50 -05:00
|
|
|
let(:issue_note) { create(:note, project: contributed_project) }
|
2016-09-13 22:43:25 -04:00
|
|
|
|
2016-10-01 13:18:44 -04:00
|
|
|
# Ex/ Sunday Jan 1, 2016
|
|
|
|
date_format = '%A %b %-d, %Y'
|
|
|
|
|
2016-09-19 17:04:19 -04:00
|
|
|
issue_title = 'Bug in old browser'
|
|
|
|
issue_params = { title: issue_title }
|
|
|
|
|
|
|
|
def get_cell_color_selector(contributions)
|
2017-01-26 12:59:50 -05:00
|
|
|
activity_colors = %w[#ededed #acd5f2 #7fa8c9 #527ba0 #254e77]
|
|
|
|
# We currently don't actually test the cases with contributions >= 20
|
|
|
|
activity_colors_index =
|
|
|
|
if contributions > 0 && contributions < 10
|
|
|
|
1
|
|
|
|
elsif contributions >= 10 && contributions < 20
|
|
|
|
2
|
|
|
|
elsif contributions >= 20 && contributions < 30
|
|
|
|
3
|
|
|
|
elsif contributions >= 30
|
|
|
|
4
|
|
|
|
else
|
|
|
|
0
|
|
|
|
end
|
2016-09-19 17:04:19 -04:00
|
|
|
|
2017-01-26 12:59:50 -05:00
|
|
|
".user-contrib-cell[fill='#{activity_colors[activity_colors_index]}']"
|
2016-09-19 17:04:19 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def get_cell_date_selector(contributions, date)
|
2017-01-26 12:59:50 -05:00
|
|
|
contribution_text =
|
|
|
|
if contributions.zero?
|
|
|
|
'No contributions'
|
|
|
|
else
|
|
|
|
"#{contributions} #{'contribution'.pluralize(contributions)}"
|
|
|
|
end
|
2016-09-13 22:43:25 -04:00
|
|
|
|
2016-09-19 17:04:19 -04:00
|
|
|
"#{get_cell_color_selector(contributions)}[data-original-title='#{contribution_text}<br />#{date}']"
|
|
|
|
end
|
|
|
|
|
|
|
|
def push_code_contribution
|
2016-09-13 22:43:25 -04:00
|
|
|
push_params = {
|
|
|
|
project: contributed_project,
|
|
|
|
action: Event::PUSHED,
|
2017-01-26 12:59:50 -05:00
|
|
|
author_id: user.id,
|
2016-09-13 22:43:25 -04:00
|
|
|
data: { commit_count: 3 }
|
|
|
|
}
|
|
|
|
|
|
|
|
Event.create(push_params)
|
2016-09-19 17:04:19 -04:00
|
|
|
end
|
2016-09-13 22:43:25 -04:00
|
|
|
|
2017-01-26 12:59:50 -05:00
|
|
|
def note_comment_contribution
|
|
|
|
note_comment_params = {
|
|
|
|
project: contributed_project,
|
|
|
|
action: Event::COMMENTED,
|
|
|
|
target: issue_note,
|
|
|
|
author_id: user.id
|
|
|
|
}
|
2016-09-21 12:34:16 -04:00
|
|
|
|
2017-01-26 12:59:50 -05:00
|
|
|
Event.create(note_comment_params)
|
2016-09-13 22:43:25 -04:00
|
|
|
end
|
|
|
|
|
2017-01-26 12:59:50 -05:00
|
|
|
def selected_day_activities
|
|
|
|
find('.user-calendar-activities').text
|
2016-09-13 22:43:25 -04:00
|
|
|
end
|
|
|
|
|
2017-01-26 12:59:50 -05:00
|
|
|
before do
|
|
|
|
login_as user
|
|
|
|
end
|
2016-09-21 12:34:16 -04:00
|
|
|
|
2017-01-26 12:59:50 -05:00
|
|
|
describe 'calendar day selection' do
|
2016-09-21 12:34:16 -04:00
|
|
|
before do
|
2017-01-26 12:59:50 -05:00
|
|
|
visit user.username
|
2016-09-21 12:34:16 -04:00
|
|
|
wait_for_ajax
|
|
|
|
end
|
|
|
|
|
2017-01-26 12:59:50 -05:00
|
|
|
it 'displays calendar' do
|
|
|
|
expect(page).to have_css('.js-contrib-calendar')
|
2016-09-21 12:34:16 -04:00
|
|
|
end
|
|
|
|
|
2017-01-26 12:59:50 -05:00
|
|
|
describe 'select calendar day' do
|
|
|
|
let(:cells) { page.all('.user-contrib-cell') }
|
|
|
|
|
2016-09-21 12:34:16 -04:00
|
|
|
before do
|
2017-01-26 12:59:50 -05:00
|
|
|
cells[0].click
|
2016-09-21 12:34:16 -04:00
|
|
|
wait_for_ajax
|
2017-01-26 12:59:50 -05:00
|
|
|
@first_day_activities = selected_day_activities
|
2016-09-21 12:34:16 -04:00
|
|
|
end
|
|
|
|
|
2017-01-26 12:59:50 -05:00
|
|
|
it 'displays calendar day activities' do
|
|
|
|
expect(selected_day_activities).not_to be_empty
|
2016-09-21 12:34:16 -04:00
|
|
|
end
|
|
|
|
|
2017-01-26 12:59:50 -05:00
|
|
|
describe 'select another calendar day' do
|
|
|
|
before do
|
|
|
|
cells[1].click
|
|
|
|
wait_for_ajax
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'displays different calendar day activities' do
|
|
|
|
expect(selected_day_activities).not_to eq(@first_day_activities)
|
|
|
|
end
|
2016-09-21 12:34:16 -04:00
|
|
|
end
|
|
|
|
|
2017-01-26 12:59:50 -05:00
|
|
|
describe 'deselect calendar day' do
|
|
|
|
before do
|
|
|
|
cells[0].click
|
|
|
|
wait_for_ajax
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'hides calendar day activities' do
|
|
|
|
expect(selected_day_activities).to be_empty
|
|
|
|
end
|
2016-09-21 12:34:16 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2017-01-26 12:59:50 -05:00
|
|
|
describe 'calendar daily activities' do
|
|
|
|
shared_context 'visit user page' do
|
|
|
|
before do
|
|
|
|
visit user.username
|
|
|
|
wait_for_ajax
|
|
|
|
end
|
2016-09-19 17:04:19 -04:00
|
|
|
end
|
|
|
|
|
2017-01-26 12:59:50 -05:00
|
|
|
shared_examples 'a day with activity' do |contribution_count:|
|
|
|
|
include_context 'visit user page'
|
2016-09-19 17:04:19 -04:00
|
|
|
|
2017-01-26 12:59:50 -05:00
|
|
|
it 'displays calendar activity square color for 1 contribution' do
|
|
|
|
expect(page).to have_selector(get_cell_color_selector(contribution_count), count: 1)
|
|
|
|
end
|
2016-09-19 17:04:19 -04:00
|
|
|
|
2017-01-26 12:59:50 -05:00
|
|
|
it 'displays calendar activity square on the correct date' do
|
|
|
|
today = Date.today.strftime(date_format)
|
|
|
|
expect(page).to have_selector(get_cell_date_selector(contribution_count, today), count: 1)
|
|
|
|
end
|
2016-09-19 17:04:19 -04:00
|
|
|
end
|
|
|
|
|
2017-01-26 12:59:50 -05:00
|
|
|
describe '1 issue creation calendar activity' do
|
|
|
|
before do
|
|
|
|
Issues::CreateService.new(contributed_project, user, issue_params).execute
|
2016-09-19 17:04:19 -04:00
|
|
|
end
|
|
|
|
|
2017-01-26 12:59:50 -05:00
|
|
|
it_behaves_like 'a day with activity', contribution_count: 1
|
2016-09-19 17:04:19 -04:00
|
|
|
|
2017-01-26 12:59:50 -05:00
|
|
|
describe 'issue title is shown on activity page' do
|
|
|
|
include_context 'visit user page'
|
2016-09-19 17:04:19 -04:00
|
|
|
|
2017-01-26 12:59:50 -05:00
|
|
|
it 'displays calendar activity log' do
|
|
|
|
expect(find('.content_list .event-note')).to have_content issue_title
|
|
|
|
end
|
|
|
|
end
|
2016-09-19 17:04:19 -04:00
|
|
|
end
|
2016-09-13 22:43:25 -04:00
|
|
|
|
2017-01-26 12:59:50 -05:00
|
|
|
describe '1 comment calendar activity' do
|
|
|
|
before do
|
|
|
|
note_comment_contribution
|
|
|
|
end
|
2016-09-19 17:04:19 -04:00
|
|
|
|
2017-01-26 12:59:50 -05:00
|
|
|
it_behaves_like 'a day with activity', contribution_count: 1
|
2016-09-19 17:04:19 -04:00
|
|
|
end
|
|
|
|
|
2017-01-26 12:59:50 -05:00
|
|
|
describe '10 calendar activities' do
|
|
|
|
before do
|
|
|
|
10.times { push_code_contribution }
|
|
|
|
end
|
2016-09-19 17:04:19 -04:00
|
|
|
|
2017-01-26 12:59:50 -05:00
|
|
|
it_behaves_like 'a day with activity', contribution_count: 10
|
2016-09-19 17:04:19 -04:00
|
|
|
end
|
|
|
|
|
2017-01-26 12:59:50 -05:00
|
|
|
describe 'calendar activity on two days' do
|
|
|
|
before do
|
|
|
|
push_code_contribution
|
|
|
|
|
|
|
|
Timecop.freeze(Date.yesterday) do
|
|
|
|
Issues::CreateService.new(contributed_project, user, issue_params).execute
|
|
|
|
end
|
|
|
|
end
|
|
|
|
include_context 'visit user page'
|
|
|
|
|
|
|
|
it 'displays calendar activity squares for both days' do
|
|
|
|
expect(page).to have_selector(get_cell_color_selector(1), count: 2)
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'displays calendar activity square for yesterday' do
|
|
|
|
yesterday = Date.yesterday.strftime(date_format)
|
|
|
|
expect(page).to have_selector(get_cell_date_selector(1, yesterday), count: 1)
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'displays calendar activity square for today' do
|
|
|
|
today = Date.today.strftime(date_format)
|
|
|
|
expect(page).to have_selector(get_cell_date_selector(1, today), count: 1)
|
|
|
|
end
|
2016-09-19 17:04:19 -04:00
|
|
|
end
|
2016-09-13 22:43:25 -04:00
|
|
|
end
|
|
|
|
end
|