|
| 1 | +# typed: true |
| 2 | +# frozen_string_literal: true |
| 3 | + |
| 4 | +require "test_helper" |
| 5 | + |
| 6 | +module Packwerk |
| 7 | + class ReferencesFromFileTest < Minitest::Test |
| 8 | + setup do |
| 9 | + config = Configuration.new |
| 10 | + config.stubs(:load_paths).returns({}) |
| 11 | + @run_context = RunContext.from_configuration(config) |
| 12 | + RunContext.stubs(:from_configuration).with(config).returns(@run_context) |
| 13 | + @referencer = ReferencesFromFile.new(config) |
| 14 | + end |
| 15 | + |
| 16 | + test "raises on parser error" do |
| 17 | + offense = Offense.new(file: "something.rb", message: "yo") |
| 18 | + @run_context.stubs(:references_from_file).returns( |
| 19 | + RunContext::FileReferencesResult.new(file_offenses: [offense], references: []) |
| 20 | + ) |
| 21 | + |
| 22 | + assert_raises ReferencesFromFile::FileParserError do |
| 23 | + @referencer.list("lib/something.rb") |
| 24 | + end |
| 25 | + end |
| 26 | + |
| 27 | + test "fetches violations for all files from run context" do |
| 28 | + references = { |
| 29 | + "lib/something.rb" => [ |
| 30 | + make_fake_reference, |
| 31 | + ], |
| 32 | + "components/ice_cream_sales/app/models/scoop.rb" => [ |
| 33 | + make_fake_reference, |
| 34 | + ], |
| 35 | + } |
| 36 | + @referencer.stubs(:files).returns(references.keys) |
| 37 | + |
| 38 | + references.each do |file, references| |
| 39 | + @run_context.stubs(:references_from_file).with(relative_file: file).returns( |
| 40 | + RunContext::FileReferencesResult.new(file_offenses: [], references: references) |
| 41 | + ) |
| 42 | + end |
| 43 | + |
| 44 | + assert_equal Set.new(references.values.flatten), Set.new(@referencer.list_all) |
| 45 | + end |
| 46 | + |
| 47 | + private |
| 48 | + |
| 49 | + def make_fake_reference |
| 50 | + package_name = Array("ilikeletters".chars.sample(5)).join |
| 51 | + Reference.new( |
| 52 | + package: Package.new(name: package_name), |
| 53 | + relative_path: package_name, |
| 54 | + constant: ConstantContext.new, |
| 55 | + source_location: nil |
| 56 | + ) |
| 57 | + end |
| 58 | + end |
| 59 | +end |
0 commit comments