debian-mirror-gitlab/spec/requests/api/wikis_spec.rb

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

744 lines
18 KiB
Ruby
Raw Normal View History

2019-12-26 22:10:19 +05:30
# frozen_string_literal: true
2018-03-17 18:26:18 +05:30
require 'spec_helper'
# For every API endpoint we test 3 states of wikis:
# - disabled
# - enabled only for team members
# - enabled for everyone who has access
# Every state is tested for 3 user roles:
# - guest
# - developer
2018-11-18 11:00:15 +05:30
# - maintainer
2018-03-17 18:26:18 +05:30
# because they are 3 edge cases of using wiki pages.
2023-03-04 22:38:38 +05:30
RSpec.describe API::Wikis, feature_category: :wiki do
2019-12-04 20:38:33 +05:30
include WorkhorseHelpers
2021-04-17 20:07:23 +05:30
include AfterNextHelpers
2019-12-04 20:38:33 +05:30
2021-09-04 01:27:46 +05:30
let_it_be(:user) { create(:user) }
let_it_be(:group) { create(:group).tap { |g| g.add_owner(user) } }
let_it_be(:group_project) { create(:project, :wiki_repo, namespace: group) }
let_it_be(:developer) { create(:user) }
let_it_be(:maintainer) { create(:user) }
let_it_be(:project_wiki_disabled) do
create(:project, :wiki_repo, :wiki_disabled).tap do |project|
project.add_developer(developer)
project.add_maintainer(maintainer)
end
end
2018-03-17 18:26:18 +05:30
let(:project_wiki) { create(:project_wiki, project: project, user: user) }
let(:payload) { { content: 'content', format: 'rdoc', title: 'title' } }
2022-05-07 20:08:51 +05:30
let(:expected_keys_with_content) { %w(content format slug title encoding) }
2018-03-17 18:26:18 +05:30
let(:expected_keys_without_content) { %w(format slug title) }
2020-07-28 23:09:34 +05:30
let(:wiki) { project_wiki }
2018-03-17 18:26:18 +05:30
2020-07-28 23:09:34 +05:30
shared_examples_for 'wiki API 404 Project Not Found' do
include_examples 'wiki API 404 Not Found', 'Project'
2018-11-20 20:47:30 +05:30
end
2018-03-17 18:26:18 +05:30
describe 'GET /projects/:id/wikis' do
let(:url) { "/projects/#{project.id}/wikis" }
context 'when wiki is disabled' do
2021-09-04 01:27:46 +05:30
let(:project) { project_wiki_disabled }
2018-03-17 18:26:18 +05:30
context 'when user is guest' do
before do
get api(url)
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 404 Project Not Found'
2018-03-17 18:26:18 +05:30
end
context 'when user is developer' do
before do
2021-09-04 01:27:46 +05:30
get api(url, developer)
2018-03-17 18:26:18 +05:30
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 403 Forbidden'
2018-03-17 18:26:18 +05:30
end
2018-11-18 11:00:15 +05:30
context 'when user is maintainer' do
2018-03-17 18:26:18 +05:30
before do
2021-09-04 01:27:46 +05:30
get api(url, maintainer)
2018-03-17 18:26:18 +05:30
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 403 Forbidden'
2018-03-17 18:26:18 +05:30
end
end
context 'when wiki is available only for team members' do
2018-10-15 14:42:47 +05:30
let(:project) { create(:project, :wiki_repo, :wiki_private) }
2018-03-17 18:26:18 +05:30
context 'when user is guest' do
before do
get api(url)
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 404 Project Not Found'
2018-03-17 18:26:18 +05:30
end
context 'when user is developer' do
before do
project.add_developer(user)
end
2020-07-28 23:09:34 +05:30
include_examples 'wikis API returns list of wiki pages'
2018-03-17 18:26:18 +05:30
end
2018-11-18 11:00:15 +05:30
context 'when user is maintainer' do
2018-03-17 18:26:18 +05:30
before do
2018-11-18 11:00:15 +05:30
project.add_maintainer(user)
2018-03-17 18:26:18 +05:30
end
2020-07-28 23:09:34 +05:30
include_examples 'wikis API returns list of wiki pages'
2018-03-17 18:26:18 +05:30
end
end
context 'when wiki is available for everyone with access' do
2018-10-15 14:42:47 +05:30
let(:project) { create(:project, :wiki_repo) }
2018-03-17 18:26:18 +05:30
context 'when user is guest' do
before do
get api(url)
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 404 Project Not Found'
2018-03-17 18:26:18 +05:30
end
context 'when user is developer' do
before do
project.add_developer(user)
end
2020-07-28 23:09:34 +05:30
include_examples 'wikis API returns list of wiki pages'
2018-03-17 18:26:18 +05:30
end
2018-11-18 11:00:15 +05:30
context 'when user is maintainer' do
2018-03-17 18:26:18 +05:30
before do
2018-11-18 11:00:15 +05:30
project.add_maintainer(user)
2018-03-17 18:26:18 +05:30
end
2020-07-28 23:09:34 +05:30
include_examples 'wikis API returns list of wiki pages'
2018-03-17 18:26:18 +05:30
end
end
end
describe 'GET /projects/:id/wikis/:slug' do
let(:page) { create(:wiki_page, wiki: project.wiki) }
let(:url) { "/projects/#{project.id}/wikis/#{page.slug}" }
2022-05-07 20:08:51 +05:30
let(:params) { {} }
subject(:request) { get api(url, user), params: params }
2018-03-17 18:26:18 +05:30
context 'when wiki is disabled' do
2021-09-04 01:27:46 +05:30
let(:project) { project_wiki_disabled }
2018-03-17 18:26:18 +05:30
2022-05-07 20:08:51 +05:30
before do
request
end
2018-03-17 18:26:18 +05:30
context 'when user is guest' do
2022-05-07 20:08:51 +05:30
let(:user) { nil }
2018-03-17 18:26:18 +05:30
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 404 Project Not Found'
2018-03-17 18:26:18 +05:30
end
context 'when user is developer' do
2022-05-07 20:08:51 +05:30
let(:user) { developer }
2018-03-17 18:26:18 +05:30
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 403 Forbidden'
2018-03-17 18:26:18 +05:30
end
2018-11-18 11:00:15 +05:30
context 'when user is maintainer' do
2022-05-07 20:08:51 +05:30
let(:user) { maintainer }
2018-03-17 18:26:18 +05:30
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 403 Forbidden'
2018-03-17 18:26:18 +05:30
end
end
context 'when wiki is available only for team members' do
2022-05-07 20:08:51 +05:30
let_it_be_with_reload(:project) { create(:project, :wiki_repo, :wiki_private) }
2018-03-17 18:26:18 +05:30
context 'when user is guest' do
before do
2022-05-07 20:08:51 +05:30
request
2018-03-17 18:26:18 +05:30
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 404 Project Not Found'
2018-03-17 18:26:18 +05:30
end
context 'when user is developer' do
before do
project.add_developer(user)
end
2020-07-28 23:09:34 +05:30
include_examples 'wikis API returns wiki page'
2018-03-17 18:26:18 +05:30
context 'when page is not existing' do
let(:url) { "/projects/#{project.id}/wikis/unknown" }
2022-05-07 20:08:51 +05:30
before do
request
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 404 Wiki Page Not Found'
2018-03-17 18:26:18 +05:30
end
end
2018-11-18 11:00:15 +05:30
context 'when user is maintainer' do
2018-03-17 18:26:18 +05:30
before do
2018-11-18 11:00:15 +05:30
project.add_maintainer(user)
2018-03-17 18:26:18 +05:30
end
2020-07-28 23:09:34 +05:30
include_examples 'wikis API returns wiki page'
2018-03-17 18:26:18 +05:30
context 'when page is not existing' do
let(:url) { "/projects/#{project.id}/wikis/unknown" }
2022-05-07 20:08:51 +05:30
before do
request
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 404 Wiki Page Not Found'
2018-03-17 18:26:18 +05:30
end
end
end
context 'when wiki is available for everyone with access' do
2022-05-07 20:08:51 +05:30
let_it_be_with_reload(:project) { create(:project, :wiki_repo) }
2018-03-17 18:26:18 +05:30
context 'when user is guest' do
2022-05-07 20:08:51 +05:30
let(:user) { nil }
2018-03-17 18:26:18 +05:30
before do
2022-05-07 20:08:51 +05:30
request
2018-03-17 18:26:18 +05:30
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 404 Project Not Found'
2018-03-17 18:26:18 +05:30
end
context 'when user is developer' do
before do
project.add_developer(user)
end
2020-07-28 23:09:34 +05:30
include_examples 'wikis API returns wiki page'
2018-03-17 18:26:18 +05:30
context 'when page is not existing' do
let(:url) { "/projects/#{project.id}/wikis/unknown" }
2022-05-07 20:08:51 +05:30
before do
request
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 404 Wiki Page Not Found'
2018-03-17 18:26:18 +05:30
end
end
2018-11-18 11:00:15 +05:30
context 'when user is maintainer' do
2018-03-17 18:26:18 +05:30
before do
2018-11-18 11:00:15 +05:30
project.add_maintainer(user)
2018-03-17 18:26:18 +05:30
end
2020-07-28 23:09:34 +05:30
include_examples 'wikis API returns wiki page'
2018-03-17 18:26:18 +05:30
context 'when page is not existing' do
let(:url) { "/projects/#{project.id}/wikis/unknown" }
2022-05-07 20:08:51 +05:30
before do
request
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 404 Wiki Page Not Found'
2018-03-17 18:26:18 +05:30
end
end
2022-07-23 23:45:48 +05:30
context 'when content contains a reference' do
let(:issue) { create(:issue, project: project) }
let(:params) { { render_html: true } }
let(:page) { create(:wiki_page, wiki: project.wiki, title: 'page_with_ref', content: issue.to_reference) }
let(:expected_content) { %r{<a href=".*#{issue.iid}".*>#{issue.to_reference}</a>} }
before do
project.add_developer(user)
request
end
it 'expands the reference in the content' do
expect(response).to have_gitlab_http_status(:ok)
expect(json_response['content']).to match(expected_content)
end
end
2018-03-17 18:26:18 +05:30
end
end
describe 'POST /projects/:id/wikis' do
let(:payload) { { title: 'title', content: 'content' } }
let(:url) { "/projects/#{project.id}/wikis" }
context 'when wiki is disabled' do
2021-09-04 01:27:46 +05:30
let(:project) { project_wiki_disabled }
2018-03-17 18:26:18 +05:30
context 'when user is guest' do
before do
2019-02-15 15:39:39 +05:30
post(api(url), params: payload)
2018-03-17 18:26:18 +05:30
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 404 Project Not Found'
2018-03-17 18:26:18 +05:30
end
context 'when user is developer' do
before do
2021-09-04 01:27:46 +05:30
post(api(url, developer), params: payload)
2018-03-17 18:26:18 +05:30
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 403 Forbidden'
2018-03-17 18:26:18 +05:30
end
2018-11-18 11:00:15 +05:30
context 'when user is maintainer' do
2018-03-17 18:26:18 +05:30
before do
2021-09-04 01:27:46 +05:30
post(api(url, maintainer), params: payload)
2018-03-17 18:26:18 +05:30
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 403 Forbidden'
2018-03-17 18:26:18 +05:30
end
end
context 'when wiki is available only for team members' do
2018-10-15 14:42:47 +05:30
let(:project) { create(:project, :wiki_private, :wiki_repo) }
2018-03-17 18:26:18 +05:30
context 'when user is guest' do
before do
2019-02-15 15:39:39 +05:30
post(api(url), params: payload)
2018-03-17 18:26:18 +05:30
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 404 Project Not Found'
2018-03-17 18:26:18 +05:30
end
context 'when user is developer' do
before do
project.add_developer(user)
end
2020-07-28 23:09:34 +05:30
include_examples 'wikis API creates wiki page'
2018-03-17 18:26:18 +05:30
end
2018-11-18 11:00:15 +05:30
context 'when user is maintainer' do
2018-03-17 18:26:18 +05:30
before do
2018-11-18 11:00:15 +05:30
project.add_maintainer(user)
2018-03-17 18:26:18 +05:30
end
2020-07-28 23:09:34 +05:30
include_examples 'wikis API creates wiki page'
2018-03-17 18:26:18 +05:30
end
end
context 'when wiki is available for everyone with access' do
2018-10-15 14:42:47 +05:30
let(:project) { create(:project, :wiki_repo) }
2018-03-17 18:26:18 +05:30
context 'when user is guest' do
before do
2019-02-15 15:39:39 +05:30
post(api(url), params: payload)
2018-03-17 18:26:18 +05:30
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 404 Project Not Found'
2018-03-17 18:26:18 +05:30
end
context 'when user is developer' do
before do
project.add_developer(user)
end
2020-07-28 23:09:34 +05:30
include_examples 'wikis API creates wiki page'
2018-03-17 18:26:18 +05:30
end
2018-11-18 11:00:15 +05:30
context 'when user is maintainer' do
2018-03-17 18:26:18 +05:30
before do
2018-11-18 11:00:15 +05:30
project.add_maintainer(user)
2018-03-17 18:26:18 +05:30
end
2020-07-28 23:09:34 +05:30
include_examples 'wikis API creates wiki page'
2018-03-17 18:26:18 +05:30
end
end
end
describe 'PUT /projects/:id/wikis/:slug' do
let(:page) { create(:wiki_page, wiki: project_wiki) }
let(:payload) { { title: 'new title', content: 'new content' } }
let(:url) { "/projects/#{project.id}/wikis/#{page.slug}" }
context 'when wiki is disabled' do
2018-10-15 14:42:47 +05:30
let(:project) { create(:project, :wiki_disabled, :wiki_repo) }
2018-03-17 18:26:18 +05:30
context 'when user is guest' do
before do
2019-02-15 15:39:39 +05:30
put(api(url), params: payload)
2018-03-17 18:26:18 +05:30
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 404 Project Not Found'
2018-03-17 18:26:18 +05:30
end
context 'when user is developer' do
before do
project.add_developer(user)
2019-02-15 15:39:39 +05:30
put(api(url, user), params: payload)
2018-03-17 18:26:18 +05:30
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 403 Forbidden'
2018-03-17 18:26:18 +05:30
end
2018-11-18 11:00:15 +05:30
context 'when user is maintainer' do
2018-03-17 18:26:18 +05:30
before do
2018-11-18 11:00:15 +05:30
project.add_maintainer(user)
2018-03-17 18:26:18 +05:30
2019-02-15 15:39:39 +05:30
put(api(url, user), params: payload)
2018-03-17 18:26:18 +05:30
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 403 Forbidden'
2018-03-17 18:26:18 +05:30
end
end
context 'when wiki is available only for team members' do
2018-10-15 14:42:47 +05:30
let(:project) { create(:project, :wiki_private, :wiki_repo) }
2018-03-17 18:26:18 +05:30
context 'when user is guest' do
before do
2019-02-15 15:39:39 +05:30
put(api(url), params: payload)
2018-03-17 18:26:18 +05:30
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 404 Project Not Found'
2018-03-17 18:26:18 +05:30
end
context 'when user is developer' do
before do
project.add_developer(user)
end
2020-07-28 23:09:34 +05:30
include_examples 'wikis API updates wiki page'
2018-03-17 18:26:18 +05:30
context 'when page is not existing' do
let(:url) { "/projects/#{project.id}/wikis/unknown" }
2019-07-07 11:18:12 +05:30
before do
put(api(url, user), params: payload)
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 404 Wiki Page Not Found'
2018-03-17 18:26:18 +05:30
end
end
2018-11-18 11:00:15 +05:30
context 'when user is maintainer' do
2018-03-17 18:26:18 +05:30
before do
2018-11-18 11:00:15 +05:30
project.add_maintainer(user)
2018-03-17 18:26:18 +05:30
end
2020-07-28 23:09:34 +05:30
include_examples 'wikis API updates wiki page'
2018-03-17 18:26:18 +05:30
context 'when page is not existing' do
let(:url) { "/projects/#{project.id}/wikis/unknown" }
2019-07-07 11:18:12 +05:30
before do
put(api(url, user), params: payload)
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 404 Wiki Page Not Found'
2018-03-17 18:26:18 +05:30
end
end
end
context 'when wiki is available for everyone with access' do
2018-10-15 14:42:47 +05:30
let(:project) { create(:project, :wiki_repo) }
2018-03-17 18:26:18 +05:30
context 'when user is guest' do
before do
2019-02-15 15:39:39 +05:30
put(api(url), params: payload)
2018-03-17 18:26:18 +05:30
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 404 Project Not Found'
2018-03-17 18:26:18 +05:30
end
context 'when user is developer' do
before do
project.add_developer(user)
end
2020-07-28 23:09:34 +05:30
include_examples 'wikis API updates wiki page'
2018-03-17 18:26:18 +05:30
context 'when page is not existing' do
let(:url) { "/projects/#{project.id}/wikis/unknown" }
2019-07-07 11:18:12 +05:30
before do
put(api(url, user), params: payload)
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 404 Wiki Page Not Found'
2018-03-17 18:26:18 +05:30
end
end
2018-11-18 11:00:15 +05:30
context 'when user is maintainer' do
2018-03-17 18:26:18 +05:30
before do
2018-11-18 11:00:15 +05:30
project.add_maintainer(user)
2018-03-17 18:26:18 +05:30
end
2020-07-28 23:09:34 +05:30
include_examples 'wikis API updates wiki page'
2018-03-17 18:26:18 +05:30
context 'when page is not existing' do
let(:url) { "/projects/#{project.id}/wikis/unknown" }
2019-07-07 11:18:12 +05:30
before do
put(api(url, user), params: payload)
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 404 Wiki Page Not Found'
2018-03-17 18:26:18 +05:30
end
end
end
context 'when wiki belongs to a group project' do
2021-09-04 01:27:46 +05:30
let(:project) { group_project }
2018-03-17 18:26:18 +05:30
2020-07-28 23:09:34 +05:30
include_examples 'wikis API updates wiki page'
2018-03-17 18:26:18 +05:30
end
end
describe 'DELETE /projects/:id/wikis/:slug' do
let(:page) { create(:wiki_page, wiki: project_wiki) }
let(:url) { "/projects/#{project.id}/wikis/#{page.slug}" }
context 'when wiki is disabled' do
2018-10-15 14:42:47 +05:30
let(:project) { create(:project, :wiki_disabled, :wiki_repo) }
2018-03-17 18:26:18 +05:30
context 'when user is guest' do
before do
delete(api(url))
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 404 Project Not Found'
2018-03-17 18:26:18 +05:30
end
context 'when user is developer' do
before do
project.add_developer(user)
delete(api(url, user))
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 403 Forbidden'
2018-03-17 18:26:18 +05:30
end
2018-11-18 11:00:15 +05:30
context 'when user is maintainer' do
2018-03-17 18:26:18 +05:30
before do
2018-11-18 11:00:15 +05:30
project.add_maintainer(user)
2018-03-17 18:26:18 +05:30
delete(api(url, user))
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 403 Forbidden'
2018-03-17 18:26:18 +05:30
end
end
context 'when wiki is available only for team members' do
2018-10-15 14:42:47 +05:30
let(:project) { create(:project, :wiki_private, :wiki_repo) }
2018-03-17 18:26:18 +05:30
context 'when user is guest' do
before do
delete(api(url))
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 404 Project Not Found'
2018-03-17 18:26:18 +05:30
end
context 'when user is developer' do
before do
project.add_developer(user)
delete(api(url, user))
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 403 Forbidden'
2018-03-17 18:26:18 +05:30
end
2018-11-18 11:00:15 +05:30
context 'when user is maintainer' do
2018-03-17 18:26:18 +05:30
before do
2018-11-18 11:00:15 +05:30
project.add_maintainer(user)
2018-03-17 18:26:18 +05:30
delete(api(url, user))
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 204 No Content'
2018-03-17 18:26:18 +05:30
end
end
context 'when wiki is available for everyone with access' do
2018-10-15 14:42:47 +05:30
let(:project) { create(:project, :wiki_repo) }
2018-03-17 18:26:18 +05:30
context 'when user is guest' do
before do
delete(api(url))
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 404 Project Not Found'
2018-03-17 18:26:18 +05:30
end
context 'when user is developer' do
before do
project.add_developer(user)
delete(api(url, user))
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 403 Forbidden'
2018-03-17 18:26:18 +05:30
end
2018-11-18 11:00:15 +05:30
context 'when user is maintainer' do
2018-03-17 18:26:18 +05:30
before do
2018-11-18 11:00:15 +05:30
project.add_maintainer(user)
2018-03-17 18:26:18 +05:30
delete(api(url, user))
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 204 No Content'
2018-03-17 18:26:18 +05:30
context 'when page is not existing' do
let(:url) { "/projects/#{project.id}/wikis/unknown" }
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 404 Wiki Page Not Found'
2018-03-17 18:26:18 +05:30
end
end
2021-04-17 20:07:23 +05:30
context 'when there is an error deleting the page' do
it 'returns 422' do
project.add_maintainer(user)
allow_next(WikiPages::DestroyService, current_user: user, container: project)
.to receive(:execute).and_return(ServiceResponse.error(message: 'foo'))
delete(api(url, user))
expect(response).to have_gitlab_http_status(:unprocessable_entity)
expect(json_response['message']).to eq 'foo'
end
end
2018-03-17 18:26:18 +05:30
end
context 'when wiki belongs to a group project' do
2018-10-15 14:42:47 +05:30
let(:project) { create(:project, :wiki_repo, namespace: group) }
2018-03-17 18:26:18 +05:30
before do
delete(api(url, user))
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 204 No Content'
2018-03-17 18:26:18 +05:30
end
end
2018-11-20 20:47:30 +05:30
describe 'POST /projects/:id/wikis/attachments' do
let(:payload) { { file: fixture_file_upload('spec/fixtures/dk.png') } }
let(:url) { "/projects/#{project.id}/wikis/attachments" }
let(:file_path) { "#{Wikis::CreateAttachmentService::ATTACHMENT_PATH}/fixed_hex/dk.png" }
2021-09-30 23:02:18 +05:30
let(:branch) { wiki.default_branch }
2018-11-20 20:47:30 +05:30
let(:result_hash) do
{
file_name: 'dk.png',
file_path: file_path,
2021-09-30 23:02:18 +05:30
branch: branch,
2018-11-20 20:47:30 +05:30
link: {
url: file_path,
markdown: "![dk](#{file_path})"
}
}
end
context 'when wiki is disabled' do
let(:project) { create(:project, :wiki_disabled, :wiki_repo) }
context 'when user is guest' do
before do
2019-02-15 15:39:39 +05:30
post(api(url), params: payload)
2018-11-20 20:47:30 +05:30
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 404 Project Not Found'
2018-11-20 20:47:30 +05:30
end
context 'when user is developer' do
before do
project.add_developer(user)
2019-02-15 15:39:39 +05:30
post(api(url, user), params: payload)
2018-11-20 20:47:30 +05:30
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 403 Forbidden'
2018-11-20 20:47:30 +05:30
end
context 'when user is maintainer' do
before do
project.add_maintainer(user)
2019-02-15 15:39:39 +05:30
post(api(url, user), params: payload)
2018-11-20 20:47:30 +05:30
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 403 Forbidden'
2018-11-20 20:47:30 +05:30
end
end
context 'when wiki is available only for team members' do
let(:project) { create(:project, :wiki_private, :wiki_repo) }
context 'when user is guest' do
before do
2019-02-15 15:39:39 +05:30
post(api(url), params: payload)
2018-11-20 20:47:30 +05:30
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 404 Project Not Found'
2018-11-20 20:47:30 +05:30
end
context 'when user is developer' do
before do
project.add_developer(user)
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API uploads wiki attachment'
2018-11-20 20:47:30 +05:30
end
context 'when user is maintainer' do
before do
project.add_maintainer(user)
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API uploads wiki attachment'
2018-11-20 20:47:30 +05:30
end
end
context 'when wiki is available for everyone with access' do
let(:project) { create(:project, :wiki_repo) }
context 'when user is guest' do
before do
2019-02-15 15:39:39 +05:30
post(api(url), params: payload)
2018-11-20 20:47:30 +05:30
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API 404 Project Not Found'
2018-11-20 20:47:30 +05:30
end
context 'when user is developer' do
before do
project.add_developer(user)
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API uploads wiki attachment'
2018-11-20 20:47:30 +05:30
end
context 'when user is maintainer' do
before do
project.add_maintainer(user)
end
2020-07-28 23:09:34 +05:30
include_examples 'wiki API uploads wiki attachment'
2018-11-20 20:47:30 +05:30
end
end
end
2018-03-17 18:26:18 +05:30
end