From f8afe47a87ca880c95163aa7e731638a730ed14b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Coutable?= Date: Thu, 21 Jul 2016 10:36:02 +0200 Subject: [PATCH] Make Service.external_wikis return only active external wikis MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Rémy Coutable --- app/models/service.rb | 2 +- ...5_nullify_has_external_wiki_in_projects.rb | 13 ++++ db/schema.rb | 2 +- spec/models/project_spec.rb | 64 +++++++++++-------- 4 files changed, 52 insertions(+), 29 deletions(-) create mode 100644 db/migrate/20160721081015_nullify_has_external_wiki_in_projects.rb diff --git a/app/models/service.rb b/app/models/service.rb index a8e1cc2f422..40cd9b861f0 100644 --- a/app/models/service.rb +++ b/app/models/service.rb @@ -26,7 +26,7 @@ class Service < ActiveRecord::Base scope :visible, -> { where.not(type: ['GitlabIssueTrackerService', 'GitlabCiService']) } scope :issue_trackers, -> { where(category: 'issue_tracker') } - scope :external_wikis, -> { where(type: 'ExternalWikiService') } + scope :external_wikis, -> { where(type: 'ExternalWikiService').active } scope :active, -> { where(active: true) } scope :without_defaults, -> { where(default: false) } diff --git a/db/migrate/20160721081015_nullify_has_external_wiki_in_projects.rb b/db/migrate/20160721081015_nullify_has_external_wiki_in_projects.rb new file mode 100644 index 00000000000..4bb5bb79632 --- /dev/null +++ b/db/migrate/20160721081015_nullify_has_external_wiki_in_projects.rb @@ -0,0 +1,13 @@ +class NullifyHasExternalWikiInProjects < ActiveRecord::Migration + include Gitlab::Database::MigrationHelpers + + # Set this constant to true if this migration requires downtime. + DOWNTIME = false + + def up + execute("UPDATE projects SET has_external_wiki = NULL") + end + + def down + end +end diff --git a/db/schema.rb b/db/schema.rb index c7876426424..d541e1cccb7 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20160718153603) do +ActiveRecord::Schema.define(version: 20160721081015) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index a2b089c51e2..4c343154b0e 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -458,44 +458,54 @@ describe Project, models: true do end end - describe "#cache_has_external_wiki" do + describe '#external_wiki' do let(:project) { create(:project) } - it "stores true if there is an external wiki" do - services = double(:service, external_wikis: [ExternalWikiService.new]) - expect(project).to receive(:services).and_return(services) + context 'with an active external wiki' do + before do + create(:service, project: project, type: 'ExternalWikiService', active: true) + project.external_wiki + end - expect do - project.cache_has_external_wiki - end.to change { project.has_external_wiki }.to(true) + it 'sets :has_external_wiki as true' do + expect(project.has_external_wiki).to be(true) + end + + it 'sets :has_external_wiki as false if an external wiki service is destroyed later' do + expect(project.has_external_wiki).to be(true) + + project.services.external_wikis.first.destroy + + expect(project.has_external_wiki).to be(false) + end end - it "stores false if there is no external wiki" do - services = double(:service, external_wikis: []) - expect(project).to receive(:services).and_return(services) + context 'with an inactive external wiki' do + before do + create(:service, project: project, type: 'ExternalWikiService', active: false) + end - expect do - project.cache_has_external_wiki - end.to change { project.has_external_wiki }.to(false) + it 'sets :has_external_wiki as false' do + expect(project.has_external_wiki).to be(false) + end end - it "changes to true if an external wiki service is created later" do - expect do - project.cache_has_external_wiki - end.to change { project.has_external_wiki }.to(false) + context 'with no external wiki' do + before do + project.external_wiki + end - expect do - create(:service, type: "ExternalWikiService", project: project) - end.to change { project.has_external_wiki }.to(true) - end + it 'sets :has_external_wiki as false' do + expect(project.has_external_wiki).to be(false) + end - it "changes to false if an external wiki service is destroyed later" do - service = create(:service, type: "ExternalWikiService", project: project) - expect(project.has_external_wiki).to be_truthy + it 'sets :has_external_wiki as true if an external wiki service is created later' do + expect(project.has_external_wiki).to be(false) - expect do - service.destroy - end.to change { project.has_external_wiki }.to(false) + create(:service, project: project, type: 'ExternalWikiService', active: true) + + expect(project.has_external_wiki).to be(true) + end end end