license_finder 1.1.1-java → 1.2-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +2 -2
- data/CHANGELOG.rdoc +10 -0
- data/Gemfile +1 -1
- data/README.md +363 -0
- data/Rakefile +30 -1
- data/TODO.md +28 -0
- data/bin/license_finder_pip.py +18 -0
- data/db/migrate/201410031451_rename_dependency_license_name.rb +6 -0
- data/features/multiple_licenses.feature +9 -0
- data/features/step_definitions/cli_steps.rb +9 -9
- data/features/step_definitions/cocoapod_steps.rb +1 -1
- data/features/step_definitions/configure_bundler_groups_steps.rb +3 -3
- data/features/step_definitions/configure_whitelist_steps.rb +4 -4
- data/features/step_definitions/gradle_steps.rb +1 -1
- data/features/step_definitions/manually_added_steps.rb +3 -3
- data/features/step_definitions/manually_approved_steps.rb +5 -5
- data/features/step_definitions/manually_assigned_license_steps.rb +4 -4
- data/features/step_definitions/maven_steps.rb +1 -1
- data/features/step_definitions/multiple_licenses_steps.rb +14 -0
- data/features/step_definitions/node_steps.rb +1 -1
- data/features/step_definitions/python_steps.rb +1 -1
- data/features/step_definitions/report_csv_steps.rb +3 -3
- data/features/step_definitions/report_html_steps.rb +5 -5
- data/features/step_definitions/shared_steps.rb +23 -6
- data/lib/license_finder.rb +3 -0
- data/lib/license_finder/cli.rb +13 -34
- data/lib/license_finder/configuration.rb +8 -4
- data/lib/license_finder/dependency_manager.rb +25 -15
- data/lib/license_finder/license.rb +8 -0
- data/lib/license_finder/logger.rb +59 -0
- data/lib/license_finder/package.rb +37 -30
- data/lib/license_finder/package_manager.rb +20 -0
- data/lib/license_finder/package_managers/bower.rb +4 -9
- data/lib/license_finder/package_managers/bower_package.rb +2 -1
- data/lib/license_finder/package_managers/bundler.rb +26 -41
- data/lib/license_finder/package_managers/bundler_package.rb +6 -3
- data/lib/license_finder/package_managers/cocoa_pods.rb +18 -10
- data/lib/license_finder/package_managers/cocoa_pods_package.rb +4 -3
- data/lib/license_finder/package_managers/gradle.rb +7 -11
- data/lib/license_finder/package_managers/gradle_package.rb +2 -7
- data/lib/license_finder/package_managers/maven.rb +5 -9
- data/lib/license_finder/package_managers/maven_package.rb +4 -8
- data/lib/license_finder/package_managers/npm.rb +6 -10
- data/lib/license_finder/package_managers/npm_package.rb +2 -1
- data/lib/license_finder/package_managers/pip.rb +11 -24
- data/lib/license_finder/package_managers/pip_package.rb +2 -1
- data/lib/license_finder/package_saver.rb +2 -2
- data/lib/license_finder/platform.rb +4 -0
- data/lib/license_finder/possible_license_file.rb +4 -0
- data/lib/license_finder/possible_license_files.rb +2 -1
- data/lib/license_finder/reports/detailed_text_report.rb +1 -1
- data/lib/license_finder/reports/formatted_report.rb +1 -1
- data/lib/license_finder/tables/dependency.rb +22 -12
- data/lib/license_finder/yml_to_sql.rb +1 -1
- data/lib/templates/html_report.erb +4 -4
- data/lib/templates/markdown_report.erb +4 -4
- data/lib/templates/text_report.erb +1 -1
- data/license_finder.gemspec +28 -12
- data/spec/lib/license_finder/cli_spec.rb +193 -185
- data/spec/lib/license_finder/configuration_spec.rb +46 -47
- data/spec/lib/license_finder/dependency_manager_spec.rb +48 -44
- data/spec/lib/license_finder/license/definitions_spec.rb +26 -26
- data/spec/lib/license_finder/license_spec.rb +25 -25
- data/spec/lib/license_finder/package_managers/bower_package_spec.rb +33 -17
- data/spec/lib/license_finder/package_managers/bower_spec.rb +35 -35
- data/spec/lib/license_finder/package_managers/bundler_package_spec.rb +20 -15
- data/spec/lib/license_finder/package_managers/bundler_spec.rb +12 -19
- data/spec/lib/license_finder/package_managers/cocoa_pods_package_spec.rb +8 -5
- data/spec/lib/license_finder/package_managers/cocoa_pods_spec.rb +20 -22
- data/spec/lib/license_finder/package_managers/gradle_package_spec.rb +8 -5
- data/spec/lib/license_finder/package_managers/gradle_spec.rb +20 -20
- data/spec/lib/license_finder/package_managers/maven_package_spec.rb +8 -5
- data/spec/lib/license_finder/package_managers/maven_spec.rb +18 -18
- data/spec/lib/license_finder/package_managers/npm_package_spec.rb +36 -17
- data/spec/lib/license_finder/package_managers/npm_spec.rb +17 -17
- data/spec/lib/license_finder/package_managers/pip_package_spec.rb +16 -10
- data/spec/lib/license_finder/package_managers/pip_spec.rb +21 -18
- data/spec/lib/license_finder/package_saver_spec.rb +15 -25
- data/spec/lib/license_finder/possible_license_file_spec.rb +5 -4
- data/spec/lib/license_finder/possible_license_files_spec.rb +11 -5
- data/spec/lib/license_finder/reports/detailed_text_report_spec.rb +3 -3
- data/spec/lib/license_finder/reports/html_report_spec.rb +23 -23
- data/spec/lib/license_finder/reports/markdown_report_spec.rb +12 -12
- data/spec/lib/license_finder/reports/reporter_spec.rb +11 -11
- data/spec/lib/license_finder/reports/text_report_spec.rb +3 -3
- data/spec/lib/license_finder/tables/dependency_spec.rb +59 -41
- data/spec/lib/license_finder/yml_to_sql_spec.rb +21 -21
- data/spec/lib/license_finder_spec.rb +1 -1
- data/spec/spec_helper.rb +0 -13
- data/spec/support/shared_examples_for_package.rb +46 -0
- data/spec/support/shared_examples_for_package_manager.rb +15 -0
- metadata +19 -100
- data/readme.md +0 -259
|
@@ -7,7 +7,7 @@ module LicenseFinder
|
|
|
7
7
|
end
|
|
8
8
|
let(:license_text) { nil }
|
|
9
9
|
|
|
10
|
-
it_behaves_like "
|
|
10
|
+
it_behaves_like "a Package"
|
|
11
11
|
|
|
12
12
|
its(:name) { should == "Name" }
|
|
13
13
|
its(:version) { should == "1.0.0" }
|
|
@@ -17,7 +17,7 @@ module LicenseFinder
|
|
|
17
17
|
its(:groups) { should == [] }
|
|
18
18
|
its(:children) { should == [] }
|
|
19
19
|
|
|
20
|
-
describe '#
|
|
20
|
+
describe '#licenses' do
|
|
21
21
|
context "when there's a license" do
|
|
22
22
|
let(:license_text) { "LicenseText" }
|
|
23
23
|
|
|
@@ -25,18 +25,21 @@ module LicenseFinder
|
|
|
25
25
|
license = double(:license, name: "LicenseName")
|
|
26
26
|
allow(License).to receive(:find_by_text).with(license_text).and_return(license)
|
|
27
27
|
|
|
28
|
-
expect(subject.
|
|
28
|
+
expect(subject.licenses.length).to eq 1
|
|
29
|
+
expect(subject.licenses.first.name).to eq "LicenseName"
|
|
29
30
|
end
|
|
30
31
|
|
|
31
32
|
it "returns other if the license can't be found by text" do
|
|
32
33
|
allow(License).to receive(:find_by_text).with(license_text).and_return(nil)
|
|
33
34
|
|
|
34
|
-
expect(subject.
|
|
35
|
+
expect(subject.licenses.length).to eq 1
|
|
36
|
+
expect(subject.licenses.first.name).to eq "other"
|
|
35
37
|
end
|
|
36
38
|
end
|
|
37
39
|
|
|
38
40
|
it "returns other when there's no license" do
|
|
39
|
-
expect(subject.
|
|
41
|
+
expect(subject.licenses.length).to eq 1
|
|
42
|
+
expect(subject.licenses.first.name).to eq "other"
|
|
40
43
|
end
|
|
41
44
|
end
|
|
42
45
|
end
|
|
@@ -2,19 +2,20 @@ require 'spec_helper'
|
|
|
2
2
|
|
|
3
3
|
module LicenseFinder
|
|
4
4
|
describe CocoaPods do
|
|
5
|
+
let(:cocoa_pods) { CocoaPods.new }
|
|
6
|
+
it_behaves_like "a PackageManager"
|
|
7
|
+
|
|
5
8
|
def stub_acknowledgments(hash = {})
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
]
|
|
14
|
-
}
|
|
9
|
+
plist = {
|
|
10
|
+
"PreferenceSpecifiers" => [
|
|
11
|
+
{
|
|
12
|
+
"FooterText" => hash[:license],
|
|
13
|
+
"Title" => hash[:name]
|
|
14
|
+
}
|
|
15
|
+
]
|
|
15
16
|
}
|
|
16
17
|
|
|
17
|
-
expect(
|
|
18
|
+
expect(cocoa_pods).to receive(:read_plist).and_return(plist)
|
|
18
19
|
end
|
|
19
20
|
|
|
20
21
|
def stub_lockfile(pods)
|
|
@@ -34,7 +35,7 @@ module LicenseFinder
|
|
|
34
35
|
expect(CocoaPodsPackage).to receive(:new).with("JSONKit", "1.5pre", anything)
|
|
35
36
|
expect(CocoaPodsPackage).to receive(:new).with("OpenUDID", "1.0.0", anything)
|
|
36
37
|
|
|
37
|
-
current_packages =
|
|
38
|
+
current_packages = cocoa_pods.current_packages
|
|
38
39
|
|
|
39
40
|
expect(current_packages.size).to eq(3)
|
|
40
41
|
end
|
|
@@ -45,7 +46,7 @@ module LicenseFinder
|
|
|
45
46
|
|
|
46
47
|
expect(CocoaPodsPackage).to receive(:new).with("Dependency Name", "1.0", "License Text")
|
|
47
48
|
|
|
48
|
-
|
|
49
|
+
cocoa_pods.current_packages
|
|
49
50
|
end
|
|
50
51
|
|
|
51
52
|
it "handles no licenses" do
|
|
@@ -54,25 +55,22 @@ module LicenseFinder
|
|
|
54
55
|
|
|
55
56
|
expect(CocoaPodsPackage).to receive(:new).with("Dependency Name", "1.0", nil)
|
|
56
57
|
|
|
57
|
-
|
|
58
|
+
cocoa_pods.current_packages
|
|
58
59
|
end
|
|
59
60
|
end
|
|
60
61
|
|
|
61
62
|
describe '.active?' do
|
|
62
|
-
let(:
|
|
63
|
-
|
|
64
|
-
before do
|
|
65
|
-
CocoaPods.stub(package_path: package)
|
|
66
|
-
end
|
|
63
|
+
let(:package_path) { double(:package_file) }
|
|
64
|
+
let(:cocoa_pods) { CocoaPods.new package_path: package_path }
|
|
67
65
|
|
|
68
66
|
it 'is true with a Podfile file' do
|
|
69
|
-
|
|
70
|
-
expect(
|
|
67
|
+
allow(package_path).to receive_messages(:exist? => true)
|
|
68
|
+
expect(cocoa_pods).to be_active
|
|
71
69
|
end
|
|
72
70
|
|
|
73
71
|
it 'is false without a Podfile file' do
|
|
74
|
-
|
|
75
|
-
expect(
|
|
72
|
+
allow(package_path).to receive_messages(:exist? => false)
|
|
73
|
+
expect(cocoa_pods).to_not be_active
|
|
76
74
|
end
|
|
77
75
|
end
|
|
78
76
|
end
|
|
@@ -14,15 +14,16 @@ module LicenseFinder
|
|
|
14
14
|
)
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
-
it_behaves_like "
|
|
17
|
+
it_behaves_like "a Package"
|
|
18
18
|
|
|
19
19
|
its(:name) { should == "logback-classic" }
|
|
20
20
|
its(:version) { should == "1.1.1" }
|
|
21
21
|
its(:description) { should == "" }
|
|
22
22
|
|
|
23
|
-
describe "#
|
|
23
|
+
describe "#licenses" do
|
|
24
24
|
it "returns the license if found" do
|
|
25
|
-
subject.
|
|
25
|
+
expect(subject.licenses.length).to eq 1
|
|
26
|
+
expect(subject.licenses.first.name).to eq "Eclipse Public License - v 1.0"
|
|
26
27
|
end
|
|
27
28
|
|
|
28
29
|
context "when there are multiple licenses" do
|
|
@@ -40,7 +41,8 @@ module LicenseFinder
|
|
|
40
41
|
end
|
|
41
42
|
|
|
42
43
|
it "returns 'multiple licenses'" do
|
|
43
|
-
subject.
|
|
44
|
+
expect(subject.licenses.length).to eq 2
|
|
45
|
+
expect(subject.licenses.map(&:name)).to eq ['Eclipse Public License - v 1.0', 'GNU Lesser General Public License']
|
|
44
46
|
end
|
|
45
47
|
end
|
|
46
48
|
|
|
@@ -56,7 +58,8 @@ module LicenseFinder
|
|
|
56
58
|
end
|
|
57
59
|
|
|
58
60
|
it "returns 'other' otherwise" do
|
|
59
|
-
subject.
|
|
61
|
+
expect(subject.licenses.length).to eq 1
|
|
62
|
+
expect(subject.licenses.first.name).to eq "other"
|
|
60
63
|
end
|
|
61
64
|
end
|
|
62
65
|
end
|
|
@@ -2,6 +2,9 @@ require 'spec_helper'
|
|
|
2
2
|
|
|
3
3
|
module LicenseFinder
|
|
4
4
|
describe Gradle do
|
|
5
|
+
let(:gradle) { Gradle.new }
|
|
6
|
+
it_behaves_like "a PackageManager"
|
|
7
|
+
|
|
5
8
|
def license_xml(xml)
|
|
6
9
|
<<-resp
|
|
7
10
|
<dependencies>
|
|
@@ -13,7 +16,7 @@ module LicenseFinder
|
|
|
13
16
|
describe '.current_packages' do
|
|
14
17
|
before do
|
|
15
18
|
allow(LicenseFinder.config).to receive(:gradle_command) { 'gradlefoo' }
|
|
16
|
-
expect(
|
|
19
|
+
expect(gradle).to receive('`').with(/gradlefoo downloadLicenses/)
|
|
17
20
|
end
|
|
18
21
|
|
|
19
22
|
it 'lists all the current packages' do
|
|
@@ -28,9 +31,9 @@ module LicenseFinder
|
|
|
28
31
|
</dependency>
|
|
29
32
|
""")
|
|
30
33
|
fake_file = double(:license_report, read: license_xml)
|
|
31
|
-
allow(
|
|
34
|
+
allow(gradle).to receive(:license_report).and_return(fake_file)
|
|
32
35
|
|
|
33
|
-
current_packages =
|
|
36
|
+
current_packages = gradle.current_packages
|
|
34
37
|
|
|
35
38
|
expect(current_packages.size).to eq(2)
|
|
36
39
|
expect(current_packages.first).to be_a(Package)
|
|
@@ -45,10 +48,10 @@ module LicenseFinder
|
|
|
45
48
|
""")
|
|
46
49
|
|
|
47
50
|
fake_file = double(:license_report, read: license_xml)
|
|
48
|
-
allow(
|
|
51
|
+
allow(gradle).to receive(:license_report).and_return(fake_file)
|
|
49
52
|
|
|
50
|
-
GradlePackage.
|
|
51
|
-
|
|
53
|
+
expect(GradlePackage).to receive(:new).with({"license" => [{"name" => "License 1"}, {"name" => "License 2"}]}, anything)
|
|
54
|
+
gradle.current_packages
|
|
52
55
|
end
|
|
53
56
|
|
|
54
57
|
it "handles no licenses" do
|
|
@@ -59,36 +62,33 @@ module LicenseFinder
|
|
|
59
62
|
""")
|
|
60
63
|
|
|
61
64
|
fake_file = double(:license_report, read: license_xml)
|
|
62
|
-
allow(
|
|
65
|
+
allow(gradle).to receive(:license_report).and_return(fake_file)
|
|
63
66
|
|
|
64
|
-
GradlePackage.
|
|
65
|
-
|
|
67
|
+
expect(GradlePackage).to receive(:new).with({"license" => []}, anything)
|
|
68
|
+
gradle.current_packages
|
|
66
69
|
end
|
|
67
70
|
|
|
68
71
|
it "handles an empty list of licenses" do
|
|
69
72
|
license_xml = license_xml("")
|
|
70
73
|
|
|
71
74
|
fake_file = double(:license_report, read: license_xml)
|
|
72
|
-
allow(
|
|
73
|
-
|
|
75
|
+
allow(gradle).to receive(:license_report).and_return(fake_file)
|
|
76
|
+
gradle.current_packages
|
|
74
77
|
end
|
|
75
78
|
end
|
|
76
79
|
|
|
77
80
|
describe '.active?' do
|
|
78
|
-
let(:
|
|
79
|
-
|
|
80
|
-
before do
|
|
81
|
-
Gradle.stub(package_path: package)
|
|
82
|
-
end
|
|
81
|
+
let(:package_path) { double(:package_file) }
|
|
82
|
+
let(:gradle) { Gradle.new package_path: package_path }
|
|
83
83
|
|
|
84
84
|
it 'is true with a build.gradle file' do
|
|
85
|
-
|
|
86
|
-
expect(
|
|
85
|
+
allow(package_path).to receive_messages(:exist? => true)
|
|
86
|
+
expect(gradle).to be_active
|
|
87
87
|
end
|
|
88
88
|
|
|
89
89
|
it 'is false without a build.gradle file' do
|
|
90
|
-
|
|
91
|
-
expect(
|
|
90
|
+
allow(package_path).to receive_messages(:exist? => false)
|
|
91
|
+
expect(gradle).to_not be_active
|
|
92
92
|
end
|
|
93
93
|
end
|
|
94
94
|
end
|
|
@@ -16,15 +16,16 @@ module LicenseFinder
|
|
|
16
16
|
)
|
|
17
17
|
end
|
|
18
18
|
|
|
19
|
-
it_behaves_like "
|
|
19
|
+
it_behaves_like "a Package"
|
|
20
20
|
|
|
21
21
|
its(:name) { should == "hamcrest-core" }
|
|
22
22
|
its(:version) { should == "4.11" }
|
|
23
23
|
its(:description) { should == "" }
|
|
24
24
|
|
|
25
|
-
describe "#
|
|
25
|
+
describe "#licenses" do
|
|
26
26
|
it "returns the license if found" do
|
|
27
|
-
subject.
|
|
27
|
+
expect(subject.licenses.length).to eq 1
|
|
28
|
+
expect(subject.licenses.first.name).to eq "Common Public License Version 1.0"
|
|
28
29
|
end
|
|
29
30
|
|
|
30
31
|
context "when there are multiple licenses" do
|
|
@@ -46,7 +47,8 @@ module LicenseFinder
|
|
|
46
47
|
end
|
|
47
48
|
|
|
48
49
|
it "returns 'multiple licenses'" do
|
|
49
|
-
subject.
|
|
50
|
+
expect(subject.licenses.length).to eq 2
|
|
51
|
+
expect(subject.licenses.map(&:name)).to eq ['Common Public License Version 1.0', 'Apache 2']
|
|
50
52
|
end
|
|
51
53
|
end
|
|
52
54
|
|
|
@@ -62,7 +64,8 @@ module LicenseFinder
|
|
|
62
64
|
end
|
|
63
65
|
|
|
64
66
|
it "returns 'other' otherwise" do
|
|
65
|
-
subject.
|
|
67
|
+
expect(subject.licenses.length).to eq 1
|
|
68
|
+
expect(subject.licenses.first.name).to eq "other"
|
|
66
69
|
end
|
|
67
70
|
end
|
|
68
71
|
end
|
|
@@ -2,6 +2,9 @@ require 'spec_helper'
|
|
|
2
2
|
|
|
3
3
|
module LicenseFinder
|
|
4
4
|
describe Maven do
|
|
5
|
+
let(:maven) { Maven.new }
|
|
6
|
+
it_behaves_like "a PackageManager"
|
|
7
|
+
|
|
5
8
|
def license_xml(xml)
|
|
6
9
|
<<-resp
|
|
7
10
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
@@ -15,7 +18,7 @@ module LicenseFinder
|
|
|
15
18
|
|
|
16
19
|
describe '.current_packages' do
|
|
17
20
|
before do
|
|
18
|
-
expect(
|
|
21
|
+
expect(maven).to receive('`').with(/mvn/)
|
|
19
22
|
end
|
|
20
23
|
|
|
21
24
|
it 'lists all the current packages' do
|
|
@@ -45,9 +48,9 @@ module LicenseFinder
|
|
|
45
48
|
</dependency>
|
|
46
49
|
""")
|
|
47
50
|
fake_file = double(:license_report, read: license_xml)
|
|
48
|
-
allow(
|
|
51
|
+
allow(maven).to receive(:license_report).and_return(fake_file)
|
|
49
52
|
|
|
50
|
-
current_packages =
|
|
53
|
+
current_packages = maven.current_packages
|
|
51
54
|
|
|
52
55
|
expect(current_packages.size).to eq(2)
|
|
53
56
|
expect(current_packages.first).to be_a(Package)
|
|
@@ -68,10 +71,10 @@ module LicenseFinder
|
|
|
68
71
|
""")
|
|
69
72
|
|
|
70
73
|
fake_file = double(:license_report, read: license_xml)
|
|
71
|
-
allow(
|
|
74
|
+
allow(maven).to receive(:license_report).and_return(fake_file)
|
|
72
75
|
|
|
73
|
-
MavenPackage.
|
|
74
|
-
|
|
76
|
+
expect(MavenPackage).to receive(:new).with({"licenses" => [{"name" => "License 1"}, {"name" => "License 2"}]}, anything)
|
|
77
|
+
maven.current_packages
|
|
75
78
|
end
|
|
76
79
|
|
|
77
80
|
it "handles no licenses" do
|
|
@@ -84,28 +87,25 @@ module LicenseFinder
|
|
|
84
87
|
""")
|
|
85
88
|
|
|
86
89
|
fake_file = double(:license_report, read: license_xml)
|
|
87
|
-
allow(
|
|
90
|
+
allow(maven).to receive(:license_report).and_return(fake_file)
|
|
88
91
|
|
|
89
|
-
MavenPackage.
|
|
90
|
-
|
|
92
|
+
expect(MavenPackage).to receive(:new).with({"licenses" => {}}, anything)
|
|
93
|
+
maven.current_packages
|
|
91
94
|
end
|
|
92
95
|
end
|
|
93
96
|
|
|
94
97
|
describe '.active?' do
|
|
95
|
-
let(:
|
|
96
|
-
|
|
97
|
-
before do
|
|
98
|
-
allow(Maven).to receive(:package_path).and_return(package)
|
|
99
|
-
end
|
|
98
|
+
let(:package_path) { double(:package_file) }
|
|
99
|
+
let(:maven) { Maven.new package_path: package_path }
|
|
100
100
|
|
|
101
101
|
it 'is true with a pom.xml file' do
|
|
102
|
-
allow(
|
|
103
|
-
expect(
|
|
102
|
+
allow(package_path).to receive(:exist?).and_return(true)
|
|
103
|
+
expect(maven.active?).to eq(true)
|
|
104
104
|
end
|
|
105
105
|
|
|
106
106
|
it 'is false without a pom.xml file' do
|
|
107
|
-
allow(
|
|
108
|
-
expect(
|
|
107
|
+
allow(package_path).to receive(:exist?).and_return(false)
|
|
108
|
+
expect(maven.active?).to eq(false)
|
|
109
109
|
end
|
|
110
110
|
end
|
|
111
111
|
end
|
|
@@ -13,7 +13,7 @@ module LicenseFinder
|
|
|
13
13
|
)
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
-
it_behaves_like "
|
|
16
|
+
it_behaves_like "a Package"
|
|
17
17
|
|
|
18
18
|
its(:name) { should == "jasmine-node" }
|
|
19
19
|
its(:version) { should == "1.3.1" }
|
|
@@ -23,9 +23,9 @@ module LicenseFinder
|
|
|
23
23
|
its(:groups) { should == [] }
|
|
24
24
|
its(:children) { should == [] }
|
|
25
25
|
|
|
26
|
-
describe '#
|
|
26
|
+
describe '#licenses' do
|
|
27
27
|
def stub_license_files(license_files)
|
|
28
|
-
PossibleLicenseFiles.
|
|
28
|
+
allow(PossibleLicenseFiles).to receive(:find).with("some/node/package/path").and_return(license_files)
|
|
29
29
|
end
|
|
30
30
|
|
|
31
31
|
let(:node_module1) { {"license" => "MIT", "path" => "/some/path"} }
|
|
@@ -35,11 +35,25 @@ module LicenseFinder
|
|
|
35
35
|
let(:misdeclared_node_module) { {"licenses" => {"type" => "MIT"}} }
|
|
36
36
|
|
|
37
37
|
it 'finds the license for both license structures' do
|
|
38
|
-
NpmPackage.new(node_module1)
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
NpmPackage.new(
|
|
38
|
+
package = NpmPackage.new(node_module1)
|
|
39
|
+
expect(package.licenses.length).to eq 1
|
|
40
|
+
expect(package.licenses.first.name).to eq("MIT")
|
|
41
|
+
|
|
42
|
+
package = NpmPackage.new(node_module2)
|
|
43
|
+
expect(package.licenses.length).to eq 1
|
|
44
|
+
expect(package.licenses.first.name).to eq("BSD")
|
|
45
|
+
|
|
46
|
+
package = NpmPackage.new(node_module3)
|
|
47
|
+
expect(package.licenses.length).to eq 1
|
|
48
|
+
expect(package.licenses.first.name).to eq("Python Software Foundation License")
|
|
49
|
+
|
|
50
|
+
package = NpmPackage.new(node_module4)
|
|
51
|
+
expect(package.licenses.length).to eq 1
|
|
52
|
+
expect(package.licenses.first.name).to eq("MIT")
|
|
53
|
+
|
|
54
|
+
package = NpmPackage.new(misdeclared_node_module)
|
|
55
|
+
expect(package.licenses.length).to eq 1
|
|
56
|
+
expect(package.licenses.first.name).to eq("MIT")
|
|
43
57
|
end
|
|
44
58
|
|
|
45
59
|
context "regardless of whether there are licenses in files" do
|
|
@@ -49,38 +63,43 @@ module LicenseFinder
|
|
|
49
63
|
|
|
50
64
|
it "returns the license from the spec if there is only one unique license" do
|
|
51
65
|
package = NpmPackage.new({ "licenses" => ["MIT", "Expat"], "path" => "/path/to/thing" })
|
|
52
|
-
expect(package.
|
|
66
|
+
expect(package.licenses.length).to eq 1
|
|
67
|
+
expect(package.licenses.first.name).to eq("MIT")
|
|
53
68
|
end
|
|
54
69
|
|
|
55
70
|
it "returns 'multiple licenses' if there's more than one license" do
|
|
56
71
|
package = NpmPackage.new({ "licenses" => ["MIT", "BSD"], "path" => "/some/path" })
|
|
57
|
-
expect(package.
|
|
72
|
+
expect(package.licenses.length).to eq 2
|
|
73
|
+
expect(package.licenses.map(&:name)).to eq %w(MIT BSD)
|
|
58
74
|
end
|
|
59
75
|
end
|
|
60
76
|
|
|
61
77
|
context "when there is nothing in the spec" do
|
|
62
78
|
it "returns a license in a file if only one unique license detected" do
|
|
63
79
|
stub_license_files([
|
|
64
|
-
double(:first_file, license: License.find_by_name('MIT')),
|
|
65
|
-
double(:second_file, license: License.find_by_name('Expat'))
|
|
80
|
+
double(:first_file, license: License.find_by_name('MIT'), path: "/"),
|
|
81
|
+
double(:second_file, license: License.find_by_name('Expat'), path: "/")
|
|
66
82
|
])
|
|
67
83
|
|
|
68
|
-
subject.
|
|
84
|
+
expect(subject.licenses.length).to eq 1
|
|
85
|
+
expect(subject.licenses.first.name).to eq "MIT"
|
|
69
86
|
end
|
|
70
87
|
|
|
71
88
|
it "returns 'other' if there are no licenses in files" do
|
|
72
89
|
stub_license_files []
|
|
73
90
|
|
|
74
|
-
subject.
|
|
91
|
+
expect(subject.licenses.length).to eq 1
|
|
92
|
+
expect(subject.licenses.first.name).to eq "other"
|
|
75
93
|
end
|
|
76
94
|
|
|
77
95
|
it "returns 'other' if there are many licenses in files" do
|
|
78
96
|
stub_license_files([
|
|
79
|
-
double(:first_file, license: License.find_by_name('First Detected License')),
|
|
80
|
-
double(:second_file, license: License.find_by_name('Second Detected License'))
|
|
97
|
+
double(:first_file, license: License.find_by_name('First Detected License'), path: "/"),
|
|
98
|
+
double(:second_file, license: License.find_by_name('Second Detected License'), path: "/")
|
|
81
99
|
])
|
|
82
100
|
|
|
83
|
-
subject.
|
|
101
|
+
expect(subject.licenses.length).to eq 2
|
|
102
|
+
expect(subject.licenses.map(&:name)).to eq ["First Detected License", "Second Detected License"]
|
|
84
103
|
end
|
|
85
104
|
end
|
|
86
105
|
end
|