debian-mirror-gitlab/spec/services/event_create_service_spec.rb

265 lines
7.4 KiB
Ruby
Raw Normal View History

2019-07-31 22:56:46 +05:30
# frozen_string_literal: true
2014-09-02 18:07:02 +05:30
require 'spec_helper'
2017-09-10 17:25:29 +05:30
describe EventCreateService do
let(:service) { described_class.new }
2014-09-02 18:07:02 +05:30
describe 'Issues' do
2016-08-24 12:49:21 +05:30
describe '#open_issue' do
2014-09-02 18:07:02 +05:30
let(:issue) { create(:issue) }
2015-04-26 12:48:37 +05:30
it { expect(service.open_issue(issue, issue.author)).to be_truthy }
2014-09-02 18:07:02 +05:30
2017-08-17 22:00:37 +05:30
it "creates new event" do
2014-09-02 18:07:02 +05:30
expect { service.open_issue(issue, issue.author) }.to change { Event.count }
end
end
2016-08-24 12:49:21 +05:30
describe '#close_issue' do
2014-09-02 18:07:02 +05:30
let(:issue) { create(:issue) }
2015-04-26 12:48:37 +05:30
it { expect(service.close_issue(issue, issue.author)).to be_truthy }
2014-09-02 18:07:02 +05:30
2017-08-17 22:00:37 +05:30
it "creates new event" do
2014-09-02 18:07:02 +05:30
expect { service.close_issue(issue, issue.author) }.to change { Event.count }
end
end
2016-08-24 12:49:21 +05:30
describe '#reopen_issue' do
2014-09-02 18:07:02 +05:30
let(:issue) { create(:issue) }
2015-04-26 12:48:37 +05:30
it { expect(service.reopen_issue(issue, issue.author)).to be_truthy }
2014-09-02 18:07:02 +05:30
2017-08-17 22:00:37 +05:30
it "creates new event" do
2014-09-02 18:07:02 +05:30
expect { service.reopen_issue(issue, issue.author) }.to change { Event.count }
end
end
end
describe 'Merge Requests' do
2016-08-24 12:49:21 +05:30
describe '#open_mr' do
2014-09-02 18:07:02 +05:30
let(:merge_request) { create(:merge_request) }
2015-04-26 12:48:37 +05:30
it { expect(service.open_mr(merge_request, merge_request.author)).to be_truthy }
2014-09-02 18:07:02 +05:30
2016-09-13 17:45:13 +05:30
it "creates new event" do
2014-09-02 18:07:02 +05:30
expect { service.open_mr(merge_request, merge_request.author) }.to change { Event.count }
end
end
2016-08-24 12:49:21 +05:30
describe '#close_mr' do
2014-09-02 18:07:02 +05:30
let(:merge_request) { create(:merge_request) }
2015-04-26 12:48:37 +05:30
it { expect(service.close_mr(merge_request, merge_request.author)).to be_truthy }
2014-09-02 18:07:02 +05:30
2016-09-13 17:45:13 +05:30
it "creates new event" do
2014-09-02 18:07:02 +05:30
expect { service.close_mr(merge_request, merge_request.author) }.to change { Event.count }
end
end
2016-08-24 12:49:21 +05:30
describe '#merge_mr' do
2014-09-02 18:07:02 +05:30
let(:merge_request) { create(:merge_request) }
2015-04-26 12:48:37 +05:30
it { expect(service.merge_mr(merge_request, merge_request.author)).to be_truthy }
2014-09-02 18:07:02 +05:30
2016-09-13 17:45:13 +05:30
it "creates new event" do
2014-09-02 18:07:02 +05:30
expect { service.merge_mr(merge_request, merge_request.author) }.to change { Event.count }
end
end
2016-08-24 12:49:21 +05:30
describe '#reopen_mr' do
2014-09-02 18:07:02 +05:30
let(:merge_request) { create(:merge_request) }
2015-04-26 12:48:37 +05:30
it { expect(service.reopen_mr(merge_request, merge_request.author)).to be_truthy }
2014-09-02 18:07:02 +05:30
2016-09-13 17:45:13 +05:30
it "creates new event" do
2014-09-02 18:07:02 +05:30
expect { service.reopen_mr(merge_request, merge_request.author) }.to change { Event.count }
end
end
end
describe 'Milestone' do
let(:user) { create :user }
2016-08-24 12:49:21 +05:30
describe '#open_milestone' do
2014-09-02 18:07:02 +05:30
let(:milestone) { create(:milestone) }
2015-04-26 12:48:37 +05:30
it { expect(service.open_milestone(milestone, user)).to be_truthy }
2014-09-02 18:07:02 +05:30
2016-09-13 17:45:13 +05:30
it "creates new event" do
2014-09-02 18:07:02 +05:30
expect { service.open_milestone(milestone, user) }.to change { Event.count }
end
end
2016-08-24 12:49:21 +05:30
describe '#close_mr' do
2014-09-02 18:07:02 +05:30
let(:milestone) { create(:milestone) }
2015-04-26 12:48:37 +05:30
it { expect(service.close_milestone(milestone, user)).to be_truthy }
2014-09-02 18:07:02 +05:30
2016-09-13 17:45:13 +05:30
it "creates new event" do
2014-09-02 18:07:02 +05:30
expect { service.close_milestone(milestone, user) }.to change { Event.count }
end
end
2015-09-25 12:07:36 +05:30
2016-08-24 12:49:21 +05:30
describe '#destroy_mr' do
2015-09-25 12:07:36 +05:30
let(:milestone) { create(:milestone) }
it { expect(service.destroy_milestone(milestone, user)).to be_truthy }
2016-09-13 17:45:13 +05:30
it "creates new event" do
2015-09-25 12:07:36 +05:30
expect { service.destroy_milestone(milestone, user) }.to change { Event.count }
end
end
2014-09-02 18:07:02 +05:30
end
2017-08-17 22:00:37 +05:30
2019-12-21 20:55:43 +05:30
shared_examples_for 'service for creating a push event' do |service_class|
2017-08-17 22:00:37 +05:30
it 'creates a new event' do
2019-12-21 20:55:43 +05:30
expect { subject }.to change { Event.count }
2017-09-10 17:25:29 +05:30
end
it 'creates the push event payload' do
2019-12-21 20:55:43 +05:30
expect(service_class).to receive(:new)
2017-09-10 17:25:29 +05:30
.with(an_instance_of(PushEvent), push_data)
.and_call_original
2019-12-21 20:55:43 +05:30
subject
2017-08-17 22:00:37 +05:30
end
it 'updates user last activity' do
2019-12-21 20:55:43 +05:30
expect { subject }.to change { user.last_activity_on }.to(Date.today)
2017-09-10 17:25:29 +05:30
end
2018-03-17 18:26:18 +05:30
it 'caches the last push event for the user' do
2020-01-01 13:55:28 +05:30
expect_next_instance_of(Users::LastPushEventService) do |instance|
expect(instance).to receive(:cache_last_push_event).with(an_instance_of(PushEvent))
end
2018-03-17 18:26:18 +05:30
2019-12-21 20:55:43 +05:30
subject
2018-03-17 18:26:18 +05:30
end
2017-09-10 17:25:29 +05:30
it 'does not create any event data when an error is raised' do
payload_service = double(:service)
allow(payload_service).to receive(:execute)
.and_raise(RuntimeError)
2019-12-21 20:55:43 +05:30
allow(service_class).to receive(:new)
2017-09-10 17:25:29 +05:30
.and_return(payload_service)
2019-12-21 20:55:43 +05:30
expect { subject }.to raise_error(RuntimeError)
2017-09-10 17:25:29 +05:30
expect(Event.count).to eq(0)
expect(PushEventPayload.count).to eq(0)
2017-08-17 22:00:37 +05:30
end
end
2020-04-22 19:07:51 +05:30
describe '#wiki_event' do
let_it_be(:user) { create(:user) }
let_it_be(:wiki_page) { create(:wiki_page) }
let_it_be(:meta) { create(:wiki_page_meta, :for_wiki_page, wiki_page: wiki_page) }
Event::WIKI_ACTIONS.each do |action|
context "The action is #{action}" do
let(:event) { service.wiki_event(meta, user, action) }
2020-05-24 23:13:21 +05:30
it 'creates the event', :aggregate_failures do
2020-04-22 19:07:51 +05:30
expect(event).to have_attributes(
wiki_page?: true,
valid?: true,
persisted?: true,
action: action,
2020-05-24 23:13:21 +05:30
wiki_page: wiki_page,
author: user
2020-04-22 19:07:51 +05:30
)
end
2020-05-24 23:13:21 +05:30
it 'is idempotent', :aggregate_failures do
expect { event }.to change(Event, :count).by(1)
duplicate = nil
expect { duplicate = service.wiki_event(meta, user, action) }.not_to change(Event, :count)
expect(duplicate).to eq(event)
end
2020-04-22 19:07:51 +05:30
context 'the feature is disabled' do
before do
stub_feature_flags(wiki_events: false)
end
it 'does not create the event' do
expect { event }.not_to change(Event, :count)
end
end
end
end
(Event::ACTIONS.values - Event::WIKI_ACTIONS).each do |bad_action|
context "The action is #{bad_action}" do
it 'raises an error' do
expect { service.wiki_event(meta, user, bad_action) }.to raise_error(described_class::IllegalActionError)
end
end
end
end
2019-12-21 20:55:43 +05:30
describe '#push', :clean_gitlab_redis_shared_state do
let(:project) { create(:project) }
let(:user) { create(:user) }
let(:push_data) do
{
commits: [
{
id: '1cf19a015df3523caf0a1f9d40c98a267d6a2fc2',
message: 'This is a commit'
}
],
before: '0000000000000000000000000000000000000000',
after: '1cf19a015df3523caf0a1f9d40c98a267d6a2fc2',
total_commits_count: 1,
ref: 'refs/heads/my-branch'
}
end
subject { service.push(project, user, push_data) }
it_behaves_like 'service for creating a push event', PushEventPayloadService
end
describe '#bulk_push', :clean_gitlab_redis_shared_state do
let(:project) { create(:project) }
let(:user) { create(:user) }
let(:push_data) do
{
action: :created,
ref_count: 4,
ref_type: :branch
}
end
subject { service.bulk_push(project, user, push_data) }
it_behaves_like 'service for creating a push event', BulkPushEventPayloadService
end
2017-08-17 22:00:37 +05:30
describe 'Project' do
let(:user) { create :user }
2017-09-10 17:25:29 +05:30
let(:project) { create(:project) }
2017-08-17 22:00:37 +05:30
describe '#join_project' do
subject { service.join_project(project, user) }
it { is_expected.to be_truthy }
it { expect { subject }.to change { Event.count }.from(0).to(1) }
end
describe '#expired_leave_project' do
subject { service.expired_leave_project(project, user) }
it { is_expected.to be_truthy }
it { expect { subject }.to change { Event.count }.from(0).to(1) }
end
end
2014-09-02 18:07:02 +05:30
end