7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
# File 'lib/rail_verdict/rails_context/resolvers/test_candidates.rb', line 7
def self.for(repository_root:, kind:, path:)
basename = File.basename(path, ".rb")
dir = File.dirname(path)
candidates = []
case kind
when "model"
relative = dir.delete_prefix("app/models").delete_prefix("/")
candidates << candidate_path(repository_root, "test", "models", relative, basename)
candidates << candidate_path(repository_root, "spec", "models", relative, basename)
when "controller"
clean = basename.delete_suffix("_controller")
relative = dir.delete_prefix("app/controllers").delete_prefix("/")
candidates << candidate_path(repository_root, "test", "controllers", relative, basename)
candidates << candidate_path(repository_root, "spec", "requests", relative, clean)
candidates << candidate_path(repository_root, "spec", "controllers", relative, basename)
when "job"
relative = dir.delete_prefix("app/jobs").delete_prefix("/")
candidates << candidate_path(repository_root, "test", "jobs", relative, basename)
candidates << candidate_path(repository_root, "spec", "jobs", relative, basename)
when "mailer"
relative = dir.delete_prefix("app/mailers").delete_prefix("/")
candidates << candidate_path(repository_root, "test", "mailers", relative, basename)
candidates << candidate_path(repository_root, "spec", "mailers", relative, basename)
when "helper"
relative = dir.delete_prefix("app/helpers").delete_prefix("/")
candidates << candidate_path(repository_root, "test", "helpers", relative, basename)
candidates << candidate_path(repository_root, "spec", "helpers", relative, basename)
when "service"
relative = dir.delete_prefix("app/services").delete_prefix("/")
candidates << candidate_path(repository_root, "test", "services", relative, basename)
candidates << candidate_path(repository_root, "spec", "services", relative, basename)
else
return []
end
candidates.compact.select { |entry| entry[:exists] }.first(2).map do |entry|
{ "path" => entry[:path], "relationship" => "related_test", "confidence" => "conventional", "provenance" => "file_exists:#{entry[:path]}" }
end
end
|