license_finder 2.0.0.rc2 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (101) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +3 -1
  3. data/CHANGELOG.rdoc +16 -9
  4. data/CONTRIBUTING.md +3 -3
  5. data/README.md +4 -1
  6. data/TODO.md +6 -19
  7. data/bin/license_finder_pip.py +2 -2
  8. data/features/features/cli_spec.rb +18 -18
  9. data/features/features/configure/add_dependencies_spec.rb +16 -16
  10. data/features/features/configure/approve_dependencies_spec.rb +10 -9
  11. data/features/features/configure/assign_licenses_spec.rb +8 -8
  12. data/features/features/configure/ignore_dependencies_spec.rb +15 -15
  13. data/features/features/configure/ignore_groups_spec.rb +15 -15
  14. data/features/features/configure/name_project_spec.rb +15 -14
  15. data/features/features/configure/whitelist_licenses_spec.rb +21 -21
  16. data/features/features/package_managers/bower_spec.rb +3 -3
  17. data/features/features/package_managers/cocoapods_spec.rb +4 -4
  18. data/features/features/package_managers/gradle_spec.rb +3 -3
  19. data/features/features/package_managers/maven_spec.rb +3 -3
  20. data/features/features/package_managers/npm_spec.rb +3 -3
  21. data/features/features/package_managers/pip_spec.rb +3 -3
  22. data/features/features/report/csv_spec.rb +9 -8
  23. data/features/features/report/html_spec.rb +13 -12
  24. data/features/support/testing_dsl.rb +1 -1
  25. data/lib/license_finder.rb +1 -16
  26. data/lib/license_finder/cli/approvals.rb +3 -4
  27. data/lib/license_finder/cli/base.rb +40 -3
  28. data/lib/license_finder/cli/dependencies.rb +3 -3
  29. data/lib/license_finder/cli/main.rb +7 -25
  30. data/lib/license_finder/cli/makes_decisions.rb +2 -20
  31. data/lib/license_finder/cli/patched_thor.rb +0 -2
  32. data/lib/license_finder/cli/whitelist.rb +6 -8
  33. data/lib/license_finder/configuration.rb +1 -1
  34. data/lib/license_finder/core.rb +68 -0
  35. data/lib/license_finder/decision_applier.rb +10 -7
  36. data/lib/license_finder/license.rb +10 -10
  37. data/lib/license_finder/license/template.rb +3 -2
  38. data/lib/license_finder/logger.rb +2 -6
  39. data/lib/license_finder/package.rb +25 -44
  40. data/lib/license_finder/package_manager.rb +11 -13
  41. data/lib/license_finder/package_managers/bower.rb +1 -1
  42. data/lib/license_finder/package_managers/bundler.rb +1 -1
  43. data/lib/license_finder/package_managers/cocoa_pods.rb +3 -3
  44. data/lib/license_finder/package_managers/cocoa_pods_package.rb +3 -3
  45. data/lib/license_finder/package_managers/gradle.rb +2 -2
  46. data/lib/license_finder/package_managers/maven.rb +2 -2
  47. data/lib/license_finder/package_managers/npm.rb +1 -1
  48. data/lib/license_finder/package_managers/pip.rb +1 -1
  49. data/lib/license_finder/package_managers/pip_package.rb +6 -4
  50. data/lib/license_finder/packages/activation.rb +54 -0
  51. data/lib/license_finder/{possible_license_files.rb → packages/license_files.rb} +9 -7
  52. data/lib/license_finder/packages/licensing.rb +43 -0
  53. data/lib/license_finder/{package_managers → packages}/manual_package.rb +0 -0
  54. data/lib/license_finder/{possible_license_file.rb → packages/possible_license_file.rb} +0 -2
  55. data/lib/license_finder/version.rb +1 -1
  56. data/spec/fixtures/{license_directory/LICENSE/Apache.txt → all_pms/Gemfile} +0 -0
  57. data/spec/fixtures/all_pms/Podfile +0 -0
  58. data/spec/fixtures/all_pms/bower.json +0 -0
  59. data/spec/fixtures/all_pms/build.gradle +0 -0
  60. data/spec/fixtures/all_pms/package.json +0 -0
  61. data/spec/fixtures/all_pms/pom.xml +0 -0
  62. data/spec/fixtures/all_pms/requirements.txt +0 -0
  63. data/spec/fixtures/license_directory/COPYING +1 -0
  64. data/spec/fixtures/license_directory/LICENSE/MIT.txt +1 -0
  65. data/spec/fixtures/license_names/COPYING.txt +1 -0
  66. data/spec/fixtures/license_names/LICENSE +1 -0
  67. data/spec/fixtures/license_names/Licence.rdoc +1 -0
  68. data/spec/fixtures/license_names/Mit-License +1 -0
  69. data/spec/fixtures/license_names/README.rdoc +1 -0
  70. data/spec/fixtures/nested_gem/vendor/LICENSE +1 -0
  71. data/spec/lib/license_finder/cli/approvals_spec.rb +9 -3
  72. data/spec/lib/license_finder/cli/dependencies_spec.rb +5 -2
  73. data/spec/lib/license_finder/cli/main_spec.rb +20 -27
  74. data/spec/lib/license_finder/configuration_spec.rb +1 -3
  75. data/spec/lib/license_finder/decision_applier_spec.rb +15 -15
  76. data/spec/lib/license_finder/decisions_spec.rb +94 -95
  77. data/spec/lib/license_finder/license_spec.rb +5 -5
  78. data/spec/lib/license_finder/package_managers/bower_package_spec.rb +0 -4
  79. data/spec/lib/license_finder/package_managers/bower_spec.rb +6 -27
  80. data/spec/lib/license_finder/package_managers/bundler_package_spec.rb +0 -2
  81. data/spec/lib/license_finder/package_managers/bundler_spec.rb +0 -15
  82. data/spec/lib/license_finder/package_managers/cocoa_pods_package_spec.rb +5 -2
  83. data/spec/lib/license_finder/package_managers/cocoa_pods_spec.rb +13 -31
  84. data/spec/lib/license_finder/package_managers/gradle_package_spec.rb +0 -2
  85. data/spec/lib/license_finder/package_managers/gradle_spec.rb +11 -35
  86. data/spec/lib/license_finder/package_managers/maven_package_spec.rb +0 -2
  87. data/spec/lib/license_finder/package_managers/maven_spec.rb +18 -56
  88. data/spec/lib/license_finder/package_managers/npm_package_spec.rb +0 -2
  89. data/spec/lib/license_finder/package_managers/npm_spec.rb +0 -17
  90. data/spec/lib/license_finder/package_managers/pip_package_spec.rb +0 -2
  91. data/spec/lib/license_finder/package_managers/pip_spec.rb +8 -25
  92. data/spec/lib/license_finder/package_spec.rb +2 -4
  93. data/spec/lib/license_finder/packages/activation_spec.rb +47 -0
  94. data/spec/lib/license_finder/{possible_license_files_spec.rb → packages/license_files_spec.rb} +2 -6
  95. data/spec/lib/license_finder/packages/licensing_spec.rb +1 -0
  96. data/spec/lib/license_finder/{possible_license_file_spec.rb → packages/possible_license_file_spec.rb} +0 -0
  97. data/spec/spec_helper.rb +2 -0
  98. data/spec/support/shared_examples_for_package_manager.rb +14 -1
  99. data/spec/support/test_fixtures.rb +7 -0
  100. metadata +117 -12
  101. data/spec/support/shared_examples_for_package.rb +0 -35
@@ -4,18 +4,17 @@ module LicenseFinder
4
4
  describe License do
5
5
  describe ".find_by_name" do
6
6
  it "should find a registered license" do
7
- expect(License.find_by_name("Apache2")).to be_a License
7
+ license = License.find_by_name("Expat")
8
+ expect(license.name).to eq "MIT"
8
9
  end
9
10
 
10
11
  it "should make an unrecognized license" do
11
12
  license = License.find_by_name("not a known license")
12
-
13
- expect(license).to be_a License
14
13
  expect(license.name).to eq "not a known license"
15
14
  end
16
15
 
17
16
  context "making the default license" do
18
- it "set the name to 'unknown'" do
17
+ it "sets the name to 'unknown'" do
19
18
  expect(License.find_by_name(nil).name).to eq("unknown")
20
19
  end
21
20
 
@@ -27,7 +26,8 @@ module LicenseFinder
27
26
 
28
27
  describe ".find_by_text" do
29
28
  it "should find a registered license" do
30
- expect(License.find_by_text('This gem is released under the MIT license')).to be_a License
29
+ license = License.find_by_text('This gem is released under the MIT license')
30
+ expect(license.name).to eq "MIT"
31
31
  end
32
32
 
33
33
  it "returns nil if not found" do
@@ -9,15 +9,12 @@ module LicenseFinder
9
9
  "name" => "dependency-library",
10
10
  "description" => "description",
11
11
  "version" => "1.3.3.7",
12
- "main" => "normalize.css",
13
12
  "readme" => "some readme stuff",
14
13
  "homepage" => "homepage"
15
14
  }
16
15
  )
17
16
  end
18
17
 
19
- it_behaves_like "a Package"
20
-
21
18
  its(:name) { should == "dependency-library" }
22
19
  its(:version) { should == "1.3.3.7" }
23
20
  its(:summary) { should == "description" }
@@ -27,7 +24,6 @@ module LicenseFinder
27
24
  its(:children) { should == [] } # TODO: get dependencies from dependencies and devDependencies, like NPM
28
25
  its(:install_path) { should eq "/path/to/thing" }
29
26
 
30
-
31
27
  context "when package is NOT installed" do
32
28
  subject do
33
29
  described_class.new(
@@ -13,19 +13,13 @@ module LicenseFinder
13
13
  "dependency-library": {
14
14
  "canonicalDir": "/path/to/thing",
15
15
  "pkgMeta": {
16
- "name": "dependency-library",
17
- "description": "description",
18
- "version": "1.3.3.7",
19
- "main": "normalize.css"
16
+ "name": "dependency-library"
20
17
  }
21
18
  },
22
19
  "another-dependency": {
23
20
  "canonicalDir": "/path/to/thing2",
24
21
  "pkgMeta": {
25
- "name": "another-dependency",
26
- "description": "description2",
27
- "version": "4.2",
28
- "main": "denormalize.css"
22
+ "name": "another-dependency"
29
23
  }
30
24
  }
31
25
  }
@@ -33,25 +27,10 @@ module LicenseFinder
33
27
  JSON
34
28
  allow(bower).to receive("`").with(/bower/).and_return(json)
35
29
 
36
- current_packages = bower.current_packages
37
-
38
- expect(current_packages.size).to eq(2)
39
- expect(current_packages.first).to be_a(Package)
40
- end
41
- end
42
-
43
- describe '.active?' do
44
- let(:package_path) { double(:package_file) }
45
- let(:bower) { Bower.new package_path: package_path }
46
-
47
- it 'is true with a bower.json file' do
48
- allow(package_path).to receive_messages(:exist? => true)
49
- expect(bower).to be_active
50
- end
51
-
52
- it 'is false without a bower.json file' do
53
- allow(package_path).to receive_messages(:exist? => false)
54
- expect(bower).to_not be_active
30
+ expect(bower.current_packages.map { |p| [p.name, p.install_path] }).to eq [
31
+ ["dependency-library", "/path/to/thing"],
32
+ ["another-dependency", "/path/to/thing2"]
33
+ ]
55
34
  end
56
35
  end
57
36
  end
@@ -4,8 +4,6 @@ module LicenseFinder
4
4
  describe BundlerPackage do
5
5
  subject { described_class.new(gemspec, bundler_dependency) }
6
6
 
7
- it_behaves_like "a Package"
8
-
9
7
  let(:gemspec) do
10
8
  Gem::Specification.new do |s|
11
9
  s.name = 'spec_name'
@@ -52,20 +52,5 @@ module LicenseFinder
52
52
  end
53
53
  end
54
54
  end
55
-
56
- describe '.active?' do
57
- let(:package_path) { double(:gemfile_file) }
58
- let(:bundler) { Bundler.new package_path: package_path }
59
-
60
- it 'is true with a Gemfile file' do
61
- allow(package_path).to receive_messages(:exist? => true)
62
- expect(bundler).to be_active
63
- end
64
-
65
- it 'is false without a Gemfile file' do
66
- allow(package_path).to receive_messages(:exist? => false)
67
- expect(bundler).to_not be_active
68
- end
69
- end
70
55
  end
71
56
  end
@@ -7,8 +7,6 @@ module LicenseFinder
7
7
  end
8
8
  let(:license_text) { nil }
9
9
 
10
- it_behaves_like "a Package"
11
-
12
10
  its(:name) { should == "Name" }
13
11
  its(:version) { should == "1.0.0" }
14
12
  its(:summary) { should eq "" }
@@ -38,6 +36,11 @@ module LicenseFinder
38
36
  it "returns unknown when there's no license" do
39
37
  expect(subject.licenses.map(&:name)).to eq ["unknown"]
40
38
  end
39
+
40
+ it "respects license decisions" do
41
+ subject.decide_on_license(License.find_by_name("A"))
42
+ expect(subject.licenses.map(&:name)).to eq ["A"]
43
+ end
41
44
  end
42
45
  end
43
46
  end
@@ -2,7 +2,8 @@ require 'spec_helper'
2
2
 
3
3
  module LicenseFinder
4
4
  describe CocoaPods do
5
- let(:cocoa_pods) { CocoaPods.new }
5
+ let(:project_path) { fixture_path("all_pms") }
6
+ let(:cocoa_pods) { CocoaPods.new(project_path: project_path) }
6
7
  it_behaves_like "a PackageManager"
7
8
 
8
9
  def stub_acknowledgments(hash = {})
@@ -19,7 +20,9 @@ module LicenseFinder
19
20
  end
20
21
 
21
22
  def stub_lockfile(pods)
22
- allow(YAML).to receive(:load_file).with(Pathname.new("Podfile.lock")).and_return("PODS" => pods)
23
+ allow(YAML).to receive(:load_file)
24
+ .with(project_path.join("Podfile.lock"))
25
+ .and_return("PODS" => pods)
23
26
  end
24
27
 
25
28
  describe '.current_packages' do
@@ -31,46 +34,25 @@ module LicenseFinder
31
34
  ])
32
35
  stub_acknowledgments
33
36
 
34
- expect(CocoaPodsPackage).to receive(:new).with("ABTest", "0.0.5", anything)
35
- expect(CocoaPodsPackage).to receive(:new).with("JSONKit", "1.5pre", anything)
36
- expect(CocoaPodsPackage).to receive(:new).with("OpenUDID", "1.0.0", anything)
37
-
38
- current_packages = cocoa_pods.current_packages
39
-
40
- expect(current_packages.size).to eq(3)
37
+ expect(cocoa_pods.current_packages.map { |p| [p.name, p.version ] }).to eq [
38
+ ["ABTest", "0.0.5"],
39
+ ["JSONKit", "1.5pre"],
40
+ ["OpenUDID", "1.0.0"]
41
+ ]
41
42
  end
42
43
 
43
44
  it "passes the license text to the package" do
44
45
  stub_lockfile(["Dependency Name (1.0)"])
45
- stub_acknowledgments({name: "Dependency Name", license: "License Text"})
46
+ stub_acknowledgments({name: "Dependency Name", license: "The MIT License"})
46
47
 
47
- expect(CocoaPodsPackage).to receive(:new).with("Dependency Name", "1.0", "License Text")
48
-
49
- cocoa_pods.current_packages
48
+ expect(cocoa_pods.current_packages.first.licenses.map(&:name)).to eq ['MIT']
50
49
  end
51
50
 
52
51
  it "handles no licenses" do
53
52
  stub_lockfile(["Dependency Name (1.0)"])
54
53
  stub_acknowledgments
55
54
 
56
- expect(CocoaPodsPackage).to receive(:new).with("Dependency Name", "1.0", nil)
57
-
58
- cocoa_pods.current_packages
59
- end
60
- end
61
-
62
- describe '.active?' do
63
- let(:package_path) { double(:package_file) }
64
- let(:cocoa_pods) { CocoaPods.new package_path: package_path }
65
-
66
- it 'is true with a Podfile file' do
67
- allow(package_path).to receive_messages(:exist? => true)
68
- expect(cocoa_pods).to be_active
69
- end
70
-
71
- it 'is false without a Podfile file' do
72
- allow(package_path).to receive_messages(:exist? => false)
73
- expect(cocoa_pods).to_not be_active
55
+ expect(cocoa_pods.current_packages.first.licenses.map(&:name)).to eq ['unknown']
74
56
  end
75
57
  end
76
58
  end
@@ -9,8 +9,6 @@ module LicenseFinder
9
9
  )
10
10
  end
11
11
 
12
- it_behaves_like "a Package"
13
-
14
12
  its(:name) { should == "logback-classic" }
15
13
  its(:version) { should == "1.1.1" }
16
14
  its(:summary) { should == "" }
@@ -32,58 +32,34 @@ module LicenseFinder
32
32
  end
33
33
 
34
34
  it 'lists all the current packages' do
35
- stub_license_report("""
35
+ stub_license_report("
36
36
  <dependency name='org.springframework:spring-aop:4.0.1.RELEASE'>
37
- <file>spring-aop-4.0.1.RELEASE.jar</file>
38
- <license name='The Apache Software License, Version 2.0' url='http://www.apache.org/licenses/LICENSE-2.0.txt' />
39
37
  </dependency>
40
38
  <dependency name='org.springframework:spring-core:4.0.1.RELEASE'>
41
- <file>spring-core-4.0.1.RELEASE.jar</file>
42
- <license name='The Apache Software License, Version 2.0' url='http://www.apache.org/licenses/LICENSE-2.0.txt' />
43
39
  </dependency>
44
- """)
40
+ ")
45
41
 
46
- current_packages = gradle.current_packages
47
-
48
- expect(current_packages.size).to eq(2)
49
- expect(current_packages.first).to be_a(Package)
42
+ expect(gradle.current_packages.map(&:name)).to eq ['spring-aop', 'spring-core']
50
43
  end
51
44
 
52
45
  it "handles multiple licenses" do
53
- stub_license_report("""
54
- <dependency>
46
+ stub_license_report("
47
+ <dependency name=''>
55
48
  <license name='License 1'/>
56
49
  <license name='License 2'/>
57
50
  </dependency>
58
- """)
51
+ ")
59
52
 
60
- expect(GradlePackage).to receive(:new).with({"license" => [{"name" => "License 1"}, {"name" => "License 2"}]}, anything)
61
- gradle.current_packages
53
+ expect(gradle.current_packages.first.licenses.map(&:name)).to eq ["License 1", "License 2"]
62
54
  end
63
55
 
64
56
  it "handles an empty list of licenses" do
65
- stub_license_report("""
66
- <dependency>
57
+ stub_license_report("
58
+ <dependency name=''>
67
59
  </dependency>
68
- """)
69
- expect(GradlePackage).to receive(:new).with({}, anything)
70
-
71
- gradle.current_packages
72
- end
73
- end
74
-
75
- describe '.active?' do
76
- let(:package_path) { double(:package_file) }
77
- let(:gradle) { Gradle.new package_path: package_path }
78
-
79
- it 'is true with a build.gradle file' do
80
- allow(package_path).to receive_messages(:exist? => true)
81
- expect(gradle).to be_active
82
- end
60
+ ")
83
61
 
84
- it 'is false without a build.gradle file' do
85
- allow(package_path).to receive_messages(:exist? => false)
86
- expect(gradle).to_not be_active
62
+ expect(gradle.current_packages.first.licenses.map(&:name)).to eq ['unknown']
87
63
  end
88
64
  end
89
65
  end
@@ -10,8 +10,6 @@ module LicenseFinder
10
10
  )
11
11
  end
12
12
 
13
- it_behaves_like "a Package"
14
-
15
13
  its(:name) { should == "hamcrest-core" }
16
14
  its(:version) { should == "4.11" }
17
15
  its(:summary) { should == "" }
@@ -18,46 +18,34 @@ module LicenseFinder
18
18
 
19
19
  describe '.current_packages' do
20
20
  before do
21
- expect(maven).to receive('`').with(/mvn/)
21
+ allow(maven).to receive('`').with(/mvn/)
22
+ end
23
+
24
+ def stub_license_report(deps)
25
+ fake_file = double(:license_report, read: license_xml(deps))
26
+ allow(maven).to receive(:license_report).and_return(fake_file)
22
27
  end
23
28
 
24
29
  it 'lists all the current packages' do
25
- license_xml = license_xml("""
30
+ stub_license_report("
26
31
  <dependency>
27
- <groupId>junit</groupId>
28
32
  <artifactId>junit</artifactId>
29
33
  <version>4.11</version>
30
- <licenses>
31
- <license>
32
- <name>Common Public License Version 1.0</name>
33
- <url>http://www.opensource.org/licenses/cpl1.0.txt</url>
34
- </license>
35
- </licenses>
36
34
  </dependency>
37
35
  <dependency>
38
- <groupId>org.hamcrest</groupId>
39
36
  <artifactId>hamcrest-core</artifactId>
40
37
  <version>1.3</version>
41
- <licenses>
42
- <license>
43
- <name>New BSD License</name>
44
- <url>http://www.opensource.org/licenses/bsd-license.php</url>
45
- <distribution>repo</distribution>
46
- </license>
47
- </licenses>
48
38
  </dependency>
49
- """)
50
- fake_file = double(:license_report, read: license_xml)
51
- allow(maven).to receive(:license_report).and_return(fake_file)
52
-
53
- current_packages = maven.current_packages
39
+ ")
54
40
 
55
- expect(current_packages.size).to eq(2)
56
- expect(current_packages.first).to be_a(Package)
41
+ expect(maven.current_packages.map { |p| [p.name, p.version] }).to eq [
42
+ ["junit", "4.11"],
43
+ ["hamcrest-core", "1.3"]
44
+ ]
57
45
  end
58
46
 
59
47
  it "handles multiple licenses" do
60
- license_xml = license_xml("""
48
+ stub_license_report("
61
49
  <dependency>
62
50
  <licenses>
63
51
  <license>
@@ -68,44 +56,18 @@ module LicenseFinder
68
56
  </license>
69
57
  </licenses>
70
58
  </dependency>
71
- """)
59
+ ")
72
60
 
73
- fake_file = double(:license_report, read: license_xml)
74
- allow(maven).to receive(:license_report).and_return(fake_file)
75
-
76
- expect(MavenPackage).to receive(:new).with({"licenses" => [{"name" => "License 1"}, {"name" => "License 2"}]}, anything)
77
- maven.current_packages
61
+ expect(maven.current_packages.first.licenses.map(&:name)).to eq ['License 1', 'License 2']
78
62
  end
79
63
 
80
64
  it "handles no licenses" do
81
- license_xml = license_xml("""
65
+ stub_license_report("
82
66
  <dependency>
83
- <licenses>
84
- <!-- comment -->
85
- </licenses>
86
67
  </dependency>
87
- """)
88
-
89
- fake_file = double(:license_report, read: license_xml)
90
- allow(maven).to receive(:license_report).and_return(fake_file)
91
-
92
- expect(MavenPackage).to receive(:new).with({"licenses" => {}}, anything)
93
- maven.current_packages
94
- end
95
- end
96
-
97
- describe '.active?' do
98
- let(:package_path) { double(:package_file) }
99
- let(:maven) { Maven.new package_path: package_path }
100
-
101
- it 'is true with a pom.xml file' do
102
- allow(package_path).to receive(:exist?).and_return(true)
103
- expect(maven.active?).to eq(true)
104
- end
68
+ ")
105
69
 
106
- it 'is false without a pom.xml file' do
107
- allow(package_path).to receive(:exist?).and_return(false)
108
- expect(maven.active?).to eq(false)
70
+ expect(maven.current_packages.first.licenses.map(&:name)).to eq ['unknown']
109
71
  end
110
72
  end
111
73
  end
@@ -18,8 +18,6 @@ module LicenseFinder
18
18
  )
19
19
  end
20
20
 
21
- it_behaves_like "a Package"
22
-
23
21
  its(:name) { should == "jasmine-node" }
24
22
  its(:version) { should == "1.3.1" }
25
23
  its(:summary) { should eq "" }
@@ -67,8 +67,6 @@ module LicenseFinder
67
67
  current_packages = npm.current_packages
68
68
 
69
69
  expect(current_packages.map(&:name)).to eq(["depjs", "dep1-1js", "dep2js", "dep2-1js", "dep3js"])
70
- expect(current_packages.first).to be_a(Package)
71
- expect(current_packages.first.name).to eq("depjs")
72
70
  end
73
71
 
74
72
  it "does not support name version string" do
@@ -96,20 +94,5 @@ module LicenseFinder
96
94
  npm.current_packages
97
95
  end
98
96
  end
99
-
100
- describe '.active?' do
101
- let(:package_path) { double(:package_file) }
102
- let(:npm) { NPM.new package_path: package_path }
103
-
104
- it 'is true with a package.json file' do
105
- allow(package_path).to receive_messages(:exist? => true)
106
- expect(npm).to be_active
107
- end
108
-
109
- it 'is false without a package.json file' do
110
- allow(package_path).to receive_messages(:exist? => false)
111
- expect(npm).to_not be_active
112
- end
113
- end
114
97
  end
115
98
  end