diff --git a/CHANGELOG b/CHANGELOG index f0a647393921fab0e6770ccf9acf6e207e4d2721..96c6fc3adc5f9253e0537e68a7c8007417d40818 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -58,6 +58,7 @@ v 8.11.3 (unreleased) - Allow system info page to handle case where info is unavailable - Label list shows all issues (opened or closed) with that label - Don't show resolve conflicts link before MR status is updated + - Fix "Wiki" link not appearing in navigation for projects with external wiki - Fix IE11 fork button bug !598 - Don't prevent viewing the MR when git refs for conflicts can't be found on disk - Allow system info page to handle case where info is unavailable diff --git a/app/models/ability.rb b/app/models/ability.rb index a49dd7039262df49d81f84d6a7f97837c1458728..c1df4a865f65b48571a2987422c14d3fb22c7da1 100644 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -355,7 +355,7 @@ class Ability rules += named_abilities('project_snippet') end - unless project.wiki_enabled + unless project.has_wiki? rules += named_abilities('wiki') end diff --git a/app/models/project.rb b/app/models/project.rb index 8cf093be4c3bb8ef539783e7597f11a9f4e6d3b8..edf536e2f989a51a5dcca9b600e0a4fd2be1e3f2 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -680,6 +680,10 @@ class Project < ActiveRecord::Base update_column(:has_external_issue_tracker, services.external_issue_trackers.any?) end + def has_wiki? + wiki_enabled? || has_external_wiki? + end + def external_wiki if has_external_wiki.nil? cache_has_external_wiki # Populate diff --git a/spec/models/ability_spec.rb b/spec/models/ability_spec.rb index aa3b2bbf47140e7f1e4895eae53ca92487205b02..c50ca38bdd905ed6e9cbf6e671e541fedb4695c3 100644 --- a/spec/models/ability_spec.rb +++ b/spec/models/ability_spec.rb @@ -282,4 +282,17 @@ describe Ability, lib: true do end end end + + describe '.project_disabled_features_rules' do + let(:project) { build(:project) } + + subject { described_class.project_disabled_features_rules(project) } + + context 'wiki named abilities' do + it 'disables wiki abilities if the project has no wiki' do + expect(project).to receive(:has_wiki?).and_return(false) + expect(subject).to include(:read_wiki, :create_wiki, :update_wiki, :admin_wiki) + end + end + end end diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index 9a3660012f995320f35f3ff3f657d7cbcf20786d..5475d7f1236f4789d8781c2e9735eaee6b7ab359 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -506,6 +506,18 @@ describe Project, models: true do end end + describe '#has_wiki?' do + let(:no_wiki_project) { build(:project, wiki_enabled: false, has_external_wiki: false) } + let(:wiki_enabled_project) { build(:project, wiki_enabled: true) } + let(:external_wiki_project) { build(:project, has_external_wiki: true) } + + it 'returns true if project is wiki enabled or has external wiki' do + expect(wiki_enabled_project).to have_wiki + expect(external_wiki_project).to have_wiki + expect(no_wiki_project).not_to have_wiki + end + end + describe '#external_wiki' do let(:project) { create(:project) }