Commit d4fecb13 authored by charlie ablett's avatar charlie ablett

Merge branch 'mo-refactor-test-case-initialization' into 'master'

Refactor TestCase initialization

See merge request gitlab-org/gitlab!28571
parents 87aeadd4 5b3dbbad
...@@ -12,20 +12,19 @@ module Gitlab ...@@ -12,20 +12,19 @@ module Gitlab
attr_reader :name, :classname, :execution_time, :status, :file, :system_output, :stack_trace, :key, :attachment, :job attr_reader :name, :classname, :execution_time, :status, :file, :system_output, :stack_trace, :key, :attachment, :job
# rubocop: disable Metrics/ParameterLists def initialize(params)
def initialize(name:, classname:, execution_time:, status:, file: nil, system_output: nil, stack_trace: nil, attachment: nil, job: nil) @name = params.fetch(:name)
@name = name @classname = params.fetch(:classname)
@classname = classname @file = params.fetch(:file, nil)
@file = file @execution_time = params.fetch(:execution_time).to_f
@execution_time = execution_time.to_f @status = params.fetch(:status)
@status = status @system_output = params.fetch(:system_output, nil)
@system_output = system_output @stack_trace = params.fetch(:stack_trace, nil)
@stack_trace = stack_trace @attachment = params.fetch(:attachment, nil)
@job = params.fetch(:job, nil)
@key = sanitize_key_name("#{classname}_#{name}") @key = sanitize_key_name("#{classname}_#{name}")
@attachment = attachment
@job = job
end end
# rubocop: enable Metrics/ParameterLists
def has_attachment? def has_attachment?
attachment.present? attachment.present?
......
...@@ -6,17 +6,18 @@ FactoryBot.define do ...@@ -6,17 +6,18 @@ FactoryBot.define do
classname { "trace" } classname { "trace" }
file { "spec/trace_spec.rb" } file { "spec/trace_spec.rb" }
execution_time { 1.23 } execution_time { 1.23 }
status { "success" } status { Gitlab::Ci::Reports::TestCase::STATUS_SUCCESS }
system_output { nil } system_output { nil }
attachment { nil } attachment { nil }
association :job, factory: :ci_build association :job, factory: :ci_build
trait :failed do trait :failed do
status { "failed" } status { Gitlab::Ci::Reports::TestCase::STATUS_FAILED }
system_output { "Failure/Error: is_expected.to eq(300) expected: 300 got: -100" }
end end
trait :with_attachment do trait :with_attachment do
status { "failed" } status { Gitlab::Ci::Reports::TestCase::STATUS_FAILED }
attachment { "some/path.png" } attachment { "some/path.png" }
end end
......
...@@ -4,21 +4,12 @@ require 'spec_helper' ...@@ -4,21 +4,12 @@ require 'spec_helper'
describe Gitlab::Ci::Reports::TestCase do describe Gitlab::Ci::Reports::TestCase do
describe '#initialize' do describe '#initialize' do
let(:test_case) { described_class.new(**params)} let(:test_case) { described_class.new(params)}
context 'when both classname and name are given' do context 'when both classname and name are given' do
context 'when test case is passed' do context 'when test case is passed' do
let(:params) do let(:job) { build(:ci_build) }
{ let(:params) { attributes_for(:test_case).merge!(job: job) }
name: 'test-1',
classname: 'trace',
file: 'spec/trace_spec.rb',
execution_time: 1.23,
status: described_class::STATUS_SUCCESS,
system_output: nil,
job: build(:ci_build)
}
end
it 'initializes an instance' do it 'initializes an instance' do
expect { test_case }.not_to raise_error expect { test_case }.not_to raise_error
...@@ -34,16 +25,8 @@ describe Gitlab::Ci::Reports::TestCase do ...@@ -34,16 +25,8 @@ describe Gitlab::Ci::Reports::TestCase do
end end
context 'when test case is failed' do context 'when test case is failed' do
let(:params) do let(:job) { build(:ci_build) }
{ let(:params) { attributes_for(:test_case, :failed).merge!(job: job) }
name: 'test-1',
classname: 'trace',
file: 'spec/trace_spec.rb',
execution_time: 1.23,
status: described_class::STATUS_FAILED,
system_output: "Failure/Error: is_expected.to eq(300) expected: 300 got: -100"
}
end
it 'initializes an instance' do it 'initializes an instance' do
expect { test_case }.not_to raise_error expect { test_case }.not_to raise_error
...@@ -59,36 +42,23 @@ describe Gitlab::Ci::Reports::TestCase do ...@@ -59,36 +42,23 @@ describe Gitlab::Ci::Reports::TestCase do
end end
end end
context 'when classname is missing' do shared_examples 'param is missing' do |param|
let(:params) do let(:job) { build(:ci_build) }
{ let(:params) { attributes_for(:test_case).merge!(job: job) }
name: 'test-1',
file: 'spec/trace_spec.rb',
execution_time: 1.23,
status: described_class::STATUS_SUCCESS,
system_output: nil
}
end
it 'raises an error' do it 'raises an error' do
expect { test_case }.to raise_error(ArgumentError) params.delete(param)
expect { test_case }.to raise_error(KeyError)
end end
end end
context 'when name is missing' do context 'when classname is missing' do
let(:params) do it_behaves_like 'param is missing', :classname
{
classname: 'trace',
file: 'spec/trace_spec.rb',
execution_time: 1.23,
status: described_class::STATUS_SUCCESS,
system_output: nil
}
end end
it 'raises an error' do context 'when name is missing' do
expect { test_case }.to raise_error(ArgumentError) it_behaves_like 'param is missing', :name
end
end end
context 'when attachment is present' do context 'when attachment is present' do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment