debian-mirror-gitlab/spec/features/calendar_spec.rb

411 lines
12 KiB
Ruby
Raw Normal View History

2019-10-12 21:52:04 +05:30
# frozen_string_literal: true
2016-09-29 09:46:39 +05:30
require 'spec_helper'
2023-04-23 21:23:45 +05:30
RSpec.describe 'Contributions Calendar', :js, feature_category: :user_profile do
2020-03-13 15:44:24 +05:30
include MobileHelpers
2017-08-17 22:00:37 +05:30
let(:user) { create(:user) }
2018-03-17 18:26:18 +05:30
let(:contributed_project) { create(:project, :public, :repository) }
2017-08-17 22:00:37 +05:30
let(:issue_note) { create(:note, project: contributed_project) }
2016-09-29 09:46:39 +05:30
2016-11-03 12:29:30 +05:30
# Ex/ Sunday Jan 1, 2016
date_format = '%A %b %-d, %Y'
issue_title = 'Bug in old browser'
issue_params = { title: issue_title }
2021-09-04 01:27:46 +05:30
def get_cell_level_selector(contributions)
2017-08-17 22:00:37 +05:30
# We currently don't actually test the cases with contributions >= 20
2021-09-04 01:27:46 +05:30
activity_level_index =
2017-08-17 22:00:37 +05:30
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-11-03 12:29:30 +05:30
2021-09-04 01:27:46 +05:30
".user-contrib-cell:not(.contrib-legend)[data-level='#{activity_level_index}']"
2016-11-03 12:29:30 +05:30
end
2016-09-29 09:46:39 +05:30
2016-11-03 12:29:30 +05:30
def get_cell_date_selector(contributions, date)
2017-08-17 22:00:37 +05:30
contribution_text =
2020-10-24 23:57:45 +05:30
if contributions == 0
2017-08-17 22:00:37 +05:30
'No contributions'
else
"#{contributions} #{'contribution'.pluralize(contributions)}"
end
2016-11-03 12:29:30 +05:30
2021-09-04 01:27:46 +05:30
"#{get_cell_level_selector(contributions)}[title='#{contribution_text}<br /><span class=\"gl-text-gray-300\">#{date}</span>']"
2016-11-03 12:29:30 +05:30
end
2023-05-27 22:25:52 +05:30
def get_days_of_week
page.all('[data-testid="user-contrib-cell-group"]')[1]
.all('[data-testid="user-contrib-cell"]')
.map do |node|
node[:title].match(/(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday)/)[0]
end
end
2016-11-03 12:29:30 +05:30
def push_code_contribution
2017-09-10 17:25:29 +05:30
event = create(:push_event, project: contributed_project, author: user)
2023-05-27 22:25:52 +05:30
create(
:push_event_payload,
event: event,
commit_from: '11f9ac0a48b62cef25eedede4c1819964f08d5ce',
commit_to: '1cf19a015df3523caf0a1f9d40c98a267d6a2fc2',
commit_count: 3,
ref: 'master'
)
2016-11-03 12:29:30 +05:30
end
2016-09-29 09:46:39 +05:30
2017-08-17 22:00:37 +05:30
def note_comment_contribution
note_comment_params = {
project: contributed_project,
2020-06-23 00:09:42 +05:30
action: :commented,
2017-08-17 22:00:37 +05:30
target: issue_note,
author_id: user.id
}
2021-04-29 21:17:54 +05:30
Event.create!(note_comment_params)
2017-08-17 22:00:37 +05:30
end
2018-03-17 18:26:18 +05:30
def selected_day_activities(visible: true)
2019-02-15 15:39:39 +05:30
find('#js-overview .user-calendar-activities', visible: visible).text
2016-09-29 09:46:39 +05:30
end
2023-05-27 22:25:52 +05:30
shared_context 'when user page is visited' do
2016-11-03 12:29:30 +05:30
before do
2017-08-17 22:00:37 +05:30
visit user.username
2023-05-27 22:25:52 +05:30
page.click_link('Overview')
2017-09-10 17:25:29 +05:30
wait_for_requests
2016-11-03 12:29:30 +05:30
end
2023-05-27 22:25:52 +05:30
end
2016-11-03 12:29:30 +05:30
2023-05-27 22:25:52 +05:30
context 'with `profile_tabs_vue` feature flag disabled' do
before do
stub_feature_flags(profile_tabs_vue: false)
sign_in user
2016-11-03 12:29:30 +05:30
end
2023-05-27 22:25:52 +05:30
describe 'calendar day selection' do
include_context 'when user page is visited'
2016-11-03 12:29:30 +05:30
2023-05-27 22:25:52 +05:30
it 'displays calendar' do
expect(find('#js-overview')).to have_css('.js-contrib-calendar')
2017-08-17 22:00:37 +05:30
end
2016-09-29 09:46:39 +05:30
2023-05-27 22:25:52 +05:30
describe 'select calendar day' do
let(:cells) { page.all('#js-overview .user-contrib-cell') }
2016-11-03 12:29:30 +05:30
2017-08-17 22:00:37 +05:30
before do
2023-05-27 22:25:52 +05:30
cells[0].click
2017-09-10 17:25:29 +05:30
wait_for_requests
2017-08-17 22:00:37 +05:30
end
2023-05-27 22:25:52 +05:30
it 'displays calendar day activities' do
expect(selected_day_activities).not_to be_empty
2017-08-17 22:00:37 +05:30
end
2023-05-27 22:25:52 +05:30
describe 'select another calendar day' do
it 'displays different calendar day activities' do
first_day_activities = selected_day_activities
cells[1].click
wait_for_requests
expect(selected_day_activities).not_to eq(first_day_activities)
end
2017-08-17 22:00:37 +05:30
end
2023-05-27 22:25:52 +05:30
describe 'deselect calendar day' do
before do
cells[0].click
wait_for_requests
cells[0].click
end
it 'hides calendar day activities' do
expect(selected_day_activities(visible: false)).to be_empty
end
2017-08-17 22:00:37 +05:30
end
end
2016-11-03 12:29:30 +05:30
end
2023-05-27 22:25:52 +05:30
describe 'calendar daily activities' do
shared_examples 'a day with activity' do |contribution_count:|
include_context 'when user page is visited'
it 'displays calendar activity square for 1 contribution', :sidekiq_inline do
expect(find('#js-overview')).to have_selector(get_cell_level_selector(contribution_count), count: 1)
today = Date.today.strftime(date_format)
expect(find('#js-overview')).to have_selector(get_cell_date_selector(contribution_count, today), count: 1)
end
end
2016-11-03 12:29:30 +05:30
2023-05-27 22:25:52 +05:30
describe '1 issue and 1 work item creation calendar activity' do
before do
Issues::CreateService.new(
container: contributed_project,
current_user: user,
params: issue_params,
spam_params: nil
).execute
WorkItems::CreateService.new(
container: contributed_project,
current_user: user,
params: { title: 'new task' },
spam_params: nil
).execute
end
2017-08-17 22:00:37 +05:30
2023-05-27 22:25:52 +05:30
it_behaves_like 'a day with activity', contribution_count: 2
2017-08-17 22:00:37 +05:30
2023-05-27 22:25:52 +05:30
describe 'issue title is shown on activity page' do
include_context 'when user page is visited'
it 'displays calendar activity log', :sidekiq_inline do
expect(all('#js-overview .overview-content-list .event-target-title').map(&:text)).to contain_exactly(
match(/#{issue_title}/),
match(/new task/)
)
end
end
2017-08-17 22:00:37 +05:30
end
2016-11-03 12:29:30 +05:30
2023-05-27 22:25:52 +05:30
describe '1 comment calendar activity' do
before do
note_comment_contribution
end
it_behaves_like 'a day with activity', contribution_count: 1
2017-08-17 22:00:37 +05:30
end
2016-11-03 12:29:30 +05:30
2023-05-27 22:25:52 +05:30
describe '10 calendar activities' do
before do
10.times { push_code_contribution }
end
it_behaves_like 'a day with activity', contribution_count: 10
end
describe 'calendar activity on two days' do
before do
push_code_contribution
travel_to(Date.yesterday) do
Issues::CreateService.new(
container: contributed_project,
current_user: user,
params: issue_params,
spam_params: nil
).execute
end
end
include_context 'when user page is visited'
2016-11-03 12:29:30 +05:30
2023-05-27 22:25:52 +05:30
it 'displays calendar activity squares for both days', :sidekiq_inline do
expect(find('#js-overview')).to have_selector(get_cell_level_selector(1), count: 2)
end
2017-08-17 22:00:37 +05:30
2023-05-27 22:25:52 +05:30
it 'displays calendar activity square for yesterday', :sidekiq_inline do
yesterday = Date.yesterday.strftime(date_format)
expect(find('#js-overview')).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(find('#js-overview')).to have_selector(get_cell_date_selector(1, today), count: 1)
2017-08-17 22:00:37 +05:30
end
end
2016-11-03 12:29:30 +05:30
end
2023-05-27 22:25:52 +05:30
describe 'on smaller screens' do
shared_examples 'hidden activity calendar' do
include_context 'when user page is visited'
it 'hides the activity calender' do
expect(find('#js-overview')).not_to have_css('.js-contrib-calendar')
end
2017-08-17 22:00:37 +05:30
end
2023-05-27 22:25:52 +05:30
context 'when screen size is xs' do
before do
resize_screen_xs
end
it_behaves_like 'hidden activity calendar'
end
2016-11-03 12:29:30 +05:30
end
2023-05-27 22:25:52 +05:30
describe 'first_day_of_week setting' do
context 'when first day of the week is set to Monday' do
before do
stub_application_setting(first_day_of_week: 1)
end
include_context 'when user page is visited'
it 'shows calendar with Monday as the first day of the week' do
expect(get_days_of_week).to eq(%w[Monday Tuesday Wednesday Thursday Friday Saturday Sunday])
end
end
context 'when first day of the week is set to Sunday' do
before do
stub_application_setting(first_day_of_week: 0)
end
include_context 'when user page is visited'
it 'shows calendar with Sunday as the first day of the week' do
expect(get_days_of_week).to eq(%w[Sunday Monday Tuesday Wednesday Thursday Friday Saturday])
end
2017-08-17 22:00:37 +05:30
end
2023-05-27 22:25:52 +05:30
end
end
context 'with `profile_tabs_vue` feature flag enabled' do
before do
sign_in user
end
2017-08-17 22:00:37 +05:30
2023-05-27 22:25:52 +05:30
include_context 'when user page is visited'
it 'displays calendar' do
expect(page).to have_css('[data-testid="contrib-calendar"]')
2016-11-03 12:29:30 +05:30
end
2023-05-27 22:25:52 +05:30
describe 'calendar daily activities' do
shared_examples 'a day with activity' do |contribution_count:|
include_context 'when user page is visited'
2017-08-17 22:00:37 +05:30
2023-05-27 22:25:52 +05:30
it 'displays calendar activity square for 1 contribution', :sidekiq_inline do
expect(page).to have_selector(get_cell_level_selector(contribution_count), count: 1)
today = Date.today.strftime(date_format)
expect(page).to have_selector(get_cell_date_selector(contribution_count, today), count: 1)
2017-08-17 22:00:37 +05:30
end
end
2023-05-27 22:25:52 +05:30
describe '1 issue and 1 work item creation calendar activity' do
before do
Issues::CreateService.new(
container: contributed_project,
current_user: user,
params: issue_params,
spam_params: nil
).execute
WorkItems::CreateService.new(
container: contributed_project,
current_user: user,
params: { title: 'new task' },
spam_params: nil
).execute
end
it_behaves_like 'a day with activity', contribution_count: 2
2017-08-17 22:00:37 +05:30
end
2023-05-27 22:25:52 +05:30
describe '1 comment calendar activity' do
before do
note_comment_contribution
end
it_behaves_like 'a day with activity', contribution_count: 1
2017-08-17 22:00:37 +05:30
end
2023-05-27 22:25:52 +05:30
describe '10 calendar activities' do
before do
10.times { push_code_contribution }
end
it_behaves_like 'a day with activity', contribution_count: 10
end
describe 'calendar activity on two days' do
before do
push_code_contribution
travel_to(Date.yesterday) do
Issues::CreateService.new(
container: contributed_project,
current_user: user,
params: issue_params,
spam_params: nil
).execute
end
end
include_context 'when user page is visited'
it 'displays calendar activity squares for both days', :sidekiq_inline do
expect(page).to have_selector(get_cell_level_selector(1), count: 2)
end
it 'displays calendar activity square for yesterday', :sidekiq_inline 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
2017-08-17 22:00:37 +05:30
end
2016-11-03 12:29:30 +05:30
end
2020-03-13 15:44:24 +05:30
2023-05-27 22:25:52 +05:30
describe 'on smaller screens' do
shared_examples 'hidden activity calendar' do
include_context 'when user page is visited'
2020-03-13 15:44:24 +05:30
2023-05-27 22:25:52 +05:30
it 'hides the activity calender' do
expect(page).not_to have_css('[data-testid="contrib-calendar"]')
end
end
context 'when screen size is xs' do
before do
resize_screen_xs
end
it_behaves_like 'hidden activity calendar'
2020-03-13 15:44:24 +05:30
end
end
2023-05-27 22:25:52 +05:30
describe 'first_day_of_week setting' do
context 'when first day of the week is set to Monday' do
before do
stub_application_setting(first_day_of_week: 1)
end
include_context 'when user page is visited'
it 'shows calendar with Monday as the first day of the week' do
expect(get_days_of_week).to eq(%w[Monday Tuesday Wednesday Thursday Friday Saturday Sunday])
end
2020-03-13 15:44:24 +05:30
end
2023-05-27 22:25:52 +05:30
context 'when first day of the week is set to Sunday' do
before do
stub_application_setting(first_day_of_week: 0)
end
include_context 'when user page is visited'
it 'shows calendar with Sunday as the first day of the week' do
expect(get_days_of_week).to eq(%w[Sunday Monday Tuesday Wednesday Thursday Friday Saturday])
end
end
2020-03-13 15:44:24 +05:30
end
end
2016-09-29 09:46:39 +05:30
end