summaryrefslogtreecommitdiff
path: root/spec/services/wiki_pages
diff options
context:
space:
mode:
Diffstat (limited to 'spec/services/wiki_pages')
-rw-r--r--spec/services/wiki_pages/base_service_spec.rb20
-rw-r--r--spec/services/wiki_pages/create_service_spec.rb49
-rw-r--r--spec/services/wiki_pages/destroy_service_spec.rb22
-rw-r--r--spec/services/wiki_pages/update_service_spec.rb52
4 files changed, 115 insertions, 28 deletions
diff --git a/spec/services/wiki_pages/base_service_spec.rb b/spec/services/wiki_pages/base_service_spec.rb
index 2e70246c6f2..4c44c195ac8 100644
--- a/spec/services/wiki_pages/base_service_spec.rb
+++ b/spec/services/wiki_pages/base_service_spec.rb
@@ -6,22 +6,24 @@ describe WikiPages::BaseService do
let(:project) { double('project') }
let(:user) { double('user') }
- subject(:service) { described_class.new(project, user, {}) }
-
describe '#increment_usage' do
counter = Gitlab::UsageDataCounters::WikiPageCounter
error = counter::UnknownEvent
- it 'raises an error on unknown events' do
- expect { subject.send(:increment_usage, :bad_event) }.to raise_error error
- end
+ let(:subject) { bad_service_class.new(project, user, {}) }
- context 'the event is valid' do
- counter::KNOWN_EVENTS.each do |e|
- it "updates the #{e} counter" do
- expect { subject.send(:increment_usage, e) }.to change { counter.read(e) }
+ context 'the class implements usage_counter_action incorrectly' do
+ let(:bad_service_class) do
+ Class.new(described_class) do
+ def usage_counter_action
+ :bad_event
+ end
end
end
+
+ it 'raises an error on unknown events' do
+ expect { subject.send(:increment_usage) }.to raise_error(error)
+ end
end
end
end
diff --git a/spec/services/wiki_pages/create_service_spec.rb b/spec/services/wiki_pages/create_service_spec.rb
index ef03a2e9788..d63d62e9492 100644
--- a/spec/services/wiki_pages/create_service_spec.rb
+++ b/spec/services/wiki_pages/create_service_spec.rb
@@ -5,19 +5,16 @@ require 'spec_helper'
describe WikiPages::CreateService do
let(:project) { create(:project, :wiki_repo) }
let(:user) { create(:user) }
+ let(:page_title) { 'Title' }
let(:opts) do
{
- title: 'Title',
+ title: page_title,
content: 'Content for wiki page',
format: 'markdown'
}
end
- let(:bad_opts) do
- { title: '' }
- end
-
subject(:service) { described_class.new(project, user, opts) }
before do
@@ -35,8 +32,7 @@ describe WikiPages::CreateService do
end
it 'executes webhooks' do
- expect(service).to receive(:execute_hooks).once
- .with(instance_of(WikiPage), 'create')
+ expect(service).to receive(:execute_hooks).once.with(WikiPage)
service.execute
end
@@ -47,8 +43,41 @@ describe WikiPages::CreateService do
expect { service.execute }.to change { counter.read(:create) }.by 1
end
+ shared_examples 'correct event created' do
+ it 'creates appropriate events' do
+ expect { service.execute }.to change { Event.count }.by 1
+
+ expect(Event.recent.first).to have_attributes(
+ action: Event::CREATED,
+ target: have_attributes(canonical_slug: page_title)
+ )
+ end
+ end
+
+ context 'the new page is at the top level' do
+ let(:page_title) { 'root-level-page' }
+
+ include_examples 'correct event created'
+ end
+
+ context 'the new page is in a subsection' do
+ let(:page_title) { 'subsection/page' }
+
+ include_examples 'correct event created'
+ end
+
+ context 'the feature is disabled' do
+ before do
+ stub_feature_flags(wiki_events: false)
+ end
+
+ it 'does not record the activity' do
+ expect { service.execute }.not_to change(Event, :count)
+ end
+ end
+
context 'when the options are bad' do
- subject(:service) { described_class.new(project, user, bad_opts) }
+ let(:page_title) { '' }
it 'does not count a creation event' do
counter = Gitlab::UsageDataCounters::WikiPageCounter
@@ -56,6 +85,10 @@ describe WikiPages::CreateService do
expect { service.execute }.not_to change { counter.read(:create) }
end
+ it 'does not record the activity' do
+ expect { service.execute }.not_to change(Event, :count)
+ end
+
it 'reports the error' do
expect(service.execute).to be_invalid
.and have_attributes(errors: be_present)
diff --git a/spec/services/wiki_pages/destroy_service_spec.rb b/spec/services/wiki_pages/destroy_service_spec.rb
index 350a7eb123b..e205bedfdb9 100644
--- a/spec/services/wiki_pages/destroy_service_spec.rb
+++ b/spec/services/wiki_pages/destroy_service_spec.rb
@@ -15,8 +15,7 @@ describe WikiPages::DestroyService do
describe '#execute' do
it 'executes webhooks' do
- expect(service).to receive(:execute_hooks).once
- .with(instance_of(WikiPage), 'delete')
+ expect(service).to receive(:execute_hooks).once.with(page)
service.execute(page)
end
@@ -27,10 +26,29 @@ describe WikiPages::DestroyService do
expect { service.execute(page) }.to change { counter.read(:delete) }.by 1
end
+ it 'creates a new wiki page deletion event' do
+ expect { service.execute(page) }.to change { Event.count }.by 1
+
+ expect(Event.recent.first).to have_attributes(
+ action: Event::DESTROYED,
+ target: have_attributes(canonical_slug: page.slug)
+ )
+ end
+
it 'does not increment the delete count if the deletion failed' do
counter = Gitlab::UsageDataCounters::WikiPageCounter
expect { service.execute(nil) }.not_to change { counter.read(:delete) }
end
end
+
+ context 'the feature is disabled' do
+ before do
+ stub_feature_flags(wiki_events: false)
+ end
+
+ it 'does not record the activity' do
+ expect { service.execute(page) }.not_to change(Event, :count)
+ end
+ end
end
diff --git a/spec/services/wiki_pages/update_service_spec.rb b/spec/services/wiki_pages/update_service_spec.rb
index d5f46e7b2db..3eb486833e6 100644
--- a/spec/services/wiki_pages/update_service_spec.rb
+++ b/spec/services/wiki_pages/update_service_spec.rb
@@ -6,20 +6,17 @@ describe WikiPages::UpdateService do
let(:project) { create(:project) }
let(:user) { create(:user) }
let(:page) { create(:wiki_page) }
+ let(:page_title) { 'New Title' }
let(:opts) do
{
content: 'New content for wiki page',
format: 'markdown',
message: 'New wiki message',
- title: 'New Title'
+ title: page_title
}
end
- let(:bad_opts) do
- { title: '' }
- end
-
subject(:service) { described_class.new(project, user, opts) }
before do
@@ -34,12 +31,11 @@ describe WikiPages::UpdateService do
expect(updated_page.message).to eq(opts[:message])
expect(updated_page.content).to eq(opts[:content])
expect(updated_page.format).to eq(opts[:format].to_sym)
- expect(updated_page.title).to eq(opts[:title])
+ expect(updated_page.title).to eq(page_title)
end
it 'executes webhooks' do
- expect(service).to receive(:execute_hooks).once
- .with(instance_of(WikiPage), 'update')
+ expect(service).to receive(:execute_hooks).once.with(WikiPage)
service.execute(page)
end
@@ -50,8 +46,42 @@ describe WikiPages::UpdateService do
expect { service.execute page }.to change { counter.read(:update) }.by 1
end
+ shared_examples 'adds activity event' do
+ it 'adds a new wiki page activity event' do
+ expect { service.execute(page) }.to change { Event.count }.by 1
+
+ expect(Event.recent.first).to have_attributes(
+ action: Event::UPDATED,
+ wiki_page: page,
+ target_title: page.title
+ )
+ end
+ end
+
+ context 'the page is at the top level' do
+ let(:page_title) { 'Top level page' }
+
+ include_examples 'adds activity event'
+ end
+
+ context 'the page is in a subsection' do
+ let(:page_title) { 'Subsection / secondary page' }
+
+ include_examples 'adds activity event'
+ end
+
+ context 'the feature is disabled' do
+ before do
+ stub_feature_flags(wiki_events: false)
+ end
+
+ it 'does not record the activity' do
+ expect { service.execute(page) }.not_to change(Event, :count)
+ end
+ end
+
context 'when the options are bad' do
- subject(:service) { described_class.new(project, user, bad_opts) }
+ let(:page_title) { '' }
it 'does not count an edit event' do
counter = Gitlab::UsageDataCounters::WikiPageCounter
@@ -59,6 +89,10 @@ describe WikiPages::UpdateService do
expect { service.execute page }.not_to change { counter.read(:update) }
end
+ it 'does not record the activity' do
+ expect { service.execute page }.not_to change(Event, :count)
+ end
+
it 'reports the error' do
expect(service.execute page).to be_invalid
.and have_attributes(errors: be_present)