2017-01-18 13:31:19 -08:00
|
|
|
# frozen_string_literal: true
|
2017-03-26 17:19:44 -07:00
|
|
|
|
2015-08-22 15:25:16 -04:00
|
|
|
require 'spec_helper'
|
|
|
|
|
2016-02-08 15:37:19 -05:00
|
|
|
describe 'license meta' do
|
2016-01-20 10:20:04 -05:00
|
|
|
licenses.each do |license|
|
2016-02-09 12:26:24 -05:00
|
|
|
# Manually load the raw license so we don't get the defaults
|
2016-05-31 15:44:12 -07:00
|
|
|
raw_fields = SafeYAML.load_file("_licenses/#{license['spdx-lcase']}.txt")
|
2015-08-22 15:25:16 -04:00
|
|
|
|
2016-02-08 15:37:19 -05:00
|
|
|
context "The #{license['title']} license" do
|
|
|
|
it 'should only contain supported meta fields' do
|
2017-03-26 17:19:44 -07:00
|
|
|
extra_fields = raw_fields.keys - (meta.map { |m| m['name'] })
|
2016-01-20 10:20:04 -05:00
|
|
|
expect(extra_fields).to be_empty
|
|
|
|
end
|
2015-08-22 15:25:16 -04:00
|
|
|
|
2016-02-08 15:37:19 -05:00
|
|
|
it 'should contain all required meta fields' do
|
|
|
|
required = meta.select { |m| m['required'] }.map { |m| m['name'] }
|
2016-01-20 10:20:04 -05:00
|
|
|
missing = required - raw_fields.keys
|
2015-08-22 15:25:16 -04:00
|
|
|
expect(missing).to be_empty
|
|
|
|
end
|
2017-05-30 14:17:13 -07:00
|
|
|
|
2020-10-03 11:34:50 +03:00
|
|
|
examples = raw_fields['using'] || {}
|
2017-11-25 16:16:11 -08:00
|
|
|
|
2017-05-30 14:17:13 -07:00
|
|
|
it 'using contains 3 examples' do
|
|
|
|
legacy = [
|
|
|
|
'afl-3.0',
|
|
|
|
'artistic-2.0',
|
|
|
|
'bsd-3-clause-clear',
|
|
|
|
'eupl-1.1',
|
|
|
|
'lgpl-2.1',
|
|
|
|
'lgpl-3.0',
|
|
|
|
'lppl-1.3c',
|
|
|
|
'ms-pl',
|
|
|
|
'ms-rl',
|
2019-11-18 10:32:39 -08:00
|
|
|
'wtfpl'
|
2017-05-30 14:17:13 -07:00
|
|
|
]
|
|
|
|
skip 'added before 3 using examples required' if legacy.include?(license['slug'])
|
|
|
|
expect(examples.length).to eq(3)
|
|
|
|
end
|
2017-11-25 16:16:11 -08:00
|
|
|
|
|
|
|
context 'licensee detects using examples' do
|
2017-11-27 12:56:25 -08:00
|
|
|
slug = license['slug']
|
|
|
|
|
2020-10-03 11:34:50 +03:00
|
|
|
examples.each_value do |example_url|
|
2017-11-27 12:56:25 -08:00
|
|
|
context "the #{example_url} URL" do
|
2018-03-14 18:45:10 -07:00
|
|
|
let(:content) { OpenURI.open_uri(example_url).read }
|
2017-11-27 12:56:25 -08:00
|
|
|
let(:detected) { Licensee::ProjectFiles::LicenseFile.new(content, 'LICENSE').license }
|
|
|
|
|
|
|
|
if example_url.start_with?('https://github.com/')
|
2020-07-30 11:53:51 -07:00
|
|
|
example_url.gsub!(%r{\Ahttps://github.com/([\w-]+/[\w.-]+)/blob/(\S+)\z}, 'https://raw.githubusercontent.com/\1/\2')
|
2022-09-26 09:53:00 -07:00
|
|
|
elsif example_url.start_with?('https://git.savannah.gnu.org/', 'https://git.gnome.org/', 'https://code.qt.io')
|
2017-11-27 12:56:25 -08:00
|
|
|
example_url.gsub!(%r{/tree/}, '/plain/')
|
|
|
|
elsif example_url.start_with?('https://bitbucket.org/')
|
|
|
|
example_url.gsub!(%r{/src/}, '/raw/')
|
2021-08-24 09:58:37 -06:00
|
|
|
elsif example_url.start_with?('https://ohwr.org/')
|
|
|
|
example_url.gsub!(%r{/blob/}, '/raw/')
|
2017-11-27 12:56:25 -08:00
|
|
|
end
|
|
|
|
|
|
|
|
it "is a #{slug} license" do
|
2020-06-21 15:53:25 -07:00
|
|
|
skip 'hard to detect licenses' if %(ncsa postgresql vim).include?(slug) && detected.key == 'other'
|
2017-11-27 12:56:25 -08:00
|
|
|
expect(detected.key).to eq(slug)
|
|
|
|
end
|
2017-11-25 16:16:11 -08:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2015-08-22 15:25:16 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|