# frozen_string_literal: true RSpec.describe 'vendored licenses' do let(:filename) { 'LICENSE.txt' } let(:license_file) do Licensee::ProjectFiles::LicenseFile.new(content, filename) end let(:detected_license) { license_file&.license } let(:wtfpl) { Licensee::License.find('wtfpl') } Licensee.licenses(hidden: true).each do |license| next if license.pseudo_license? context "the #{license.name} license" do let(:content_with_copyright) { sub_copyright_info(license) } let(:content) { content_with_copyright } let(:expected_hash) { license_hashes[license.key] } let(:hash_change_msg) do msg = 'Did you update a vendored license? Run'.dup msg << ' bundle exec script/hash-licenses' msg << 'Changes in license hashes must be a MINOR (or MAJOR) bump.' msg end it 'detects the license' do expect(content).to be_detected_as(license) end it 'confidence and similarity scores are euqal' do expect(license_file.confidence).to eq(license.similarity(license_file)) end it 'has a cached content hash' do expect(expected_hash).to_not be_nil, hash_change_msg end it 'matches the expected content hash' do expect(license.content_hash).to eql(expected_hash), hash_change_msg end context 'when modified' do let(:line_length) { 60 } let(:random_words) { 75 } let(:content_rewrapped) do Licensee::ContentHelper.wrap(content_with_copyright, line_length) end let(:content_with_random_words) do add_random_words(content_with_copyright, random_words) end context 'without the title' do let(:content_without_title) do license_file.send :strip_title license_file.send :_content end it 'detects the license' do expect(content_without_title).to be_detected_as(license) end end context 'with a double title' do let(:content) do "#{license.name.sub('*', 'u')}\n\n#{content_with_copyright}" end it 'detects the license' do expect(content).to be_detected_as(license) end end context 'when re-wrapped' do let(:content) { content_rewrapped } it 'detects the license' do expect(content).to be_detected_as(license) end end context 'with random words added' do let(:content) { content_with_random_words } it 'does not match the license' do expect(content).to_not be_detected_as(license) end end context 'when rewrapped with random words added' do let(:content) do Licensee::ContentHelper.wrap(content_with_random_words, line_length) end it 'does not match the license' do expect(content).to_not be_detected_as(license) end end end end end end