da5aa64f06
Signed-off-by: Rémy Coutable <remy@rymai.me>
79 lines
2.2 KiB
Ruby
79 lines
2.2 KiB
Ruby
require 'spec_helper'
|
|
|
|
describe RspecFlaky::FlakyExamplesCollection, :aggregate_failures do
|
|
let(:collection_hash) do
|
|
{
|
|
a: { example_id: 'spec/foo/bar_spec.rb:2' },
|
|
b: { example_id: 'spec/foo/baz_spec.rb:3' }
|
|
}
|
|
end
|
|
let(:collection_report) do
|
|
{
|
|
a: {
|
|
example_id: 'spec/foo/bar_spec.rb:2',
|
|
first_flaky_at: nil,
|
|
last_flaky_at: nil,
|
|
last_flaky_job: nil
|
|
},
|
|
b: {
|
|
example_id: 'spec/foo/baz_spec.rb:3',
|
|
first_flaky_at: nil,
|
|
last_flaky_at: nil,
|
|
last_flaky_job: nil
|
|
}
|
|
}
|
|
end
|
|
|
|
describe '.from_json' do
|
|
it 'accepts a JSON' do
|
|
collection = described_class.from_json(JSON.pretty_generate(collection_hash))
|
|
|
|
expect(collection.to_report).to eq(described_class.new(collection_hash).to_report)
|
|
end
|
|
end
|
|
|
|
describe '#initialize' do
|
|
it 'accepts no argument' do
|
|
expect { described_class.new }.not_to raise_error
|
|
end
|
|
|
|
it 'accepts a hash' do
|
|
expect { described_class.new(collection_hash) }.not_to raise_error
|
|
end
|
|
|
|
it 'does not accept anything else' do
|
|
expect { described_class.new([1, 2, 3]) }.to raise_error(ArgumentError, "`collection` must be a Hash, Array given!")
|
|
end
|
|
end
|
|
|
|
describe '#to_report' do
|
|
it 'calls #to_h on the values' do
|
|
collection = described_class.new(collection_hash)
|
|
|
|
expect(collection.to_report).to eq(collection_report)
|
|
end
|
|
end
|
|
|
|
describe '#-' do
|
|
it 'returns only examples that are not present in the given collection' do
|
|
collection1 = described_class.new(collection_hash)
|
|
collection2 = described_class.new(
|
|
a: { example_id: 'spec/foo/bar_spec.rb:2' },
|
|
c: { example_id: 'spec/bar/baz_spec.rb:4' })
|
|
|
|
expect((collection2 - collection1).to_report).to eq(
|
|
c: {
|
|
example_id: 'spec/bar/baz_spec.rb:4',
|
|
first_flaky_at: nil,
|
|
last_flaky_at: nil,
|
|
last_flaky_job: nil
|
|
})
|
|
end
|
|
|
|
it 'fails if the given collection does not respond to `#key?`' do
|
|
collection = described_class.new(collection_hash)
|
|
|
|
expect { collection - [1, 2, 3] }.to raise_error(ArgumentError, "`other` must respond to `#key?`, Array does not!")
|
|
end
|
|
end
|
|
end
|