Introduce RspecFlaky::ExamplesPruner to prune old flaky examples
Signed-off-by: Rémy Coutable <remy@rymai.me>
This commit is contained in:
parent
9d220da841
commit
5bef32195b
3 changed files with 60 additions and 0 deletions
25
lib/rspec_flaky/examples_pruner.rb
Normal file
25
lib/rspec_flaky/examples_pruner.rb
Normal file
|
@ -0,0 +1,25 @@
|
|||
require 'json'
|
||||
|
||||
module RspecFlaky
|
||||
class ExamplesPruner
|
||||
# - flaky_examples: contains flaky examples
|
||||
attr_reader :flaky_examples
|
||||
|
||||
def initialize(collection)
|
||||
unless collection.is_a?(RspecFlaky::FlakyExamplesCollection)
|
||||
raise ArgumentError, "`collection` must be a RspecFlaky::FlakyExamplesCollection, #{collection.class} given!"
|
||||
end
|
||||
|
||||
@flaky_examples = collection
|
||||
end
|
||||
|
||||
def prune_examples_older_than(date)
|
||||
updated_hash = flaky_examples.dup
|
||||
.delete_if do |uid, hash|
|
||||
hash[:last_flaky_at] && Time.parse(hash[:last_flaky_at]).to_i < date.to_i
|
||||
end
|
||||
|
||||
RspecFlaky::FlakyExamplesCollection.new(updated_hash)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,5 +1,7 @@
|
|||
require 'json'
|
||||
|
||||
require_relative 'flaky_example'
|
||||
|
||||
module RspecFlaky
|
||||
class FlakyExamplesCollection < SimpleDelegator
|
||||
def self.from_json(json)
|
||||
|
|
33
spec/lib/rspec_flaky/examples_pruner_spec.rb
Normal file
33
spec/lib/rspec_flaky/examples_pruner_spec.rb
Normal file
|
@ -0,0 +1,33 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe RspecFlaky::ExamplesPruner, :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', first_flaky_at: Time.utc(2000, 1, 1).to_s, last_flaky_at: Time.utc(2000, 2, 1).to_s }
|
||||
}
|
||||
end
|
||||
|
||||
describe '#initialize' do
|
||||
it 'accepts a collection' do
|
||||
expect { described_class.new(RspecFlaky::FlakyExamplesCollection.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 RspecFlaky::FlakyExamplesCollection, Array given!")
|
||||
end
|
||||
end
|
||||
|
||||
describe '#prune_examples_older_than' do
|
||||
it 'returns a new collection without the examples older than 3 months' do
|
||||
collection = RspecFlaky::FlakyExamplesCollection.new(collection_hash)
|
||||
|
||||
new_report = collection.to_report.dup.tap { |r| r.delete(:b) }
|
||||
new_collection = described_class.new(collection).prune_examples_older_than(3.months.ago)
|
||||
|
||||
expect(new_collection).to be_a(RspecFlaky::FlakyExamplesCollection)
|
||||
expect(new_collection.to_report).to eq(new_report)
|
||||
expect(collection).to have_key(:b)
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue