summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Lopez <james@jameslopez.es>2017-05-05 16:16:02 +0200
committerJames Lopez <james@jameslopez.es>2017-05-05 16:16:02 +0200
commitce418036c763219df8239632f71ef0e9782be7ea (patch)
treeca19e128f5e5e0025424fd77db178a3837075b68
parent606584c115d5f7a22f3b5c7e0ac6803b96fe999e (diff)
downloadgitlab-ce-ce418036c763219df8239632f71ef0e9782be7ea.tar.gz
add callbacks in bulk
-rw-r--r--app/services/projects/propagate_service.rb30
-rw-r--r--spec/services/projects/propagate_service_spec.rb18
2 files changed, 42 insertions, 6 deletions
diff --git a/app/services/projects/propagate_service.rb b/app/services/projects/propagate_service.rb
index c420f24fe02..f4fae478609 100644
--- a/app/services/projects/propagate_service.rb
+++ b/app/services/projects/propagate_service.rb
@@ -35,12 +35,12 @@ module Projects
service_hash.merge('project_id' => project_id).values
end
- # Project.transaction do
- # Service.create!(service_hash_list)
- # end
- Gitlab::SQL::BulkInsert.new(service_hash.keys + ['project_id'],
- service_list,
- 'services').execute
+ Project.transaction do
+ Gitlab::SQL::BulkInsert.new(service_hash.keys + ['project_id'],
+ service_list,
+ 'services').execute
+ run_callbacks(batch)
+ end
end
def project_ids_batch
@@ -72,5 +72,23 @@ module Projects
end
end
end
+
+ def run_callbacks(batch)
+ if active_external_issue_tracker?
+ Project.where(id: batch).update_all(has_external_issue_tracker: true)
+ end
+
+ if active_external_wiki?
+ Project.where(id: batch).update_all(has_external_wiki: true)
+ end
+ end
+
+ def active_external_issue_tracker?
+ @template['category'] == 'issue_tracker' && @template['active'] && !@template['default']
+ end
+
+ def active_external_wiki?
+ @template['type'] == 'ExternalWikiService' && @template['active']
+ end
end
end
diff --git a/spec/services/projects/propagate_service_spec.rb b/spec/services/projects/propagate_service_spec.rb
index ac25c8b3d56..b8aa4de5bd1 100644
--- a/spec/services/projects/propagate_service_spec.rb
+++ b/spec/services/projects/propagate_service_spec.rb
@@ -78,5 +78,23 @@ describe Projects::PropagateService, services: true do
to change { Service.count }.by(project_total + 1)
end
end
+
+ describe 'external tracker' do
+ it 'updates the project external tracker' do
+ service_template.update(category: 'issue_tracker', default: false)
+
+ expect { described_class.propagate(service_template) }.
+ to change { project.reload.has_external_issue_tracker }.to(true)
+ end
+ end
+
+ describe 'external wiki' do
+ it 'updates the project external tracker' do
+ service_template.update(type: 'ExternalWikiService')
+
+ expect { described_class.propagate(service_template) }.
+ to change { project.reload.has_external_wiki }.to(true)
+ end
+ end
end
end