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
|
@@ -4,10 +4,10 @@ module LicenseFinder
|
|
|
4
4
|
describe Configuration do
|
|
5
5
|
describe ".ensure_default" do
|
|
6
6
|
it "should init and use saved config" do
|
|
7
|
-
Configuration::Persistence.
|
|
8
|
-
Configuration::Persistence.
|
|
7
|
+
expect(Configuration::Persistence).to receive(:init)
|
|
8
|
+
allow(Configuration::Persistence).to receive(:get).and_return('whitelist' => ['Saved License'])
|
|
9
9
|
|
|
10
|
-
described_class.ensure_default.whitelist.
|
|
10
|
+
expect(described_class.ensure_default.whitelist).to eq(['Saved License'])
|
|
11
11
|
end
|
|
12
12
|
end
|
|
13
13
|
|
|
@@ -25,11 +25,11 @@ module LicenseFinder
|
|
|
25
25
|
describe '.new' do
|
|
26
26
|
it "should default missing attributes" do
|
|
27
27
|
subject = described_class.new({})
|
|
28
|
-
subject.whitelist.
|
|
29
|
-
subject.ignore_groups.
|
|
30
|
-
subject.ignore_dependencies.
|
|
31
|
-
subject.artifacts.dir.
|
|
32
|
-
subject.gradle_command.
|
|
28
|
+
expect(subject.whitelist).to eq([])
|
|
29
|
+
expect(subject.ignore_groups).to eq([])
|
|
30
|
+
expect(subject.ignore_dependencies).to eq([])
|
|
31
|
+
expect(subject.artifacts.dir).to eq(Pathname('./doc/'))
|
|
32
|
+
expect(subject.gradle_command).to eq('gradle')
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
it "should default missing attributes even if they are saved as nils in the YAML file" do
|
|
@@ -42,12 +42,12 @@ module LicenseFinder
|
|
|
42
42
|
"gradle_command" => nil
|
|
43
43
|
}
|
|
44
44
|
subject = described_class.new(attributes)
|
|
45
|
-
subject.whitelist.
|
|
46
|
-
subject.ignore_groups.
|
|
47
|
-
subject.ignore_dependencies.
|
|
48
|
-
subject.artifacts.dir.
|
|
49
|
-
subject.project_name.
|
|
50
|
-
subject.gradle_command.
|
|
45
|
+
expect(subject.whitelist).to eq([])
|
|
46
|
+
expect(subject.ignore_groups).to eq([])
|
|
47
|
+
expect(subject.ignore_dependencies).to eq([])
|
|
48
|
+
expect(subject.artifacts.dir).to eq(Pathname('./doc/'))
|
|
49
|
+
expect(subject.project_name).not_to be_nil
|
|
50
|
+
expect(subject.gradle_command).to eq('gradle')
|
|
51
51
|
end
|
|
52
52
|
|
|
53
53
|
it "should set the all of the attributes on the instance" do
|
|
@@ -60,36 +60,36 @@ module LicenseFinder
|
|
|
60
60
|
"gradle_command" => "./gradlew"
|
|
61
61
|
}
|
|
62
62
|
subject = described_class.new(attributes)
|
|
63
|
-
subject.whitelist.
|
|
64
|
-
subject.ignore_groups.
|
|
65
|
-
subject.ignore_dependencies.
|
|
66
|
-
subject.artifacts.dir.
|
|
67
|
-
subject.project_name.
|
|
68
|
-
subject.gradle_command.
|
|
63
|
+
expect(subject.whitelist).to eq(%w{a whitelist})
|
|
64
|
+
expect(subject.ignore_groups).to eq(%w{test development})
|
|
65
|
+
expect(subject.ignore_dependencies).to eq(%w{bundler})
|
|
66
|
+
expect(subject.artifacts.dir).to eq(Pathname("some/path"))
|
|
67
|
+
expect(subject.project_name).to eq("my_app")
|
|
68
|
+
expect(subject.gradle_command).to eq("./gradlew")
|
|
69
69
|
end
|
|
70
70
|
end
|
|
71
71
|
|
|
72
72
|
describe "file paths" do
|
|
73
73
|
it "should be relative to artifacts dir" do
|
|
74
74
|
artifacts = described_class.new('dependencies_file_dir' => './elsewhere').artifacts
|
|
75
|
-
artifacts.dir.
|
|
76
|
-
artifacts.legacy_yaml_file.
|
|
77
|
-
artifacts.text_file.
|
|
78
|
-
artifacts.html_file.
|
|
75
|
+
expect(artifacts.dir).to eq(Pathname('./elsewhere'))
|
|
76
|
+
expect(artifacts.legacy_yaml_file).to eq(Pathname('./elsewhere/dependencies.yml'))
|
|
77
|
+
expect(artifacts.text_file).to eq(Pathname('./elsewhere/dependencies.csv'))
|
|
78
|
+
expect(artifacts.html_file).to eq(Pathname('./elsewhere/dependencies.html'))
|
|
79
79
|
end
|
|
80
80
|
end
|
|
81
81
|
|
|
82
82
|
describe "#database_uri" do
|
|
83
83
|
it "should URI escape absolute path to dependencies_file_dir, even with spaces" do
|
|
84
84
|
artifacts = described_class.new('dependencies_file_dir' => 'test path').artifacts
|
|
85
|
-
artifacts.database_uri.
|
|
85
|
+
expect(artifacts.database_uri).to match(%r{test%20path/dependencies\.db$})
|
|
86
86
|
end
|
|
87
87
|
end
|
|
88
88
|
|
|
89
89
|
describe "#project_name" do
|
|
90
90
|
it "should default to the directory name" do
|
|
91
|
-
Dir.
|
|
92
|
-
described_class.new({}).project_name.
|
|
91
|
+
allow(Dir).to receive(:getwd).and_return("/path/to/a_project")
|
|
92
|
+
expect(described_class.new({}).project_name).to eq("a_project")
|
|
93
93
|
end
|
|
94
94
|
end
|
|
95
95
|
|
|
@@ -106,7 +106,7 @@ module LicenseFinder
|
|
|
106
106
|
end
|
|
107
107
|
|
|
108
108
|
it "persists the configuration attributes" do
|
|
109
|
-
Configuration::Persistence.
|
|
109
|
+
expect(Configuration::Persistence).to receive(:set).with(attributes)
|
|
110
110
|
described_class.new(attributes).save
|
|
111
111
|
end
|
|
112
112
|
|
|
@@ -116,7 +116,7 @@ module LicenseFinder
|
|
|
116
116
|
config.ignore_groups << 'test'
|
|
117
117
|
config.ignore_dependencies << 'bundler'
|
|
118
118
|
|
|
119
|
-
Configuration::Persistence.
|
|
119
|
+
expect(Configuration::Persistence).to receive(:set).with(attributes)
|
|
120
120
|
config.save
|
|
121
121
|
end
|
|
122
122
|
end
|
|
@@ -131,11 +131,11 @@ module LicenseFinder
|
|
|
131
131
|
let(:markdown_modified_time) { 5 }
|
|
132
132
|
|
|
133
133
|
before do
|
|
134
|
-
allow(File).to receive(:mtime).with(
|
|
135
|
-
allow(File).to receive(:mtime).with(
|
|
136
|
-
allow(File).to receive(:mtime).with(
|
|
137
|
-
allow(File).to receive(:mtime).with(
|
|
138
|
-
allow(File).to receive(:mtime).with(
|
|
134
|
+
allow(File).to receive(:mtime).with('./doc/dependencies.db') { database_modified_time }
|
|
135
|
+
allow(File).to receive(:mtime).with('./doc/dependencies.csv') { text_modified_time }
|
|
136
|
+
allow(File).to receive(:mtime).with('./doc/dependencies_detailed.csv') { detailed_text_modified_time }
|
|
137
|
+
allow(File).to receive(:mtime).with('./doc/dependencies.html') { html_modified_time }
|
|
138
|
+
allow(File).to receive(:mtime).with('./doc/dependencies.md') { markdown_modified_time }
|
|
139
139
|
end
|
|
140
140
|
|
|
141
141
|
it 'returns the earliest modified date of the config file' do
|
|
@@ -150,17 +150,17 @@ module LicenseFinder
|
|
|
150
150
|
file = double(:file,
|
|
151
151
|
:exist? => true,
|
|
152
152
|
:read => {'some' => 'config'}.to_yaml)
|
|
153
|
-
described_class.
|
|
153
|
+
allow(described_class).to receive(:file).and_return(file)
|
|
154
154
|
|
|
155
|
-
described_class.get.
|
|
155
|
+
expect(described_class.get).to eq({'some' => 'config'})
|
|
156
156
|
end
|
|
157
157
|
|
|
158
158
|
it "should not mind if config is not saved" do
|
|
159
159
|
file = double(:file, :exist? => false)
|
|
160
|
-
described_class.
|
|
160
|
+
allow(described_class).to receive(:file).and_return(file)
|
|
161
161
|
|
|
162
|
-
file.
|
|
163
|
-
described_class.get.
|
|
162
|
+
expect(file).not_to receive(:read)
|
|
163
|
+
expect(described_class.get).to eq({})
|
|
164
164
|
end
|
|
165
165
|
end
|
|
166
166
|
|
|
@@ -172,36 +172,35 @@ module LicenseFinder
|
|
|
172
172
|
end
|
|
173
173
|
|
|
174
174
|
it "writes the configuration attributes to the yaml file" do
|
|
175
|
-
described_class.
|
|
175
|
+
allow(described_class).to receive(:file).and_return(Pathname.new(tmp_yml))
|
|
176
176
|
|
|
177
177
|
described_class.set('some' => 'config')
|
|
178
|
-
described_class.get.
|
|
178
|
+
expect(described_class.get).to eq({'some' => 'config'})
|
|
179
179
|
end
|
|
180
180
|
end
|
|
181
181
|
|
|
182
182
|
describe ".init" do
|
|
183
183
|
it "initializes the config file" do
|
|
184
184
|
file = double(:file, :exist? => false)
|
|
185
|
-
described_class.
|
|
185
|
+
allow(described_class).to receive(:file).and_return(file)
|
|
186
186
|
|
|
187
|
-
FileUtils.
|
|
187
|
+
expect(FileUtils).to receive(:cp).with(described_class.send(:file_template), file)
|
|
188
188
|
described_class.init
|
|
189
189
|
end
|
|
190
190
|
|
|
191
191
|
it "does nothing if there is already a config file" do
|
|
192
192
|
file = double(:file, :exist? => true)
|
|
193
|
-
described_class.
|
|
193
|
+
allow(described_class).to receive(:file).and_return(file)
|
|
194
194
|
|
|
195
|
-
FileUtils.
|
|
195
|
+
expect(FileUtils).not_to receive(:cp)
|
|
196
196
|
described_class.init
|
|
197
197
|
end
|
|
198
198
|
end
|
|
199
199
|
|
|
200
200
|
describe ".last_modified" do
|
|
201
201
|
let(:time) { double :time }
|
|
202
|
-
let(:config_path) { Pathname.new('.').join('config').join('license_finder.yml') }
|
|
203
202
|
before do
|
|
204
|
-
allow(File).to receive(:mtime).with(
|
|
203
|
+
allow(File).to receive(:mtime).with('config/license_finder.yml') { time }
|
|
205
204
|
end
|
|
206
205
|
|
|
207
206
|
it "returns the last time the yml file was modified" do
|
|
@@ -3,15 +3,19 @@ require 'spec_helper'
|
|
|
3
3
|
module LicenseFinder
|
|
4
4
|
describe DependencyManager do
|
|
5
5
|
let(:config) { Configuration.new('whitelist' => ['MIT', 'other']) }
|
|
6
|
+
let(:dependency_manager) { DependencyManager.new }
|
|
6
7
|
|
|
7
8
|
before do
|
|
8
|
-
LicenseFinder.
|
|
9
|
-
Reporter.
|
|
9
|
+
allow(LicenseFinder).to receive(:config).and_return config
|
|
10
|
+
allow(Reporter).to receive(:write_reports)
|
|
10
11
|
end
|
|
11
12
|
|
|
12
13
|
describe "#sync" do
|
|
13
14
|
let(:gem1) { double(:package) }
|
|
14
15
|
let(:gem2) { double(:package) }
|
|
16
|
+
let!(:bundler) { Bundler.new }
|
|
17
|
+
|
|
18
|
+
before { allow(Bundler).to receive(:new) { bundler } }
|
|
15
19
|
|
|
16
20
|
it "destroys every dependency except for the ones Bundler reports as 'current' or are marked as 'added_manually'" do
|
|
17
21
|
cur1 = Dependency.create(name: "current dependency 1")
|
|
@@ -21,46 +25,46 @@ module LicenseFinder
|
|
|
21
25
|
Dependency.create(name: "old dependency 2")
|
|
22
26
|
|
|
23
27
|
current_packages = [gem1, gem2]
|
|
24
|
-
|
|
25
|
-
PackageSaver.
|
|
28
|
+
allow(bundler).to receive(:current_packages) { current_packages }
|
|
29
|
+
expect(PackageSaver).to receive(:save_all).with(current_packages).and_return([cur1, cur2])
|
|
26
30
|
|
|
27
|
-
|
|
28
|
-
Dependency.all.map(&:name).
|
|
31
|
+
dependency_manager.sync_with_package_managers
|
|
32
|
+
expect(Dependency.all.map(&:name)).to match_array([cur1, cur2, man1].map(&:name))
|
|
29
33
|
end
|
|
30
34
|
end
|
|
31
35
|
|
|
32
36
|
describe ".manually_add" do
|
|
33
37
|
it "should add a Dependency" do
|
|
34
38
|
expect do
|
|
35
|
-
|
|
39
|
+
dependency_manager.manually_add("MIT", "js_dep", "0.0.0")
|
|
36
40
|
end.to change(Dependency, :count).by(1)
|
|
37
41
|
end
|
|
38
42
|
|
|
39
43
|
it "should mark the dependency as manual" do
|
|
40
|
-
|
|
41
|
-
.
|
|
44
|
+
expect(dependency_manager.manually_add("MIT", "js_dep", "0.0.0"))
|
|
45
|
+
.to be_added_manually
|
|
42
46
|
end
|
|
43
47
|
|
|
44
48
|
it "should set the appropriate values" do
|
|
45
|
-
dep =
|
|
46
|
-
dep.name.
|
|
47
|
-
dep.version.
|
|
48
|
-
dep.
|
|
49
|
-
dep.
|
|
49
|
+
dep = dependency_manager.manually_add("GPL", "js_dep", "0.0.0")
|
|
50
|
+
expect(dep.name).to eq("js_dep")
|
|
51
|
+
expect(dep.version).to eq("0.0.0")
|
|
52
|
+
expect(dep.licenses.first.name).to eq("GPL")
|
|
53
|
+
expect(dep).not_to be_approved
|
|
50
54
|
end
|
|
51
55
|
|
|
52
56
|
it "should complain if the dependency already exists" do
|
|
53
57
|
Dependency.create(name: "current dependency 1")
|
|
54
|
-
expect {
|
|
58
|
+
expect { dependency_manager.manually_add("GPL", "current dependency 1", "0.0.0") }
|
|
55
59
|
.to raise_error(Error)
|
|
56
60
|
end
|
|
57
61
|
end
|
|
58
62
|
|
|
59
63
|
describe ".manually_remove" do
|
|
60
64
|
it "should remove a manually managed Dependency" do
|
|
61
|
-
|
|
65
|
+
dependency_manager.manually_add("GPL", "a manually managed dep", nil)
|
|
62
66
|
expect do
|
|
63
|
-
|
|
67
|
+
dependency_manager.manually_remove("a manually managed dep")
|
|
64
68
|
end.to change(Dependency, :count).by(-1)
|
|
65
69
|
end
|
|
66
70
|
|
|
@@ -68,7 +72,7 @@ module LicenseFinder
|
|
|
68
72
|
Dependency.create(name: "a bundler dep")
|
|
69
73
|
expect do
|
|
70
74
|
expect do
|
|
71
|
-
|
|
75
|
+
dependency_manager.manually_remove("a bundler dep")
|
|
72
76
|
end.to raise_error(Error)
|
|
73
77
|
end.to_not change(Dependency, :count)
|
|
74
78
|
end
|
|
@@ -77,23 +81,23 @@ module LicenseFinder
|
|
|
77
81
|
describe ".approve!" do
|
|
78
82
|
it "approves the dependency" do
|
|
79
83
|
dep = Dependency.named("current dependency")
|
|
80
|
-
dep.
|
|
84
|
+
dep.licenses = [License.find_by_name('not approved')].to_set
|
|
81
85
|
dep.save
|
|
82
|
-
dep.reload.
|
|
83
|
-
|
|
84
|
-
dep.reload.
|
|
86
|
+
expect(dep.reload).not_to be_approved
|
|
87
|
+
dependency_manager.approve!("current dependency")
|
|
88
|
+
expect(dep.reload).to be_approved
|
|
85
89
|
end
|
|
86
90
|
|
|
87
91
|
it "optionally adds approver and approval notes" do
|
|
88
92
|
dep = Dependency.named("current dependency")
|
|
89
|
-
|
|
93
|
+
dependency_manager.approve!("current dependency", "Julian", "We really need this")
|
|
90
94
|
approval = dep.reload.manual_approval
|
|
91
|
-
approval.approver.
|
|
92
|
-
approval.notes.
|
|
95
|
+
expect(approval.approver).to eq "Julian"
|
|
96
|
+
expect(approval.notes).to eq "We really need this"
|
|
93
97
|
end
|
|
94
98
|
|
|
95
99
|
it "should raise an error if it can't find the dependency" do
|
|
96
|
-
expect {
|
|
100
|
+
expect { dependency_manager.approve!("non-existent dependency") }
|
|
97
101
|
.to raise_error(Error)
|
|
98
102
|
end
|
|
99
103
|
end
|
|
@@ -102,13 +106,13 @@ module LicenseFinder
|
|
|
102
106
|
let(:dependency) { double(:dependency) }
|
|
103
107
|
|
|
104
108
|
it "adds a license for the dependency" do
|
|
105
|
-
|
|
106
|
-
dependency.
|
|
107
|
-
|
|
109
|
+
allow(dependency_manager).to receive(:find_by_name).with("dependency").and_return(dependency)
|
|
110
|
+
expect(dependency).to receive(:set_license_manually!).with(License.find_by_name "MIT")
|
|
111
|
+
dependency_manager.license!("dependency", "MIT")
|
|
108
112
|
end
|
|
109
113
|
|
|
110
114
|
it "should raise an error if it can't find the dependency" do
|
|
111
|
-
expect {
|
|
115
|
+
expect { dependency_manager.license!("non-existent dependency", "a license") }
|
|
112
116
|
.to raise_error(Error)
|
|
113
117
|
end
|
|
114
118
|
end
|
|
@@ -119,53 +123,53 @@ module LicenseFinder
|
|
|
119
123
|
|
|
120
124
|
context "when the database doesn't exist" do
|
|
121
125
|
before do
|
|
122
|
-
config.artifacts.
|
|
126
|
+
allow(config.artifacts).to receive(:database_file).and_return(file_does_not_exist)
|
|
123
127
|
end
|
|
124
128
|
|
|
125
129
|
it "writes reports" do
|
|
126
|
-
Reporter.
|
|
127
|
-
|
|
130
|
+
expect(Reporter).to receive(:write_reports)
|
|
131
|
+
dependency_manager.modifying {}
|
|
128
132
|
end
|
|
129
133
|
end
|
|
130
134
|
|
|
131
135
|
context "when the database exists" do
|
|
132
136
|
before do
|
|
133
|
-
config.artifacts.
|
|
137
|
+
allow(config.artifacts).to receive(:database_file).and_return(file_exists)
|
|
134
138
|
end
|
|
135
139
|
|
|
136
140
|
context "when the database has changed" do
|
|
137
141
|
before do
|
|
138
142
|
i = 0
|
|
139
|
-
Digest::SHA2.
|
|
143
|
+
allow(Digest::SHA2).to receive_message_chain(:file, :hexdigest) { i += 1 }
|
|
140
144
|
end
|
|
141
145
|
|
|
142
146
|
it "writes reports" do
|
|
143
|
-
Reporter.
|
|
144
|
-
|
|
147
|
+
expect(Reporter).to receive(:write_reports)
|
|
148
|
+
dependency_manager.modifying {}
|
|
145
149
|
end
|
|
146
150
|
end
|
|
147
151
|
|
|
148
152
|
context "when the database has not changed" do
|
|
149
153
|
before do
|
|
150
|
-
Digest::SHA2.
|
|
154
|
+
allow(Digest::SHA2).to receive_message_chain(:file, :hexdigest) { 5 }
|
|
151
155
|
allow(config).to receive(:last_modified) { config_last_update }
|
|
152
156
|
allow(config.artifacts).to receive(:last_refreshed) { artifacts_last_update }
|
|
153
157
|
end
|
|
154
158
|
|
|
155
159
|
context "and the reports do not exist" do
|
|
156
160
|
before do
|
|
157
|
-
config.artifacts.
|
|
161
|
+
allow(config.artifacts).to receive(:html_file).and_return(file_does_not_exist)
|
|
158
162
|
end
|
|
159
163
|
|
|
160
164
|
it "writes reports" do
|
|
161
|
-
Reporter.
|
|
162
|
-
|
|
165
|
+
expect(Reporter).to receive(:write_reports)
|
|
166
|
+
dependency_manager.modifying {}
|
|
163
167
|
end
|
|
164
168
|
end
|
|
165
169
|
|
|
166
170
|
context "and the reports exist" do
|
|
167
171
|
before do
|
|
168
|
-
config.artifacts.
|
|
172
|
+
allow(config.artifacts).to receive(:html_file).and_return(file_exists)
|
|
169
173
|
end
|
|
170
174
|
|
|
171
175
|
context "and configs are newer than the reports" do
|
|
@@ -173,7 +177,7 @@ module LicenseFinder
|
|
|
173
177
|
let(:artifacts_last_update) { 1 }
|
|
174
178
|
it "writes reports" do
|
|
175
179
|
expect(Reporter).to receive(:write_reports)
|
|
176
|
-
|
|
180
|
+
dependency_manager.modifying {}
|
|
177
181
|
end
|
|
178
182
|
end
|
|
179
183
|
|
|
@@ -183,7 +187,7 @@ module LicenseFinder
|
|
|
183
187
|
|
|
184
188
|
it "does not write reports" do
|
|
185
189
|
expect(Reporter).not_to receive(:write_reports)
|
|
186
|
-
|
|
190
|
+
dependency_manager.modifying {}
|
|
187
191
|
end
|
|
188
192
|
end
|
|
189
193
|
end
|
|
@@ -3,46 +3,46 @@ require 'spec_helper'
|
|
|
3
3
|
describe LicenseFinder::License::Definitions do
|
|
4
4
|
it "should create unrecognized licenses" do
|
|
5
5
|
license = described_class.build_unrecognized("foo", [])
|
|
6
|
-
license.name.
|
|
7
|
-
license.url.
|
|
8
|
-
license.
|
|
9
|
-
license.
|
|
10
|
-
license.
|
|
6
|
+
expect(license.name).to eq("foo")
|
|
7
|
+
expect(license.url).to be_nil
|
|
8
|
+
expect(license).to be_matches_name("foo")
|
|
9
|
+
expect(license).not_to be_matches_text("foo")
|
|
10
|
+
expect(license).not_to be_whitelisted
|
|
11
11
|
end
|
|
12
12
|
|
|
13
13
|
it "should whitelist unrecognized licenses" do
|
|
14
14
|
license = described_class.build_unrecognized("foo", ["foo"])
|
|
15
|
-
license.
|
|
15
|
+
expect(license).to be_whitelisted
|
|
16
16
|
end
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
describe LicenseFinder::License, "Apache2" do
|
|
20
20
|
it "should be recognized" do |e|
|
|
21
|
-
described_class.find_by_name("Apache2").url.
|
|
21
|
+
expect(described_class.find_by_name("Apache2").url).to be
|
|
22
22
|
end
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
describe LicenseFinder::License, "BSD" do
|
|
26
26
|
it "should be recognized" do |e|
|
|
27
|
-
described_class.find_by_name("BSD").url.
|
|
27
|
+
expect(described_class.find_by_name("BSD").url).to be
|
|
28
28
|
end
|
|
29
29
|
end
|
|
30
30
|
|
|
31
31
|
describe LicenseFinder::License, "GPLv2" do
|
|
32
32
|
it "should be recognized" do
|
|
33
|
-
described_class.find_by_name("GPLv2").url.
|
|
33
|
+
expect(described_class.find_by_name("GPLv2").url).to be
|
|
34
34
|
end
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
describe LicenseFinder::License, "ISC" do
|
|
38
38
|
it "should be recognized" do
|
|
39
|
-
described_class.find_by_name("ISC").url.
|
|
39
|
+
expect(described_class.find_by_name("ISC").url).to be
|
|
40
40
|
end
|
|
41
41
|
end
|
|
42
42
|
|
|
43
43
|
describe LicenseFinder::License, "LGPL" do
|
|
44
44
|
it "should be recognized" do
|
|
45
|
-
described_class.find_by_name("LGPL").url.
|
|
45
|
+
expect(described_class.find_by_name("LGPL").url).to be
|
|
46
46
|
end
|
|
47
47
|
end
|
|
48
48
|
|
|
@@ -51,25 +51,25 @@ describe LicenseFinder::License, "MIT" do
|
|
|
51
51
|
|
|
52
52
|
describe "#matches_text?" do
|
|
53
53
|
it "should return true if the text contains the MIT url" do
|
|
54
|
-
subject.
|
|
54
|
+
expect(subject).to be_matches_text "MIT License is awesome http://opensource.org/licenses/mit-license"
|
|
55
55
|
|
|
56
|
-
subject.
|
|
56
|
+
expect(subject).to be_matches_text "MIT Licence is awesome http://www.opensource.org/licenses/mit-license"
|
|
57
57
|
|
|
58
|
-
subject.
|
|
58
|
+
expect(subject).not_to be_matches_text "MIT Licence is awesome http://www!opensource!org/licenses/mit-license"
|
|
59
59
|
end
|
|
60
60
|
|
|
61
61
|
it "should return true if the text begins with 'The MIT License'" do
|
|
62
|
-
subject.
|
|
62
|
+
expect(subject).to be_matches_text "The MIT License"
|
|
63
63
|
|
|
64
|
-
subject.
|
|
64
|
+
expect(subject).to be_matches_text "The MIT Licence"
|
|
65
65
|
|
|
66
|
-
subject.
|
|
66
|
+
expect(subject).not_to be_matches_text "Something else\nThe MIT License"
|
|
67
67
|
end
|
|
68
68
|
|
|
69
69
|
it "should return true if the text contains 'is released under the MIT license'" do
|
|
70
|
-
subject.
|
|
70
|
+
expect(subject).to be_matches_text "is released under the MIT license"
|
|
71
71
|
|
|
72
|
-
subject.
|
|
72
|
+
expect(subject).to be_matches_text "is released under the MIT licence"
|
|
73
73
|
end
|
|
74
74
|
end
|
|
75
75
|
end
|
|
@@ -102,7 +102,7 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
|
102
102
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
103
103
|
LICENSE
|
|
104
104
|
|
|
105
|
-
subject.
|
|
105
|
+
expect(subject).to be_matches_text license
|
|
106
106
|
end
|
|
107
107
|
|
|
108
108
|
it "should match with the alternate wording of third clause" do
|
|
@@ -130,13 +130,13 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
|
130
130
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
131
131
|
LICENSE
|
|
132
132
|
|
|
133
|
-
subject.
|
|
133
|
+
expect(subject).to be_matches_text license
|
|
134
134
|
end
|
|
135
135
|
end
|
|
136
136
|
|
|
137
137
|
describe LicenseFinder::License, "Python" do
|
|
138
138
|
it "should be recognized" do
|
|
139
|
-
described_class.find_by_name("Python").url.
|
|
139
|
+
expect(described_class.find_by_name("Python").url).to be
|
|
140
140
|
end
|
|
141
141
|
end
|
|
142
142
|
|
|
@@ -145,21 +145,21 @@ describe LicenseFinder::License, "Ruby" do
|
|
|
145
145
|
|
|
146
146
|
describe "#matches?" do
|
|
147
147
|
it "should return true when the Ruby license URL is present" do
|
|
148
|
-
subject.
|
|
148
|
+
expect(subject).to be_matches_text "This gem is available under the following license:\nhttp://www.ruby-lang.org/en/LICENSE.txt\nOkay?"
|
|
149
149
|
end
|
|
150
150
|
|
|
151
151
|
it "should return false when the Ruby License URL is not present" do
|
|
152
|
-
subject.
|
|
152
|
+
expect(subject).not_to be_matches_text "This gem is available under the following license:\nhttp://www.example.com\nOkay?"
|
|
153
153
|
end
|
|
154
154
|
|
|
155
155
|
it "should return false for pathological licenses" do
|
|
156
|
-
subject.
|
|
156
|
+
expect(subject).not_to be_matches_text "This gem is available under the following license:\nhttp://wwwzruby-langzorg/en/LICENSEztxt\nOkay?"
|
|
157
157
|
end
|
|
158
158
|
end
|
|
159
159
|
end
|
|
160
160
|
|
|
161
161
|
describe LicenseFinder::License, "SimplifiedBSD" do
|
|
162
162
|
it "should be recognized" do
|
|
163
|
-
described_class.find_by_name("SimplifiedBSD").url.
|
|
163
|
+
expect(described_class.find_by_name("SimplifiedBSD").url).to be
|
|
164
164
|
end
|
|
165
165
|
end
|