# frozen_string_literal: true module RSpecTracer module RemoteCache class Validator CACHE_FILES_PER_TEST_SUITE = 11 def initialize @test_suite_id = ENV['TEST_SUITE_ID'] @test_suites = ENV['TEST_SUITES'] if @test_suite_id.nil? ^ @test_suites.nil? raise( ValidationError, 'Both the enviornment variables TEST_SUITE_ID and TEST_SUITES are not set' ) end setup end def valid?(ref, cache_files) last_run_regex = Regexp.new(format(@last_run_files_regex, ref: ref)) return false if cache_files.count { |file| file.match?(last_run_regex) } != @last_run_files_count cache_regex = Regexp.new(format(@cached_files_regex, ref: ref)) cache_files.count { |file| file.match?(cache_regex) } == @cached_files_count end private def setup if @test_suites.nil? @last_run_files_count = 1 @last_run_files_regex = '/%s/last_run.json$' @cached_files_count = CACHE_FILES_PER_TEST_SUITE @cached_files_regex = '/%s/[0-9a-f]{32}/.+.json' else @test_suites = @test_suites.to_i @test_suites_regex = (1..@test_suites).to_a.join('|') @last_run_files_count = @test_suites @last_run_files_regex = "/%s/(#{@test_suites_regex})/last_run.json$" @cached_files_count = CACHE_FILES_PER_TEST_SUITE * @test_suites @cached_files_regex = "/%s/(#{@test_suites_regex})/[0-9a-f]{32}/.+.json$" end end end end end