diff options
author | Gilbert Roulot <groulot@gitlab.com> | 2018-11-05 14:45:36 +0100 |
---|---|---|
committer | Kamil TrzciĆski <ayufan@ayufan.eu> | 2018-12-11 11:39:22 +0100 |
commit | e6226e8cb3d7e79500482ba2cef604133f667381 (patch) | |
tree | acf0f3d0b822f122da9125333f210ccce477c0d0 /app/services/ci | |
parent | 85f430cb3cde4ff8c4d24c1b2a426670e38dd44f (diff) | |
download | gitlab-ce-e6226e8cb3d7e79500482ba2cef604133f667381.tar.gz |
Generalise test compare service
It adds a base class for CompareTestReportsService
containing common code with CompareLicenseManagementReportsService
which is present in GitLab Enterprise Edition.
Diffstat (limited to 'app/services/ci')
-rw-r--r-- | app/services/ci/compare_reports_base_service.rb | 47 | ||||
-rw-r--r-- | app/services/ci/compare_test_reports_service.rb | 36 |
2 files changed, 54 insertions, 29 deletions
diff --git a/app/services/ci/compare_reports_base_service.rb b/app/services/ci/compare_reports_base_service.rb new file mode 100644 index 00000000000..d5625857599 --- /dev/null +++ b/app/services/ci/compare_reports_base_service.rb @@ -0,0 +1,47 @@ +# frozen_string_literal: true + +module Ci + class CompareReportsBaseService < ::BaseService + def execute(base_pipeline, head_pipeline) + comparer = comparer_class.new(get_report(base_pipeline), get_report(head_pipeline)) + { + status: :parsed, + key: key(base_pipeline, head_pipeline), + data: serializer_class + .new(project: project) + .represent(comparer).as_json + } + rescue Gitlab::Ci::Parsers::ParserError => e + { + status: :error, + key: key(base_pipeline, head_pipeline), + status_reason: e.message + } + end + + def latest?(base_pipeline, head_pipeline, data) + data&.fetch(:key, nil) == key(base_pipeline, head_pipeline) + end + + private + + def key(base_pipeline, head_pipeline) + [ + base_pipeline&.id, base_pipeline&.updated_at, + head_pipeline&.id, head_pipeline&.updated_at + ] + end + + def comparer_class + raise NotImplementedError + end + + def serializer_class + raise NotImplementedError + end + + def get_report(pipeline) + raise NotImplementedError + end + end +end diff --git a/app/services/ci/compare_test_reports_service.rb b/app/services/ci/compare_test_reports_service.rb index 2293f95f56b..382d5b8995f 100644 --- a/app/services/ci/compare_test_reports_service.rb +++ b/app/services/ci/compare_test_reports_service.rb @@ -1,39 +1,17 @@ # frozen_string_literal: true module Ci - class CompareTestReportsService < ::BaseService - def execute(base_pipeline, head_pipeline) - # rubocop: disable CodeReuse/Serializer - comparer = Gitlab::Ci::Reports::TestReportsComparer - .new(base_pipeline&.test_reports, head_pipeline.test_reports) - - { - status: :parsed, - key: key(base_pipeline, head_pipeline), - data: TestReportsComparerSerializer - .new(project: project) - .represent(comparer).as_json - } - rescue => e - { - status: :error, - key: key(base_pipeline, head_pipeline), - status_reason: e.message - } - # rubocop: enable CodeReuse/Serializer + class CompareTestReportsService < CompareReportsBaseService + def comparer_class + Gitlab::Ci::Reports::TestReportsComparer end - def latest?(base_pipeline, head_pipeline, data) - data&.fetch(:key, nil) == key(base_pipeline, head_pipeline) + def serializer_class + TestReportsComparerSerializer end - private - - def key(base_pipeline, head_pipeline) - [ - base_pipeline&.id, base_pipeline&.updated_at, - head_pipeline&.id, head_pipeline&.updated_at - ] + def get_report(pipeline) + pipeline&.test_reports end end end |