Module: DevDoc::Test::Lints::DuplicateSnapshot

Defined in:
lib/dev_doc/test/lints/duplicate_snapshot.rb

Overview

Reject byte-identical controller-test snapshots within the same ‘*_results` dir.

## Rationale “Test quality” is normally subjective. Two tests serializing the *exact same* rendered response is an objective, computable proxy for a redundant or weak test. When ‘response_assert_equal` snapshots collide, it’s almost always one of:

1. **Same scenario tested twice** — should be one test with the
   combined assertions.
2. **Fixtures don't exercise the difference** — the test claims to
   verify behaviour X, but the inputs all collapse to the same
   rendered state, so it passes without actually testing X. (The
   most dangerous case — green but vacuous.)
3. **A negative/absence assertion** — a test for "X is NOT shown"
   legitimately renders identically to the baseline. This is the
   one *correct* duplicate; acknowledge it with the inline marker.

Aggressive by design: a false positive costs only a quick review and one inline comment, while a silent duplicate hides a real (1) or (2).

## Inline opt-out (NOT a central allow-list) The justification lives next to the test, so it can’t rot or detach. Mark EACH test in an intentionally-duplicate group with ‘# allow_duplicate_snapshot: <reason>` — either as a trailing comment on its `test ’…‘ do` line, or on the comment line directly above it (use the latter when the test line is already long):

test 'index hides the banner' do # allow_duplicate_snapshot: renders like the baseline
  ...
end

# allow_duplicate_snapshot: renders like the baseline
test 'index hides the banner for a guest who is not in any of the groups' do
  ...
end

## Usage

class DuplicateSnapshotTest < ActiveSupport::TestCase
  include DevDoc::Test::Lints::DuplicateSnapshot
  # SNAPSHOT_RESULTS_ROOT = 'test/requests'  # override if needed
end

Instance Method Summary collapse

Instance Method Details

#test_no_unjustified_duplicate_snapshotsObject



169
170
171
172
173
174
175
176
# File 'lib/dev_doc/test/lints/duplicate_snapshot.rb', line 169

def test_no_unjustified_duplicate_snapshots
  result = DuplicateSnapshotChecker.new(snapshot_results_root).offenders
  if result == DuplicateSnapshotChecker::MissingDir
    skip "no snapshot result dirs under #{snapshot_results_root}"
  end

  assert result.empty?, failure_message(result)
end