license_finder 0.8.0-java
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +12 -0
- data/.rspec +1 -0
- data/.travis.yml +15 -0
- data/Gemfile +3 -0
- data/LICENSE +22 -0
- data/Rakefile +21 -0
- data/bin/license_finder +54 -0
- data/db/migrate/201303290935_create_dependencies.rb +14 -0
- data/db/migrate/201303291155_create_licenses.rb +13 -0
- data/db/migrate/201303291402_create_approvals.rb +13 -0
- data/db/migrate/201303291456_create_ancestries.rb +9 -0
- data/db/migrate/201303291519_create_bundler_groups.rb +13 -0
- data/db/migrate/201303291720_move_manual_from_approvals_to_licenses.rb +11 -0
- data/db/migrate/201303291753_allow_null_license_names.rb +7 -0
- data/db/migrate/201304011027_allow_null_dependency_version.rb +7 -0
- data/db/migrate/201304020947_change_table_name_licenses_to_license_aliases.rb +5 -0
- data/features/approve_dependencies.feature +14 -0
- data/features/html_report.feature +38 -0
- data/features/ignore_bundle_groups.feature +11 -0
- data/features/license_finder.feature +47 -0
- data/features/license_finder_rake_task.feature +37 -0
- data/features/rails_rake.feature +9 -0
- data/features/set_license.feature +12 -0
- data/features/step_definitions/license_finder_steps.rb +25 -0
- data/features/step_definitions/steps.rb +376 -0
- data/features/text_report.feature +27 -0
- data/features/whitelist.feature +24 -0
- data/files/license_finder.yml +8 -0
- data/lib/data/licenses/Apache2.txt +172 -0
- data/lib/data/licenses/BSD.txt +24 -0
- data/lib/data/licenses/GPLv2.txt +339 -0
- data/lib/data/licenses/ISC.txt +2 -0
- data/lib/data/licenses/LGPL.txt +165 -0
- data/lib/data/licenses/MIT.txt +9 -0
- data/lib/data/licenses/NewBSD.txt +21 -0
- data/lib/data/licenses/Ruby.txt +52 -0
- data/lib/data/licenses/SimplifiedBSD.txt +23 -0
- data/lib/license_finder.rb +47 -0
- data/lib/license_finder/bundle.rb +48 -0
- data/lib/license_finder/bundle_syncer.rb +11 -0
- data/lib/license_finder/bundled_gem.rb +48 -0
- data/lib/license_finder/cli.rb +49 -0
- data/lib/license_finder/configuration.rb +71 -0
- data/lib/license_finder/dependency_report.rb +30 -0
- data/lib/license_finder/gem_saver.rb +69 -0
- data/lib/license_finder/html_report.rb +14 -0
- data/lib/license_finder/license.rb +90 -0
- data/lib/license_finder/license/apache2.rb +8 -0
- data/lib/license_finder/license/bsd.rb +4 -0
- data/lib/license_finder/license/gplv2.rb +4 -0
- data/lib/license_finder/license/isc.rb +3 -0
- data/lib/license_finder/license/lgpl.rb +3 -0
- data/lib/license_finder/license/mit.rb +23 -0
- data/lib/license_finder/license/new_bsd.rb +8 -0
- data/lib/license_finder/license/ruby.rb +11 -0
- data/lib/license_finder/license/simplified_bsd.rb +8 -0
- data/lib/license_finder/license_files.rb +36 -0
- data/lib/license_finder/license_url.rb +12 -0
- data/lib/license_finder/platform.rb +32 -0
- data/lib/license_finder/possible_license_file.rb +32 -0
- data/lib/license_finder/railtie.rb +7 -0
- data/lib/license_finder/reporter.rb +20 -0
- data/lib/license_finder/tables.rb +7 -0
- data/lib/license_finder/tables/approval.rb +4 -0
- data/lib/license_finder/tables/bundler_group.rb +4 -0
- data/lib/license_finder/tables/dependency.rb +31 -0
- data/lib/license_finder/tables/license_alias.rb +22 -0
- data/lib/license_finder/text_report.rb +9 -0
- data/lib/license_finder/yml_to_sql.rb +127 -0
- data/lib/tasks/license_finder.rake +7 -0
- data/lib/templates/html_report.erb +111 -0
- data/lib/templates/text_report.erb +3 -0
- data/license_finder.gemspec +36 -0
- data/readme.md +115 -0
- data/spec/fixtures/APACHE-2-LICENSE +202 -0
- data/spec/fixtures/GPLv2 +339 -0
- data/spec/fixtures/ISC-LICENSE +10 -0
- data/spec/fixtures/MIT-LICENSE +22 -0
- data/spec/fixtures/MIT-LICENSE-with-varied-disclaimer +22 -0
- data/spec/fixtures/README-with-MIT-LICENSE +222 -0
- data/spec/fixtures/license_directory/COPYING +0 -0
- data/spec/fixtures/license_directory/LICENSE/BSD-2-Clause.txt +25 -0
- data/spec/fixtures/license_directory/LICENSE/GPL-2.0.txt +339 -0
- data/spec/fixtures/license_directory/LICENSE/LICENSE +191 -0
- data/spec/fixtures/license_directory/LICENSE/MIT.txt +21 -0
- data/spec/fixtures/license_directory/LICENSE/RUBY.txt +60 -0
- data/spec/fixtures/license_names/COPYING.txt +0 -0
- data/spec/fixtures/license_names/LICENSE +0 -0
- data/spec/fixtures/license_names/Licence.rdoc +0 -0
- data/spec/fixtures/license_names/Mit-License +0 -0
- data/spec/fixtures/license_names/README.rdoc +0 -0
- data/spec/fixtures/mit_licensed_gem/LICENSE +22 -0
- data/spec/fixtures/nested_gem/vendor/LICENSE +0 -0
- data/spec/fixtures/nested_readme/vendor/README +0 -0
- data/spec/fixtures/other_licensed_gem/LICENSE +3 -0
- data/spec/fixtures/readme/Project ReadMe b/data/spec/fixtures/readme/Project → ReadMe +0 -0
- data/spec/fixtures/readme/README +0 -0
- data/spec/fixtures/readme/Readme.markdown +0 -0
- data/spec/fixtures/utf8_gem/README +210 -0
- data/spec/lib/license_finder/bundle_spec.rb +61 -0
- data/spec/lib/license_finder/bundle_syncer_spec.rb +16 -0
- data/spec/lib/license_finder/bundled_gem_spec.rb +62 -0
- data/spec/lib/license_finder/cli_spec.rb +38 -0
- data/spec/lib/license_finder/configuration_spec.rb +70 -0
- data/spec/lib/license_finder/gem_saver_spec.rb +155 -0
- data/spec/lib/license_finder/html_report_spec.rb +84 -0
- data/spec/lib/license_finder/license/apache_spec.rb +7 -0
- data/spec/lib/license_finder/license/bsd_spec.rb +41 -0
- data/spec/lib/license_finder/license/gplv2_spec.rb +7 -0
- data/spec/lib/license_finder/license/isc_spec.rb +7 -0
- data/spec/lib/license_finder/license/lgpl_spec.rb +7 -0
- data/spec/lib/license_finder/license/mit_spec.rb +33 -0
- data/spec/lib/license_finder/license/new_bsd_spec.rb +35 -0
- data/spec/lib/license_finder/license/ruby_spec.rb +19 -0
- data/spec/lib/license_finder/license/simplified_bsd_spec.rb +7 -0
- data/spec/lib/license_finder/license_files_spec.rb +50 -0
- data/spec/lib/license_finder/license_spec.rb +45 -0
- data/spec/lib/license_finder/license_url_spec.rb +20 -0
- data/spec/lib/license_finder/possible_license_file_spec.rb +37 -0
- data/spec/lib/license_finder/reporter_spec.rb +4 -0
- data/spec/lib/license_finder/tables/dependency_spec.rb +102 -0
- data/spec/lib/license_finder/tables/license_alias_spec.rb +54 -0
- data/spec/lib/license_finder/text_report_spec.rb +31 -0
- data/spec/lib/license_finder/yml_to_sql_spec.rb +99 -0
- data/spec/lib/license_finder_spec.rb +82 -0
- data/spec/spec_helper.rb +31 -0
- data/spec/support/license_examples.rb +30 -0
- metadata +435 -0
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe LicenseFinder::License::NewBSD do
|
4
|
+
subject { LicenseFinder::License::NewBSD.new("") }
|
5
|
+
|
6
|
+
it_behaves_like "a license matcher"
|
7
|
+
|
8
|
+
it "should match regardless of organization or copyright holder names" do
|
9
|
+
license = LicenseFinder::License::NewBSD.new <<-LICENSE
|
10
|
+
Redistribution and use in source and binary forms, with or without
|
11
|
+
modification, are permitted provided that the following conditions are met:
|
12
|
+
* Redistributions of source code must retain the above copyright
|
13
|
+
notice, this list of conditions and the following disclaimer.
|
14
|
+
* Redistributions in binary form must reproduce the above copyright
|
15
|
+
notice, this list of conditions and the following disclaimer in the
|
16
|
+
documentation and/or other materials provided with the distribution.
|
17
|
+
* Neither the name of Johnny %$#!.43298432, Guitar INC! nor the
|
18
|
+
names of its contributors may be used to endorse or promote products
|
19
|
+
derived from this software without specific prior written permission.
|
20
|
+
|
21
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
22
|
+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
23
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
24
|
+
DISCLAIMED. IN NO EVENT SHALL Johnny %$#!.43298432, Guitar BE LIABLE FOR ANY
|
25
|
+
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
26
|
+
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
27
|
+
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
28
|
+
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
29
|
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
30
|
+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
31
|
+
LICENSE
|
32
|
+
|
33
|
+
license.should be_matches
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe LicenseFinder::License::Ruby do
|
4
|
+
subject { LicenseFinder::License::Ruby.new("") }
|
5
|
+
|
6
|
+
it_behaves_like "a license matcher"
|
7
|
+
|
8
|
+
describe "#matches?" do
|
9
|
+
it "should return true when the Ruby license URL is present" do
|
10
|
+
subject.text = "This gem is available under the following license:\nhttp://www.ruby-lang.org/en/LICENSE.txt\nOkay?"
|
11
|
+
should be_matches
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should return false when the Ruby License URL is not present" do
|
15
|
+
subject.text = "This gem is available under the following license:\nhttp://www.example.com\nOkay?"
|
16
|
+
should_not be_matches
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module LicenseFinder
|
4
|
+
describe LicenseFiles do
|
5
|
+
def fixture_path(fixture)
|
6
|
+
Pathname.new(File.join(File.dirname(__FILE__), '..', '..', '..', 'spec', 'fixtures', fixture)).realpath.to_s
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "#files" do
|
10
|
+
it "is empty if there aren't any license files" do
|
11
|
+
subject = described_class.new('/not/a/dir')
|
12
|
+
subject.files.should == []
|
13
|
+
end
|
14
|
+
|
15
|
+
it "includes files with names like LICENSE, License or COPYING" do
|
16
|
+
subject = described_class.new(fixture_path('license_names'))
|
17
|
+
|
18
|
+
subject.files.map(&:file_name).should =~
|
19
|
+
%w[COPYING.txt LICENSE Mit-License README.rdoc Licence.rdoc]
|
20
|
+
end
|
21
|
+
|
22
|
+
it "includes files deep in the hierarchy" do
|
23
|
+
subject = described_class.new(fixture_path('nested_gem'))
|
24
|
+
|
25
|
+
subject.files.map { |f| [f.file_name, f.file_path] }.should =~ [
|
26
|
+
%w[LICENSE vendor/LICENSE]
|
27
|
+
]
|
28
|
+
end
|
29
|
+
|
30
|
+
it "includes both files nested inside LICENSE directory and top level files" do
|
31
|
+
subject = described_class.new(fixture_path('license_directory'))
|
32
|
+
found_license_files = subject.files
|
33
|
+
|
34
|
+
found_license_files.map { |f| [f.file_name, f.file_path] }.should =~ [
|
35
|
+
%w[BSD-2-Clause.txt LICENSE/BSD-2-Clause.txt],
|
36
|
+
%w[GPL-2.0.txt LICENSE/GPL-2.0.txt],
|
37
|
+
%w[MIT.txt LICENSE/MIT.txt],
|
38
|
+
%w[RUBY.txt LICENSE/RUBY.txt],
|
39
|
+
%w[COPYING COPYING],
|
40
|
+
%w[LICENSE LICENSE/LICENSE]
|
41
|
+
]
|
42
|
+
end
|
43
|
+
|
44
|
+
it "handles non UTF8 encodings" do
|
45
|
+
subject = described_class.new(fixture_path('utf8_gem'))
|
46
|
+
expect { subject.files }.not_to raise_error
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class FooLicense < LicenseFinder::License::Base
|
4
|
+
self.alternative_names = ["the foo license"]
|
5
|
+
self.license_url = "http://foo.license.com"
|
6
|
+
|
7
|
+
def self.pretty_name
|
8
|
+
"Ye Ole Foo License"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
module LicenseFinder
|
13
|
+
describe License do
|
14
|
+
describe ".find_by_name" do
|
15
|
+
it "should match on demodulized names" do
|
16
|
+
License.find_by_name("FooLicense").should == FooLicense
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should match on pretty names" do
|
20
|
+
License.find_by_name("Ye Ole Foo License").should == FooLicense
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should match on alternative names" do
|
24
|
+
License.find_by_name("the foo license").should == FooLicense
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should return nil if no match" do
|
28
|
+
License.find_by_name(:unknown).should be_nil
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe LicenseFinder::License::Base do
|
35
|
+
describe ".names" do
|
36
|
+
subject do
|
37
|
+
Class.new(LicenseFinder::License::Base) do
|
38
|
+
def self.demodulized_name; "FooLicense"; end
|
39
|
+
self.alternative_names = ["foo license"]
|
40
|
+
end.names
|
41
|
+
end
|
42
|
+
|
43
|
+
it { should =~ ["FooLicense", "foo license"] }
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
class FooLicense < LicenseFinder::License::Base
|
4
|
+
self.alternative_names = ["the foo license"]
|
5
|
+
self.license_url = "http://foo.license.com"
|
6
|
+
end
|
7
|
+
|
8
|
+
describe LicenseFinder::LicenseUrl do
|
9
|
+
describe ".find_by_name" do
|
10
|
+
subject { LicenseFinder::LicenseUrl }
|
11
|
+
|
12
|
+
specify { subject.find_by_name("FooLicense").should == "http://foo.license.com" }
|
13
|
+
specify { subject.find_by_name("fOolICENse").should == "http://foo.license.com" }
|
14
|
+
specify { subject.find_by_name("the foo license").should == "http://foo.license.com" }
|
15
|
+
|
16
|
+
specify { subject.find_by_name(nil).should be_nil }
|
17
|
+
specify { subject.find_by_name("").should be_nil }
|
18
|
+
specify { subject.find_by_name("unknown license").should be_nil }
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe LicenseFinder::PossibleLicenseFile do
|
4
|
+
context "file parsing" do
|
5
|
+
subject { LicenseFinder::PossibleLicenseFile.new('root', 'root/nested/path') }
|
6
|
+
|
7
|
+
context "ignoring text" do
|
8
|
+
before do
|
9
|
+
subject.stub(:text).and_return('file text')
|
10
|
+
end
|
11
|
+
|
12
|
+
its(:file_path) { should == 'nested/path' }
|
13
|
+
its(:file_name) { should == 'path' }
|
14
|
+
its(:text) { should == 'file text' }
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
subject { LicenseFinder::PossibleLicenseFile.new('gem', 'gem/license/path') }
|
19
|
+
|
20
|
+
context "with a known license" do
|
21
|
+
before do
|
22
|
+
subject.stub(:text).and_return('a known license')
|
23
|
+
|
24
|
+
LicenseFinder::License::MIT.stub(:new).with('a known license').and_return(double('MIT license', :matches? => true))
|
25
|
+
end
|
26
|
+
|
27
|
+
its(:license) { should == "MIT" }
|
28
|
+
end
|
29
|
+
|
30
|
+
context "with an unknown license" do
|
31
|
+
before do
|
32
|
+
subject.stub(:text).and_return('')
|
33
|
+
end
|
34
|
+
|
35
|
+
its(:license) { should be_nil }
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module LicenseFinder
|
4
|
+
describe Dependency do
|
5
|
+
let(:attributes) do
|
6
|
+
{
|
7
|
+
'name' => "spec_name",
|
8
|
+
'version' => "2.1.3",
|
9
|
+
'license' => "GPLv2",
|
10
|
+
'approved' => false,
|
11
|
+
'notes' => 'some notes',
|
12
|
+
'homepage' => 'homepage',
|
13
|
+
'license_files' => ['/Users/pivotal/foo/lic1', '/Users/pivotal/bar/lic2'],
|
14
|
+
'bundler_groups' => ["test"]
|
15
|
+
}
|
16
|
+
end
|
17
|
+
|
18
|
+
let(:config) { Configuration.new }
|
19
|
+
|
20
|
+
before do
|
21
|
+
LicenseFinder.stub(:config).and_return config
|
22
|
+
config.whitelist = ["MIT", "other"]
|
23
|
+
end
|
24
|
+
|
25
|
+
describe ".destroy_obsolete" do
|
26
|
+
it "destroys every dependency except for the ones provided as 'current'" do
|
27
|
+
cur1 = Dependency.create(name: "current dependency 1")
|
28
|
+
cur2 = Dependency.create(name: "current dependency 2")
|
29
|
+
Dependency.create(name: "old dependency 1")
|
30
|
+
Dependency.create(name: "old dependency 2")
|
31
|
+
|
32
|
+
Dependency.destroy_obsolete([cur1, cur2])
|
33
|
+
Dependency.all.should =~ [cur1, cur2]
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe '.unapproved' do
|
38
|
+
it "should return all unapproved dependencies" do
|
39
|
+
dependency = Dependency.create(name: "unapproved dependency", version: '0.0.1')
|
40
|
+
dependency.approval = Approval.create(state: false)
|
41
|
+
dependency.save
|
42
|
+
approved = Dependency.create(name: "approved dependency", version: '0.0.1')
|
43
|
+
approved.approval = Approval.create(state: true)
|
44
|
+
approved.save
|
45
|
+
whitelisted = Dependency.create(name: "approved dependency", version: '0.0.1')
|
46
|
+
whitelisted.license = LicenseAlias.create(name: 'MIT')
|
47
|
+
whitelisted.approval = Approval.create(state: false)
|
48
|
+
whitelisted.save
|
49
|
+
|
50
|
+
unapproved = Dependency.unapproved
|
51
|
+
unapproved.count.should == 1
|
52
|
+
unapproved.should_not be_any(&:approved?)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe '#approve!' do
|
57
|
+
it "should update the database to show the dependency is approved" do
|
58
|
+
dependency = Dependency.create(name: "foo", version: '0.0.1')
|
59
|
+
dependency.approval = Approval.create(state: false)
|
60
|
+
dependency.save
|
61
|
+
dependency.approve!
|
62
|
+
dependency.reload.should be_approved
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
describe "#approved?" do
|
67
|
+
let(:dependency) { Dependency.create(name: 'some gem') }
|
68
|
+
|
69
|
+
it "is true if its license is whitelisted" do
|
70
|
+
dependency.stub_chain(:license, whitelisted?: true)
|
71
|
+
dependency.should be_approved
|
72
|
+
end
|
73
|
+
|
74
|
+
it "is true if it has been approved" do
|
75
|
+
dependency.stub_chain(:license, whitelisted?: false)
|
76
|
+
dependency.stub_chain(:approval, state: true)
|
77
|
+
dependency.should be_approved
|
78
|
+
end
|
79
|
+
|
80
|
+
it "is false otherwise" do
|
81
|
+
dependency.stub_chain(:license, whitelisted?: false)
|
82
|
+
dependency.stub_chain(:approval, state: false)
|
83
|
+
dependency.should_not be_approved
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
describe "#set_license_manually" do
|
88
|
+
let(:gem) do
|
89
|
+
dependency = Dependency.new(name: "bob", version: '0.0.1')
|
90
|
+
dependency.license = LicenseAlias.create(name: 'Original')
|
91
|
+
dependency.save
|
92
|
+
dependency
|
93
|
+
end
|
94
|
+
|
95
|
+
it "delegates to the license" do
|
96
|
+
gem.license.should_receive(:set_manually).with('Updated')
|
97
|
+
gem.set_license_manually('Updated')
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module LicenseFinder
|
4
|
+
describe LicenseAlias do
|
5
|
+
describe 'initializes' do
|
6
|
+
it "delegates to LicenseUrl.find_by_name for the url" do
|
7
|
+
LicenseUrl.stub(:find_by_name).with("MIT").and_return "http://license-url.com"
|
8
|
+
license = described_class.new(name: 'MIT')
|
9
|
+
license.url.should == "http://license-url.com"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "#set_manually" do
|
14
|
+
subject do
|
15
|
+
described_class.create(name: 'Original')
|
16
|
+
end
|
17
|
+
|
18
|
+
it "modifies the license" do
|
19
|
+
subject.set_manually('Updated')
|
20
|
+
subject.reload.name.should == 'Updated'
|
21
|
+
end
|
22
|
+
|
23
|
+
it "marks the approval as manual" do
|
24
|
+
subject.set_manually('Updated')
|
25
|
+
subject.reload.manual.should be_true
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "#whitelisted?" do
|
30
|
+
let(:config) { Configuration.new }
|
31
|
+
|
32
|
+
before do
|
33
|
+
LicenseFinder.stub(:config).and_return config
|
34
|
+
config.whitelist = ["MIT", "other"]
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should return true when the license is whitelisted" do
|
38
|
+
described_class.new(name: 'MIT').should be_whitelisted
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should return true when the license is an alternative name of a whitelisted license" do
|
42
|
+
described_class.new(name: 'Expat').should be_whitelisted
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should return true when the license has no matching license class, but is whitelisted anyways" do
|
46
|
+
described_class.new(name: 'other').should be_whitelisted
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should return false when the license is not whitelisted" do
|
50
|
+
described_class.new(name: 'GPL').should_not be_whitelisted
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
module LicenseFinder
|
4
|
+
describe TextReport do
|
5
|
+
describe '#to_s' do
|
6
|
+
let(:dep1) do
|
7
|
+
dependency = Dependency.new(
|
8
|
+
'name' => 'gem_a',
|
9
|
+
'version' => '1.0',
|
10
|
+
)
|
11
|
+
dependency.license = LicenseFinder::LicenseAlias.create(name: 'MIT')
|
12
|
+
dependency
|
13
|
+
end
|
14
|
+
|
15
|
+
let(:dep2) do
|
16
|
+
dependency = Dependency.new(
|
17
|
+
'name' => 'gem_b',
|
18
|
+
'version' => '1.0',
|
19
|
+
)
|
20
|
+
dependency.license = LicenseFinder::LicenseAlias.create(name: 'MIT')
|
21
|
+
dependency
|
22
|
+
end
|
23
|
+
|
24
|
+
subject { TextReport.new([dep2, dep1]).to_s }
|
25
|
+
|
26
|
+
it 'should generate a text report with the name, version, and license of each dependency, sorted by name' do
|
27
|
+
should == "gem_a, 1.0, MIT\ngem_b, 1.0, MIT"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe LicenseFinder::YmlToSql do
|
4
|
+
let(:legacy_attributes) do
|
5
|
+
{
|
6
|
+
'name' => "spec_name",
|
7
|
+
'version' => "2.1.3",
|
8
|
+
'license' => "GPLv2",
|
9
|
+
'license_url' => "www.license_url.org",
|
10
|
+
'approved' => true,
|
11
|
+
'manual' => true,
|
12
|
+
'summary' => "some summary",
|
13
|
+
'description' => "some description",
|
14
|
+
'homepage' => 'www.homepage.com',
|
15
|
+
'children' => ["child1_name"],
|
16
|
+
'parents' => ["parent1_name"],
|
17
|
+
'bundler_groups' => [:test],
|
18
|
+
|
19
|
+
'notes' => 'some notes',
|
20
|
+
'license_files' => ['/Users/pivotal/foo/lic1', '/Users/pivotal/bar/lic2'],
|
21
|
+
}
|
22
|
+
end
|
23
|
+
let(:config) { LicenseFinder::Configuration.new }
|
24
|
+
|
25
|
+
before do
|
26
|
+
LicenseFinder.stub(:config) { config }
|
27
|
+
end
|
28
|
+
|
29
|
+
describe ".needs_conversion?" do
|
30
|
+
it "is true if the yml still exists" do
|
31
|
+
config.stub(dependencies_dir: 'path/to')
|
32
|
+
File.should_receive(:exists?).with('path/to/dependencies.yml') { true }
|
33
|
+
described_class.needs_conversion?.should be_true
|
34
|
+
end
|
35
|
+
|
36
|
+
it "is false otherwise" do
|
37
|
+
config.stub(dependencies_dir: 'path/to')
|
38
|
+
File.should_receive(:exists?).with('path/to/dependencies.yml') { false }
|
39
|
+
described_class.needs_conversion?.should be_false
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe ".remove_yml" do
|
44
|
+
it "removes the yml file" do
|
45
|
+
config.stub(dependencies_dir: 'path/to')
|
46
|
+
File.should_receive(:delete).with('path/to/dependencies.yml')
|
47
|
+
described_class.remove_yml
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe '.convert_all' do
|
52
|
+
before do
|
53
|
+
(DB.tables - [:schema_migrations]).each { |table| DB[table].truncate }
|
54
|
+
end
|
55
|
+
|
56
|
+
it "persists all of the dependency's attributes" do
|
57
|
+
described_class.convert_all([legacy_attributes])
|
58
|
+
|
59
|
+
described_class::Sql::Dependency.count.should == 1
|
60
|
+
saved_dep = described_class::Sql::Dependency.first
|
61
|
+
saved_dep.name.should == "spec_name"
|
62
|
+
saved_dep.version.should == "2.1.3"
|
63
|
+
saved_dep.summary.should == "some summary"
|
64
|
+
saved_dep.description.should == "some description"
|
65
|
+
saved_dep.homepage.should == "www.homepage.com"
|
66
|
+
end
|
67
|
+
|
68
|
+
it "associates the license to the dependency" do
|
69
|
+
described_class.convert_all([legacy_attributes])
|
70
|
+
|
71
|
+
saved_dep = described_class::Sql::Dependency.first
|
72
|
+
saved_dep.license.name.should == "GPLv2"
|
73
|
+
saved_dep.license.url.should == "www.license_url.org"
|
74
|
+
saved_dep.license.manual.should == true
|
75
|
+
end
|
76
|
+
|
77
|
+
it "associates bundler groups" do
|
78
|
+
described_class.convert_all([legacy_attributes])
|
79
|
+
|
80
|
+
saved_dep = described_class::Sql::Dependency.first
|
81
|
+
saved_dep.bundler_groups.count.should == 1
|
82
|
+
saved_dep.bundler_groups.first.name.should == 'test'
|
83
|
+
end
|
84
|
+
|
85
|
+
it "associates children" do
|
86
|
+
child_attrs = {
|
87
|
+
'name' => 'child1_name',
|
88
|
+
'version' => '0.0.1',
|
89
|
+
'license' => 'other'
|
90
|
+
}
|
91
|
+
described_class.convert_all([legacy_attributes, child_attrs])
|
92
|
+
|
93
|
+
described_class::Sql::Dependency.count.should == 2
|
94
|
+
saved_dep = described_class::Sql::Dependency.first(name: 'spec_name')
|
95
|
+
saved_dep.children.count.should == 1
|
96
|
+
saved_dep.children.first.name.should == 'child1_name'
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|