license_finder 1.1.1 → 1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (94) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +2 -2
  3. data/CHANGELOG.rdoc +10 -0
  4. data/Gemfile +1 -1
  5. data/README.md +363 -0
  6. data/Rakefile +30 -1
  7. data/TODO.md +28 -0
  8. data/bin/license_finder_pip.py +18 -0
  9. data/db/migrate/201410031451_rename_dependency_license_name.rb +6 -0
  10. data/features/multiple_licenses.feature +9 -0
  11. data/features/step_definitions/cli_steps.rb +9 -9
  12. data/features/step_definitions/cocoapod_steps.rb +1 -1
  13. data/features/step_definitions/configure_bundler_groups_steps.rb +3 -3
  14. data/features/step_definitions/configure_whitelist_steps.rb +4 -4
  15. data/features/step_definitions/gradle_steps.rb +1 -1
  16. data/features/step_definitions/manually_added_steps.rb +3 -3
  17. data/features/step_definitions/manually_approved_steps.rb +5 -5
  18. data/features/step_definitions/manually_assigned_license_steps.rb +4 -4
  19. data/features/step_definitions/maven_steps.rb +1 -1
  20. data/features/step_definitions/multiple_licenses_steps.rb +14 -0
  21. data/features/step_definitions/node_steps.rb +1 -1
  22. data/features/step_definitions/python_steps.rb +1 -1
  23. data/features/step_definitions/report_csv_steps.rb +3 -3
  24. data/features/step_definitions/report_html_steps.rb +5 -5
  25. data/features/step_definitions/shared_steps.rb +23 -6
  26. data/lib/license_finder.rb +3 -0
  27. data/lib/license_finder/cli.rb +13 -34
  28. data/lib/license_finder/configuration.rb +8 -4
  29. data/lib/license_finder/dependency_manager.rb +25 -15
  30. data/lib/license_finder/license.rb +8 -0
  31. data/lib/license_finder/logger.rb +59 -0
  32. data/lib/license_finder/package.rb +37 -30
  33. data/lib/license_finder/package_manager.rb +20 -0
  34. data/lib/license_finder/package_managers/bower.rb +4 -9
  35. data/lib/license_finder/package_managers/bower_package.rb +2 -1
  36. data/lib/license_finder/package_managers/bundler.rb +26 -41
  37. data/lib/license_finder/package_managers/bundler_package.rb +6 -3
  38. data/lib/license_finder/package_managers/cocoa_pods.rb +18 -10
  39. data/lib/license_finder/package_managers/cocoa_pods_package.rb +4 -3
  40. data/lib/license_finder/package_managers/gradle.rb +7 -11
  41. data/lib/license_finder/package_managers/gradle_package.rb +2 -7
  42. data/lib/license_finder/package_managers/maven.rb +5 -9
  43. data/lib/license_finder/package_managers/maven_package.rb +4 -8
  44. data/lib/license_finder/package_managers/npm.rb +6 -10
  45. data/lib/license_finder/package_managers/npm_package.rb +2 -1
  46. data/lib/license_finder/package_managers/pip.rb +11 -24
  47. data/lib/license_finder/package_managers/pip_package.rb +2 -1
  48. data/lib/license_finder/package_saver.rb +2 -2
  49. data/lib/license_finder/platform.rb +4 -0
  50. data/lib/license_finder/possible_license_file.rb +4 -0
  51. data/lib/license_finder/possible_license_files.rb +2 -1
  52. data/lib/license_finder/reports/detailed_text_report.rb +1 -1
  53. data/lib/license_finder/reports/formatted_report.rb +1 -1
  54. data/lib/license_finder/tables/dependency.rb +22 -12
  55. data/lib/license_finder/yml_to_sql.rb +1 -1
  56. data/lib/templates/html_report.erb +4 -4
  57. data/lib/templates/markdown_report.erb +4 -4
  58. data/lib/templates/text_report.erb +1 -1
  59. data/license_finder.gemspec +28 -12
  60. data/spec/lib/license_finder/cli_spec.rb +193 -185
  61. data/spec/lib/license_finder/configuration_spec.rb +46 -47
  62. data/spec/lib/license_finder/dependency_manager_spec.rb +48 -44
  63. data/spec/lib/license_finder/license/definitions_spec.rb +26 -26
  64. data/spec/lib/license_finder/license_spec.rb +25 -25
  65. data/spec/lib/license_finder/package_managers/bower_package_spec.rb +33 -17
  66. data/spec/lib/license_finder/package_managers/bower_spec.rb +35 -35
  67. data/spec/lib/license_finder/package_managers/bundler_package_spec.rb +20 -15
  68. data/spec/lib/license_finder/package_managers/bundler_spec.rb +12 -19
  69. data/spec/lib/license_finder/package_managers/cocoa_pods_package_spec.rb +8 -5
  70. data/spec/lib/license_finder/package_managers/cocoa_pods_spec.rb +20 -22
  71. data/spec/lib/license_finder/package_managers/gradle_package_spec.rb +8 -5
  72. data/spec/lib/license_finder/package_managers/gradle_spec.rb +20 -20
  73. data/spec/lib/license_finder/package_managers/maven_package_spec.rb +8 -5
  74. data/spec/lib/license_finder/package_managers/maven_spec.rb +18 -18
  75. data/spec/lib/license_finder/package_managers/npm_package_spec.rb +36 -17
  76. data/spec/lib/license_finder/package_managers/npm_spec.rb +17 -17
  77. data/spec/lib/license_finder/package_managers/pip_package_spec.rb +16 -10
  78. data/spec/lib/license_finder/package_managers/pip_spec.rb +21 -18
  79. data/spec/lib/license_finder/package_saver_spec.rb +15 -25
  80. data/spec/lib/license_finder/possible_license_file_spec.rb +5 -4
  81. data/spec/lib/license_finder/possible_license_files_spec.rb +11 -5
  82. data/spec/lib/license_finder/reports/detailed_text_report_spec.rb +3 -3
  83. data/spec/lib/license_finder/reports/html_report_spec.rb +23 -23
  84. data/spec/lib/license_finder/reports/markdown_report_spec.rb +12 -12
  85. data/spec/lib/license_finder/reports/reporter_spec.rb +11 -11
  86. data/spec/lib/license_finder/reports/text_report_spec.rb +3 -3
  87. data/spec/lib/license_finder/tables/dependency_spec.rb +59 -41
  88. data/spec/lib/license_finder/yml_to_sql_spec.rb +21 -21
  89. data/spec/lib/license_finder_spec.rb +1 -1
  90. data/spec/spec_helper.rb +0 -13
  91. data/spec/support/shared_examples_for_package.rb +46 -0
  92. data/spec/support/shared_examples_for_package_manager.rb +15 -0
  93. metadata +19 -114
  94. data/readme.md +0 -259
@@ -4,7 +4,7 @@ module LicenseFinder
4
4
  describe License do
5
5
  describe ".find_by_name" do
6
6
  it "should find a registered license" do
7
- License.find_by_name("Apache2").should be_a License
7
+ expect(License.find_by_name("Apache2")).to be_a License
8
8
  end
9
9
 
10
10
  it "should make an unrecognized license" do
@@ -16,20 +16,20 @@ module LicenseFinder
16
16
 
17
17
  context "making the default license" do
18
18
  it "set the name to 'other'" do
19
- License.find_by_name(nil).name.should == "other"
19
+ expect(License.find_by_name(nil).name).to eq("other")
20
20
  end
21
21
 
22
22
  it "does not equal other uses of the default license" do
23
- License.find_by_name(nil).should_not == License.find_by_name(nil)
23
+ expect(License.find_by_name(nil)).not_to eq(License.find_by_name(nil))
24
24
  end
25
25
 
26
26
  context "when there is a whitelist" do
27
27
  before do
28
- LicenseFinder.config.stub(:whitelist).and_return(["not empty"])
28
+ allow(LicenseFinder.config).to receive(:whitelist).and_return(["not empty"])
29
29
  end
30
30
 
31
31
  it "does not blow up" do
32
- License.find_by_name(nil).name.should == "other"
32
+ expect(License.find_by_name(nil).name).to eq("other")
33
33
  end
34
34
  end
35
35
  end
@@ -37,7 +37,7 @@ module LicenseFinder
37
37
 
38
38
  describe ".find_by_text" do
39
39
  it "should find a registered license" do
40
- License.find_by_text('This gem is released under the MIT license').should be_a License
40
+ expect(License.find_by_text('This gem is released under the MIT license')).to be_a License
41
41
  end
42
42
 
43
43
  it "returns nil if not found" do
@@ -60,51 +60,51 @@ module LicenseFinder
60
60
 
61
61
  describe "#whitelisted?" do
62
62
  it "is true if the settings say it is" do
63
- make_license.should_not be_whitelisted
64
- make_license(whitelisted: true).should be_whitelisted
63
+ expect(make_license).not_to be_whitelisted
64
+ expect(make_license(whitelisted: true)).to be_whitelisted
65
65
  end
66
66
 
67
67
  it "can be made true (without mutating original)" do
68
68
  original = make_license
69
69
  license = original.whitelist
70
- license.should_not == original
71
- license.should be_whitelisted
72
- license.url.should == "http://example.com/license"
73
- license.should be_matches_name "Default Short Name"
74
- license.should be_matches_text "Default Matcher"
70
+ expect(license).not_to eq(original)
71
+ expect(license).to be_whitelisted
72
+ expect(license.url).to eq("http://example.com/license")
73
+ expect(license).to be_matches_name "Default Short Name"
74
+ expect(license).to be_matches_text "Default Matcher"
75
75
  end
76
76
  end
77
77
 
78
78
  describe "#matches_name?" do
79
79
  it "should match on short_name" do
80
- make_license(short_name: "Foo").should be_matches_name "Foo"
80
+ expect(make_license(short_name: "Foo")).to be_matches_name "Foo"
81
81
  end
82
82
 
83
83
  it "should match on pretty name" do
84
- make_license(pretty_name: "Foo").should be_matches_name "Foo"
84
+ expect(make_license(pretty_name: "Foo")).to be_matches_name "Foo"
85
85
  end
86
86
 
87
87
  it "should match on alternative names" do
88
88
  license = make_license(other_names: ["Foo", "Bar"])
89
- license.should be_matches_name "Foo"
90
- license.should be_matches_name "Bar"
89
+ expect(license).to be_matches_name "Foo"
90
+ expect(license).to be_matches_name "Bar"
91
91
  end
92
92
 
93
93
  it "should ignore case" do
94
- make_license(pretty_name: "Foo").should be_matches_name "foo"
95
- make_license(pretty_name: "foo").should be_matches_name "Foo"
94
+ expect(make_license(pretty_name: "Foo")).to be_matches_name "foo"
95
+ expect(make_license(pretty_name: "foo")).to be_matches_name "Foo"
96
96
  end
97
97
 
98
98
  it "should not fail if pretty_name or other_names are omitted" do
99
- make_license.should be_matches_name "Default Short Name"
99
+ expect(make_license).to be_matches_name "Default Short Name"
100
100
  end
101
101
  end
102
102
 
103
103
  describe ".matches_text?" do
104
104
  it "should match on text" do
105
105
  license = make_license(matcher: License::Matcher.from_regex(/The license text/))
106
- license.should be_matches_text "The license text"
107
- license.should_not be_matches_text "Some other text"
106
+ expect(license).to be_matches_text "The license text"
107
+ expect(license).not_to be_matches_text "Some other text"
108
108
  end
109
109
 
110
110
  it "should match regardless of placeholder names, whitespace, or quotes" do
@@ -114,7 +114,7 @@ module LicenseFinder
114
114
  LICENSE
115
115
  license = make_license(matcher: License::Matcher.from_text(License::Text.normalize_punctuation(license_text)))
116
116
 
117
- license.should be_matches_text <<-FILE
117
+ expect(license).to be_matches_text <<-FILE
118
118
  The ''company'' of foo bar *%*%*%*%
119
119
  shall not be held "responsible" for `anything`.
120
120
  FILE
@@ -123,12 +123,12 @@ module LicenseFinder
123
123
  it "should match even if whitespace at beginning and end don't match" do
124
124
  template = License::Template.new("\nThe license text")
125
125
  license = make_license(matcher: License::Matcher.from_template(template))
126
- license.should be_matches_text "The license text\n"
126
+ expect(license).to be_matches_text "The license text\n"
127
127
  end
128
128
  end
129
129
 
130
130
  it "should default pretty_name to short_name" do
131
- make_license.name.should == "Default Short Name"
131
+ expect(make_license.name).to eq("Default Short Name")
132
132
  end
133
133
  end
134
134
  end
@@ -16,7 +16,7 @@ module LicenseFinder
16
16
  )
17
17
  end
18
18
 
19
- it_behaves_like "it conforms to interface required by PackageSaver"
19
+ it_behaves_like "a Package"
20
20
 
21
21
  its(:name) { should == "dependency-library" }
22
22
  its(:version) { should == "1.3.3.7" }
@@ -26,9 +26,9 @@ module LicenseFinder
26
26
  its(:groups) { should == [] }
27
27
  its(:children) { should == [] }
28
28
 
29
- describe '#license' do
29
+ describe '#licenses' do
30
30
  def stub_license_files(license_files)
31
- PossibleLicenseFiles.stub(:find).with("/path/to/thing").and_return(license_files)
31
+ allow(PossibleLicenseFiles).to receive(:find).with("/path/to/thing").and_return(license_files)
32
32
  end
33
33
 
34
34
  let(:package1) { { "pkgMeta" => {"license" => "MIT"}, "canonicalDir" => "/some/path" } }
@@ -37,52 +37,68 @@ module LicenseFinder
37
37
  let(:package4) { { "pkgMeta" => {"licenses" => ["MIT"]}, "canonicalDir" => "/some/path" } }
38
38
 
39
39
  it 'finds the license for both license structures' do
40
- BowerPackage.new(package1).license.name.should eq("MIT")
41
- BowerPackage.new(package2).license.name.should eq("BSD")
42
- BowerPackage.new(package3).license.name.should eq("Python Software Foundation License")
43
- BowerPackage.new(package4).license.name.should eq("MIT")
40
+ package = BowerPackage.new(package1)
41
+ expect(package.licenses.length).to eq 1
42
+ expect(package.licenses.first.name).to eq("MIT")
43
+
44
+ package = BowerPackage.new(package2)
45
+ expect(package.licenses.length).to eq 1
46
+ expect(package.licenses.first.name).to eq("BSD")
47
+
48
+ package = BowerPackage.new(package3)
49
+ expect(package.licenses.length).to eq 1
50
+ expect(package.licenses.first.name).to eq("Python Software Foundation License")
51
+
52
+ package = BowerPackage.new(package4)
53
+ expect(package.licenses.length).to eq 1
54
+ expect(package.licenses.first.name).to eq("MIT")
44
55
  end
45
56
 
46
57
 
47
58
  context "regardless of whether there are licenses in files" do
48
59
  before do
49
- stub_license_files [double(:file, license: License.find_by_name('Detected License'))]
60
+ stub_license_files [double(:file, license: License.find_by_name('Detected License'), path: "/")]
50
61
  end
51
62
 
52
63
  it "returns the license from the spec if there is only one unique license" do
53
64
  package = BowerPackage.new({ "pkgMeta" => {"licenses" => ["MIT", "Expat"]}, "canonicalDir" => "/path/to/thing" })
54
- expect(package.license.name).to eq("MIT")
65
+ expect(package.licenses.length).to eq 1
66
+ expect(package.licenses.first.name).to eq("MIT")
55
67
  end
56
68
 
57
69
  it "returns 'multiple licenses' if there's more than one license" do
58
70
  package = BowerPackage.new({ "pkgMeta" => {"licenses" => ["MIT", "BSD"]}, "canonicalDir" => "/some/path" })
59
- expect(package.license.name).to eq("multiple licenses: MIT, BSD")
71
+ expect(package.licenses.length).to eq 2
72
+ expect(package.licenses.map(&:name)).to eq %w(MIT BSD)
60
73
  end
61
74
  end
62
75
 
63
76
  context "when there is nothing in the spec" do
64
77
  it "returns a license in a file if only one unique license detected" do
65
78
  stub_license_files([
66
- double(:first_file, license: License.find_by_name('MIT')),
67
- double(:second_file, license: License.find_by_name('Expat'))
79
+ double(:first_file, license: License.find_by_name('MIT'), path: "/"),
80
+ double(:second_file, license: License.find_by_name('Expat'), path: "/")
68
81
  ])
69
82
 
70
- subject.license.name.should == "MIT"
83
+ expect(subject.licenses.length).to eq 1
84
+ expect(subject.licenses.first.name).to eq "MIT"
71
85
  end
72
86
 
73
87
  it "returns 'other' if there are no licenses in files" do
74
88
  stub_license_files []
75
89
 
76
- subject.license.name.should == "other"
90
+ expect(subject.licenses.length).to eq 1
91
+ expect(subject.licenses.first.name).to eq "other"
77
92
  end
78
93
 
79
94
  it "returns 'other' if there are many licenses in files" do
80
95
  stub_license_files([
81
- double(:first_file, license: License.find_by_name('First Detected License')),
82
- double(:second_file, license: License.find_by_name('Second Detected License'))
96
+ double(:first_file, license: License.find_by_name('First Detected License'), path: "/"),
97
+ double(:second_file, license: License.find_by_name('Second Detected License'), path: "/")
83
98
  ])
84
99
 
85
- subject.license.name.should == "multiple licenses: First Detected License, Second Detected License"
100
+ expect(subject.licenses.length).to eq 2
101
+ expect(subject.licenses.map(&:name)).to eq ["First Detected License", "Second Detected License"]
86
102
  end
87
103
  end
88
104
  end
@@ -2,35 +2,38 @@ require 'spec_helper'
2
2
 
3
3
  module LicenseFinder
4
4
  describe Bower do
5
+ let(:bower) { Bower.new }
6
+ it_behaves_like "a PackageManager"
7
+
5
8
  describe '.current_packages' do
6
9
  it 'lists all the current packages' do
7
- json = <<-resp
8
- {
9
- "dependencies": {
10
- "dependency-library": {
11
- "canonicalDir": "/path/to/thing",
12
- "pkgMeta": {
13
- "name": "dependency-library",
14
- "description": "description",
15
- "version": "1.3.3.7",
16
- "main": "normalize.css"
17
- }
18
- },
19
- "another-dependency": {
20
- "canonicalDir": "/path/to/thing2",
21
- "pkgMeta": {
22
- "name": "another-dependency",
23
- "description": "description2",
24
- "version": "4.2",
25
- "main": "denormalize.css"
26
- }
27
- }
28
- }
29
- }
30
- resp
31
- allow(Bower).to receive(:`).with(/bower/).and_return(json)
10
+ json = <<-JSON
11
+ {
12
+ "dependencies": {
13
+ "dependency-library": {
14
+ "canonicalDir": "/path/to/thing",
15
+ "pkgMeta": {
16
+ "name": "dependency-library",
17
+ "description": "description",
18
+ "version": "1.3.3.7",
19
+ "main": "normalize.css"
20
+ }
21
+ },
22
+ "another-dependency": {
23
+ "canonicalDir": "/path/to/thing2",
24
+ "pkgMeta": {
25
+ "name": "another-dependency",
26
+ "description": "description2",
27
+ "version": "4.2",
28
+ "main": "denormalize.css"
29
+ }
30
+ }
31
+ }
32
+ }
33
+ JSON
34
+ allow(bower).to receive("`").with(/bower/).and_return(json)
32
35
 
33
- current_packages = Bower.current_packages
36
+ current_packages = bower.current_packages
34
37
 
35
38
  expect(current_packages.size).to eq(2)
36
39
  expect(current_packages.first).to be_a(Package)
@@ -38,20 +41,17 @@ module LicenseFinder
38
41
  end
39
42
 
40
43
  describe '.active?' do
41
- let(:package) { double(:package_file) }
42
-
43
- before do
44
- Bower.stub(package_path: package)
45
- end
44
+ let(:package_path) { double(:package_file) }
45
+ let(:bower) { Bower.new package_path: package_path }
46
46
 
47
47
  it 'is true with a bower.json file' do
48
- package.stub(:exist? => true)
49
- expect(Bower).to be_active
48
+ allow(package_path).to receive_messages(:exist? => true)
49
+ expect(bower).to be_active
50
50
  end
51
51
 
52
52
  it 'is false without a bower.json file' do
53
- package.stub(:exist? => false)
54
- expect(Bower).to_not be_active
53
+ allow(package_path).to receive_messages(:exist? => false)
54
+ expect(bower).to_not be_active
55
55
  end
56
56
  end
57
57
  end
@@ -4,7 +4,7 @@ module LicenseFinder
4
4
  describe BundlerPackage do
5
5
  subject { described_class.new(gemspec, nil) }
6
6
 
7
- it_behaves_like "it conforms to interface required by PackageSaver"
7
+ it_behaves_like "a Package"
8
8
 
9
9
  let(:gemspec) do
10
10
  Gem::Specification.new do |s|
@@ -24,23 +24,24 @@ module LicenseFinder
24
24
  its(:description) { should == "description" }
25
25
  its(:homepage) { should == "homepage" }
26
26
  its(:groups) { should == [] }
27
- its(:children) { should == [] }
27
+ its(:children) { should == ['foo'] }
28
28
 
29
- describe "#license" do
29
+ describe "#licenses" do
30
30
  def stub_license_files(license_files)
31
- PossibleLicenseFiles.stub(:find).and_return(license_files)
31
+ allow(PossibleLicenseFiles).to receive(:find).and_return(license_files)
32
32
  end
33
33
 
34
34
  context "regardless of whether there are licenses in files" do
35
35
  before do
36
- stub_license_files [double(:file, license: License.find_by_name('Detected License'))]
36
+ stub_license_files [double(:file, license: License.find_by_name('Detected License'), path: "/")]
37
37
  end
38
38
 
39
39
  context 'if the gemspec provides two synonymous licenses' do
40
40
  before { gemspec.licenses = ['MIT', 'Expat'] }
41
41
 
42
42
  it 'returns the license only once' do
43
- subject.license.name.should == "MIT"
43
+ expect(subject.licenses.length).to eq 1
44
+ expect(subject.licenses.first.name).to eq "MIT"
44
45
  end
45
46
  end
46
47
 
@@ -48,7 +49,8 @@ module LicenseFinder
48
49
  before { gemspec.licenses = ['First Gemspec License', 'Second Gemspec License'] }
49
50
 
50
51
  it "returns 'multiple licenses' with the names of the licenses from the gemspec (but not those from detected files)" do
51
- subject.license.name.should == "multiple licenses: First Gemspec License, Second Gemspec License"
52
+ expect(subject.licenses.length).to eq 2
53
+ expect(subject.licenses.map(&:name)).to eq ["First Gemspec License", "Second Gemspec License"]
52
54
  end
53
55
  end
54
56
  end
@@ -56,26 +58,29 @@ module LicenseFinder
56
58
  context "when there is nothing in the spec" do
57
59
  it "returns a license in a file if there is only one unique license detected" do
58
60
  stub_license_files([
59
- double(:first_file, license: License.find_by_name('MIT')),
60
- double(:second_file, license: License.find_by_name('Expat'))
61
+ double(:first_file, license: License.find_by_name('MIT'), path: "/"),
62
+ double(:second_file, license: License.find_by_name('Expat'), path: "/")
61
63
  ])
62
64
 
63
- subject.license.name.should == "MIT"
65
+ expect(subject.licenses.length).to eq 1
66
+ expect(subject.licenses.first.name).to eq "MIT"
64
67
  end
65
68
 
66
69
  it "returns 'other' if there are no licenses in files" do
67
70
  stub_license_files []
68
71
 
69
- subject.license.name.should == "other"
72
+ expect(subject.licenses.length).to eq 1
73
+ expect(subject.licenses.first.name).to eq "other"
70
74
  end
71
75
 
72
76
  it "returns 'multiple licenses' if there are many licenses in files" do
73
77
  stub_license_files([
74
- double(:first_file, license: License.find_by_name('First Detected License')),
75
- double(:second_file, license: License.find_by_name('Second Detected License'))
78
+ double(:first_file, license: License.find_by_name('First Detected License'), path: "/"),
79
+ double(:second_file, license: License.find_by_name('Second Detected License'), path: "/")
76
80
  ])
77
81
 
78
- subject.license.name.should == "multiple licenses: First Detected License, Second Detected License"
82
+ expect(subject.licenses.length).to eq 2
83
+ expect(subject.licenses.map(&:name)).to eq ["First Detected License", "Second Detected License"]
79
84
  end
80
85
  end
81
86
  end
@@ -86,7 +91,7 @@ module LicenseFinder
86
91
  let(:bundler_dependency) { double(:dependency, groups: [1, 2, 3]) }
87
92
 
88
93
  it "returns bundler dependency's groups" do
89
- subject.groups.should == bundler_dependency.groups
94
+ expect(subject.groups).to eq(bundler_dependency.groups)
90
95
  end
91
96
  end
92
97
  end
@@ -2,6 +2,8 @@ require "spec_helper"
2
2
 
3
3
  module LicenseFinder
4
4
  describe Bundler do
5
+ it_behaves_like "a PackageManager"
6
+
5
7
  let(:definition) do
6
8
  double('definition', {
7
9
  :dependencies => [],
@@ -28,16 +30,16 @@ module LicenseFinder
28
30
 
29
31
  describe '.current_packages' do
30
32
  subject do
31
- Bundler.current_packages(['dev', 'test'], definition)
33
+ Bundler.new(ignore_groups: ['dev', 'test'], definition: definition).current_packages
32
34
  end
33
35
 
34
36
  it "should have 2 dependencies" do
35
- subject.size.should == 2
37
+ expect(subject.size).to eq(2)
36
38
  end
37
39
 
38
40
  context "when initialized with a parent and child gem" do
39
41
  before do
40
- definition.stub(:specs_for).with([:production]).and_return([
42
+ allow(definition).to receive(:specs_for).with([:production]).and_return([
41
43
  build_gemspec('gem1', '1.2.3', 'gem2'),
42
44
  build_gemspec('gem2', '0.4.2', 'gem3')
43
45
  ])
@@ -46,32 +48,23 @@ module LicenseFinder
46
48
  it "should update the child dependency with its parent data" do
47
49
  gem1 = subject.first
48
50
 
49
- gem1.children.should == ["gem2"]
50
- end
51
-
52
- it "should only include the children which are project dependencies" do
53
- gem2 = subject[1]
54
-
55
- gem2.children.should == []
51
+ expect(gem1.children).to eq(["gem2"])
56
52
  end
57
53
  end
58
54
  end
59
55
 
60
56
  describe '.active?' do
61
- let(:gemfile) { double(:gemfile_file) }
62
-
63
- before do
64
- Bundler.stub(gemfile_path: gemfile)
65
- end
57
+ let(:package_path) { double(:gemfile_file) }
58
+ let(:bundler) { Bundler.new package_path: package_path }
66
59
 
67
60
  it 'is true with a Gemfile file' do
68
- gemfile.stub(:exist? => true)
69
- expect(Bundler).to be_active
61
+ allow(package_path).to receive_messages(:exist? => true)
62
+ expect(bundler).to be_active
70
63
  end
71
64
 
72
65
  it 'is false without a Gemfile file' do
73
- gemfile.stub(:exist? => false)
74
- expect(Bundler).to_not be_active
66
+ allow(package_path).to receive_messages(:exist? => false)
67
+ expect(bundler).to_not be_active
75
68
  end
76
69
  end
77
70
  end