# frozen_string_literal: true RSpec.describe Licensee::Matchers::NuGet do subject { described_class.new(file) } let(:content) { '<license type="expression">mit</license>' } let(:file) { Licensee::ProjectFiles::LicenseFile.new(content, 'foo.nuspec') } let(:mit) { Licensee::License.find('mit') } let(:apache2) { Licensee::License.find('apache-2.0') } let(:other) { Licensee::License.find('other') } it 'matches' do expect(subject.match).to eql(mit) end it 'has a confidence' do expect(subject.confidence).to be(90) end { 'double quotes' => '<license type="expression">mit</license>', 'single quotes' => "<license type='expression'>mit</license>", 'whitespace' => '<license type = "expression" >mit</license >', 'leading whitespace' => ' <license type="expression">mit</license>' }.each do |description, license_declaration| context "with a #{description} license element" do let(:content) { license_declaration } it 'matches' do expect(subject.match).to eql(mit) end end end context 'no license field' do let(:content) { '<file>wrongelement</file>' } it 'returns nil' do expect(subject.match).to be_nil end end context 'an unknown license' do let(:content) { '<license type="expression">foo</license>' } it 'returns other' do expect(subject.match).to eql(other) end end context 'a license expression' do let(:content) { '<license type="expression">BSD-2-Clause OR MIT</license>' } it 'returns other' do expect(subject.match).to eql(other) end end { 'nuget' => '<licenseUrl>https://licenses.nuget.org/Apache-2.0</licenseUrl>', 'nuget (http)' => '<licenseUrl>http://licenses.nuget.org/Apache-2.0</licenseUrl>', 'opensource' => '<licenseUrl>https://opensource.org/licenses/Apache-2.0</licenseUrl>', 'opensource (www)' => '<licenseUrl>http://www.opensource.org/licenses/Apache-2.0</licenseUrl>', 'spdx' => '<licenseUrl>https://spdx.org/licenses/Apache-2.0</licenseUrl>', 'spdx (www)' => '<licenseUrl>http://www.spdx.org/licenses/Apache-2.0</licenseUrl>', 'spdx (html)' => '<licenseUrl>https://spdx.org/licenses/Apache-2.0.html</licenseUrl>', 'spdx (txt)' => '<licenseUrl>https://spdx.org/licenses/Apache-2.0.txt</licenseUrl>' }.each do |description, license_declaration| context "with a #{description} licenseUrl element containing SPDX" do let(:content) { license_declaration } it 'matches' do expect(subject.match).to eql(apache2) end end end { '2.0 (https)' => '<licenseUrl>https://apache.org/licenses/LICENSE-2.0</licenseUrl>', '2.0 (http/www)' => '<licenseUrl>http://www.apache.org/licenses/LICENSE-2.0</licenseUrl>', '2.0 (txt)' => '<licenseUrl>https://apache.org/licenses/LICENSE-2.0.txt</licenseUrl>' }.each do |description, license_declaration| context "with an apache.org #{description} licenseUrl element" do let(:content) { license_declaration } it 'matches' do expect(subject.match).to eql(apache2) end end end end