license_finder 1.0.0.0-java → 1.1.1-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.
Files changed (126) hide show
  1. checksums.yaml +4 -4
  2. data/.force-build +0 -0
  3. data/.travis.yml +8 -7
  4. data/CHANGELOG.rdoc +29 -1
  5. data/Rakefile +2 -2
  6. data/db/migrate/201311192003_reassociate_manual_approval.rb +2 -3
  7. data/db/migrate/201403181732_rename_manual_fields.rb +10 -0
  8. data/db/migrate/201403190028_add_manual_approvals.rb +22 -0
  9. data/db/migrate/201403191419_add_timestamps_to_manual_approvals.rb +15 -0
  10. data/db/migrate/201403191645_remove_license_aliases.rb +23 -0
  11. data/features/cli.feature +21 -20
  12. data/features/cocoapods_dependencies.feature +10 -0
  13. data/features/configure_bundler_groups.feature +23 -0
  14. data/features/configure_ignore_dependencies.feature +16 -0
  15. data/features/{project_name.feature → configure_project_name.feature} +1 -1
  16. data/features/{whitelist.feature → configure_whitelist.feature} +6 -6
  17. data/features/manually_added.feature +19 -0
  18. data/features/{approve_dependencies.feature → manually_approved.feature} +2 -2
  19. data/features/manually_assigned_license.feature +16 -0
  20. data/features/{text_report.feature → report_csv.feature} +2 -2
  21. data/features/{html_report.feature → report_html.feature} +2 -2
  22. data/features/step_definitions/cli_steps.rb +22 -32
  23. data/features/step_definitions/cocoapod_steps.rb +8 -0
  24. data/features/step_definitions/configure_bundler_groups_steps.rb +30 -0
  25. data/features/step_definitions/configure_ignore_dependencies.rb +35 -0
  26. data/features/step_definitions/{project_name_steps.rb → configure_project_name_steps.rb} +0 -0
  27. data/features/step_definitions/configure_whitelist_steps.rb +45 -0
  28. data/features/step_definitions/gradle_steps.rb +2 -2
  29. data/features/step_definitions/manually_added_steps.rb +28 -0
  30. data/features/step_definitions/manually_approved_steps.rb +24 -0
  31. data/features/step_definitions/manually_assigned_license_steps.rb +34 -0
  32. data/features/step_definitions/maven_steps.rb +2 -2
  33. data/features/step_definitions/node_steps.rb +2 -2
  34. data/features/step_definitions/python_steps.rb +1 -1
  35. data/features/step_definitions/report_csv_steps.rb +20 -0
  36. data/features/step_definitions/report_html_steps.rb +60 -0
  37. data/features/step_definitions/shared_steps.rb +125 -104
  38. data/{files/license_finder.yml → lib/data/license_finder.example.yml} +3 -0
  39. data/lib/license_finder.rb +3 -2
  40. data/lib/license_finder/cli.rb +94 -49
  41. data/lib/license_finder/configuration.rb +21 -14
  42. data/lib/license_finder/dependency_manager.rb +27 -19
  43. data/lib/license_finder/license.rb +33 -19
  44. data/lib/license_finder/license/definitions.rb +153 -104
  45. data/lib/license_finder/license/matcher.rb +6 -1
  46. data/lib/license_finder/license/none_matcher.rb +9 -0
  47. data/lib/license_finder/license/text.rb +1 -0
  48. data/lib/license_finder/package.rb +30 -6
  49. data/lib/license_finder/package_managers/bower.rb +2 -2
  50. data/lib/license_finder/package_managers/bower_package.rb +2 -2
  51. data/lib/license_finder/package_managers/bundler.rb +9 -17
  52. data/lib/license_finder/package_managers/bundler_package.rb +1 -1
  53. data/lib/license_finder/package_managers/cocoa_pods.rb +35 -0
  54. data/lib/license_finder/package_managers/cocoa_pods_package.rb +19 -0
  55. data/lib/license_finder/package_managers/gradle.rb +9 -5
  56. data/lib/license_finder/package_managers/gradle_package.rb +4 -4
  57. data/lib/license_finder/package_managers/maven.rb +7 -3
  58. data/lib/license_finder/package_managers/maven_package.rb +5 -5
  59. data/lib/license_finder/package_managers/npm.rb +2 -2
  60. data/lib/license_finder/package_managers/npm_package.rb +2 -2
  61. data/lib/license_finder/package_managers/pip.rb +2 -2
  62. data/lib/license_finder/package_managers/pip_package.rb +7 -11
  63. data/lib/license_finder/package_saver.rb +12 -10
  64. data/lib/license_finder/possible_license_file.rb +1 -1
  65. data/lib/license_finder/possible_license_files.rb +11 -15
  66. data/lib/license_finder/reports/formatted_report.rb +25 -6
  67. data/lib/license_finder/reports/html_report.rb +2 -1
  68. data/lib/license_finder/reports/reporter.rb +3 -3
  69. data/lib/license_finder/tables.rb +6 -4
  70. data/lib/license_finder/tables/dependency.rb +36 -16
  71. data/lib/license_finder/tables/manual_approval.rb +13 -0
  72. data/lib/license_finder/yml_to_sql.rb +12 -9
  73. data/lib/templates/html_report.erb +68 -74
  74. data/lib/templates/markdown_report.erb +20 -21
  75. data/license_finder.gemspec +7 -7
  76. data/readme.md +76 -79
  77. data/spec/fixtures/Podfile +3 -0
  78. data/spec/lib/license_finder/cli_spec.rb +71 -23
  79. data/spec/lib/license_finder/configuration_spec.rb +61 -21
  80. data/spec/lib/license_finder/dependency_manager_spec.rb +52 -33
  81. data/spec/lib/license_finder/license/definitions_spec.rb +30 -14
  82. data/spec/lib/license_finder/license_spec.rb +55 -12
  83. data/spec/lib/license_finder/package_managers/bower_package_spec.rb +38 -19
  84. data/spec/lib/license_finder/package_managers/bower_spec.rb +10 -16
  85. data/spec/lib/license_finder/package_managers/bundler_package_spec.rb +39 -15
  86. data/spec/lib/license_finder/package_managers/bundler_spec.rb +10 -22
  87. data/spec/lib/license_finder/package_managers/cocoa_pods_package_spec.rb +44 -0
  88. data/spec/lib/license_finder/package_managers/cocoa_pods_spec.rb +79 -0
  89. data/spec/lib/license_finder/package_managers/gradle_package_spec.rb +4 -5
  90. data/spec/lib/license_finder/package_managers/gradle_spec.rb +26 -20
  91. data/spec/lib/license_finder/package_managers/maven_package_spec.rb +4 -5
  92. data/spec/lib/license_finder/package_managers/maven_spec.rb +16 -19
  93. data/spec/lib/license_finder/package_managers/npm_package_spec.rb +39 -19
  94. data/spec/lib/license_finder/package_managers/npm_spec.rb +10 -16
  95. data/spec/lib/license_finder/package_managers/pip_package_spec.rb +8 -8
  96. data/spec/lib/license_finder/package_managers/pip_spec.rb +10 -16
  97. data/spec/lib/license_finder/package_saver_spec.rb +27 -3
  98. data/spec/lib/license_finder/possible_license_file_spec.rb +25 -23
  99. data/spec/lib/license_finder/reports/detailed_text_report_spec.rb +6 -8
  100. data/spec/lib/license_finder/reports/html_report_spec.rb +45 -44
  101. data/spec/lib/license_finder/reports/markdown_report_spec.rb +8 -9
  102. data/spec/lib/license_finder/reports/reporter_spec.rb +1 -1
  103. data/spec/lib/license_finder/reports/text_report_spec.rb +6 -8
  104. data/spec/lib/license_finder/tables/dependency_spec.rb +57 -41
  105. data/spec/lib/license_finder/yml_to_sql_spec.rb +94 -92
  106. data/spec/spec_helper.rb +1 -0
  107. data/spec/support/stdout_helpers.rb +25 -0
  108. metadata +86 -69
  109. data/MIT.LICENSE +0 -20
  110. data/features/ignore_bundle_groups.feature +0 -23
  111. data/features/manually_managed_dependencies.feature +0 -19
  112. data/features/set_license.feature +0 -10
  113. data/features/step_definitions/approve_dependencies_steps.rb +0 -25
  114. data/features/step_definitions/html_report_steps.rb +0 -62
  115. data/features/step_definitions/ignore_bundle_groups_steps.rb +0 -29
  116. data/features/step_definitions/manually_managed_steps.rb +0 -33
  117. data/features/step_definitions/set_license_steps.rb +0 -20
  118. data/features/step_definitions/text_report_steps.rb +0 -19
  119. data/features/step_definitions/whitelist_steps.rb +0 -45
  120. data/files/dependency_breakdown.png +0 -0
  121. data/files/report_breakdown.png +0 -0
  122. data/lib/license_finder/license_url.rb +0 -9
  123. data/lib/license_finder/tables/license_alias.rb +0 -22
  124. data/spec/lib/license_finder/license_url_spec.rb +0 -16
  125. data/spec/lib/license_finder/tables/license_alias_spec.rb +0 -37
  126. data/spec/support/silence_stdout.rb +0 -13
@@ -0,0 +1,3 @@
1
+ platform :ios, '7.0'
2
+ pod 'JSONKit', '~> 1.4'
3
+ pod 'ABTest', '~> 0.0.5'
@@ -5,7 +5,7 @@ module LicenseFinder
5
5
  describe Dependencies do
6
6
  describe "add" do
7
7
  it "adds a dependency" do
8
- DependencyManager.should_receive(:create_manually_managed).with("MIT", "js_dep", "1.2.3")
8
+ DependencyManager.should_receive(:manually_add).with("MIT", "js_dep", "1.2.3")
9
9
 
10
10
  silence_stdout do
11
11
  subject.add("MIT", "js_dep", "1.2.3")
@@ -13,7 +13,7 @@ module LicenseFinder
13
13
  end
14
14
 
15
15
  it "does not require a version" do
16
- DependencyManager.should_receive(:create_manually_managed).with("MIT", "js_dep", nil)
16
+ DependencyManager.should_receive(:manually_add).with("MIT", "js_dep", nil)
17
17
 
18
18
  silence_stdout do
19
19
  subject.add("MIT", "js_dep")
@@ -21,18 +21,18 @@ module LicenseFinder
21
21
  end
22
22
 
23
23
  it "has an --approve option to approve the added dependency" do
24
- DependencyManager.should_receive(:create_manually_managed).with("MIT", "js_dep", "1.2.3")
25
- DependencyManager.should_receive(:approve!).with("js_dep")
24
+ DependencyManager.should_receive(:manually_add).with("MIT", "js_dep", "1.2.3")
25
+ DependencyManager.should_receive(:approve!).with("js_dep", "Julian", "We really need this")
26
26
 
27
27
  silence_stdout do
28
- LicenseFinder::CLI::Main.start(["dependencies", "add", "--approve", "MIT", "js_dep", "1.2.3"])
28
+ Main.start(["dependencies", "add", "--approve", "--approver", "Julian", "--message", "We really need this", "MIT", "js_dep", "1.2.3"])
29
29
  end
30
30
  end
31
31
  end
32
32
 
33
33
  describe "remove" do
34
34
  it "removes a dependency" do
35
- DependencyManager.should_receive(:destroy_manually_managed).with("js_dep")
35
+ DependencyManager.should_receive(:manually_remove).with("js_dep")
36
36
  silence_stdout do
37
37
  subject.remove("js_dep")
38
38
  end
@@ -57,7 +57,7 @@ module LicenseFinder
57
57
  it "adds the specified license to the whitelist" do
58
58
  config.whitelist.should_receive(:push).with("test")
59
59
  config.should_receive(:save)
60
- Reporter.should_receive(:write_reports)
60
+ expect(DependencyManager).to receive(:sync_with_package_managers)
61
61
 
62
62
  silence_stdout do
63
63
  subject.add("test")
@@ -68,7 +68,7 @@ module LicenseFinder
68
68
  config.whitelist.should_receive(:push).with("test")
69
69
  config.whitelist.should_receive(:push).with("rest")
70
70
  config.should_receive(:save)
71
- Reporter.should_receive(:write_reports)
71
+ expect(DependencyManager).to receive(:sync_with_package_managers)
72
72
 
73
73
  silence_stdout do
74
74
  subject.add("test", "rest")
@@ -80,7 +80,7 @@ module LicenseFinder
80
80
  it "removes the specified license from the whitelist" do
81
81
  config.should_receive(:save)
82
82
  config.whitelist.should_receive(:delete).with("test")
83
- Reporter.should_receive(:write_reports)
83
+ expect(DependencyManager).to receive(:sync_with_package_managers)
84
84
 
85
85
  silence_stdout do
86
86
 
@@ -92,7 +92,7 @@ module LicenseFinder
92
92
  config.should_receive(:save)
93
93
  config.whitelist.should_receive(:delete).with("test")
94
94
  config.whitelist.should_receive(:delete).with("rest")
95
- Reporter.should_receive(:write_reports)
95
+ expect(DependencyManager).to receive(:sync_with_package_managers)
96
96
 
97
97
  silence_stdout do
98
98
  subject.remove("test", "rest")
@@ -108,7 +108,7 @@ module LicenseFinder
108
108
  it "sets the project name" do
109
109
  config.should_receive(:save)
110
110
  config.project_name.should_not eq("new_project_name")
111
- Reporter.should_receive(:write_reports)
111
+ expect(DependencyManager).to receive(:sync_with_package_managers)
112
112
 
113
113
  silence_stdout do
114
114
  subject.set("new_project_name")
@@ -124,11 +124,9 @@ module LicenseFinder
124
124
 
125
125
  describe "list" do
126
126
  it "shows the ignored groups in the standard output" do
127
- config.should_receive(:ignore_groups).and_return([])
127
+ config.should_receive(:ignore_groups).and_return(['development'])
128
128
 
129
- silence_stdout do
130
- subject.list
131
- end
129
+ expect(capture_stdout { subject.list }).to match /development/
132
130
  end
133
131
  end
134
132
 
@@ -136,7 +134,7 @@ module LicenseFinder
136
134
  it "adds the specified group to the ignored groups list" do
137
135
  config.ignore_groups.should_receive(:push).with("test")
138
136
  config.should_receive(:save)
139
- Reporter.should_receive(:write_reports)
137
+ expect(DependencyManager).to receive(:sync_with_package_managers)
140
138
 
141
139
  silence_stdout do
142
140
  subject.add("test")
@@ -148,7 +146,51 @@ module LicenseFinder
148
146
  it "removes the specified group from the ignored groups list" do
149
147
  config.ignore_groups.should_receive(:delete).with("test")
150
148
  config.should_receive(:save)
151
- Reporter.should_receive(:write_reports)
149
+ expect(DependencyManager).to receive(:sync_with_package_managers)
150
+
151
+ silence_stdout do
152
+ subject.remove("test")
153
+ end
154
+ end
155
+ end
156
+ end
157
+
158
+ describe IgnoredDependencies do
159
+ let(:config) { LicenseFinder.config }
160
+
161
+ describe "list" do
162
+ context "when there is at least one ignored dependency" do
163
+ it "shows the ignored dependencies" do
164
+ expect(config).to receive(:ignore_dependencies).and_return(['bundler'])
165
+ expect(capture_stdout { subject.list }).to match /bundler/
166
+ end
167
+ end
168
+
169
+ context "when there are no ignored dependencies" do
170
+ it "prints '(none)'" do
171
+ expect(config).to receive(:ignore_dependencies).and_return([])
172
+ expect(capture_stdout { subject.list }).to match /\(none\)/
173
+ end
174
+ end
175
+ end
176
+
177
+ describe "add" do
178
+ it "adds the specified group to the ignored groups list" do
179
+ config.ignore_dependencies.should_receive(:push).with("test")
180
+ config.should_receive(:save)
181
+ expect(DependencyManager).to receive(:sync_with_package_managers)
182
+
183
+ silence_stdout do
184
+ subject.add("test")
185
+ end
186
+ end
187
+ end
188
+
189
+ describe "remove" do
190
+ it "removes the specified group from the ignored groups list" do
191
+ config.ignore_dependencies.should_receive(:delete).with("test")
192
+ config.should_receive(:save)
193
+ expect(DependencyManager).to receive(:sync_with_package_managers)
152
194
 
153
195
  silence_stdout do
154
196
  subject.remove("test")
@@ -191,7 +233,7 @@ module LicenseFinder
191
233
 
192
234
  describe "#approve" do
193
235
  it "approves the requested gem" do
194
- DependencyManager.should_receive(:approve!).with("foo")
236
+ DependencyManager.should_receive(:approve!).with("foo", nil, nil)
195
237
 
196
238
  silence_stdout do
197
239
  subject.approve 'foo'
@@ -199,8 +241,8 @@ module LicenseFinder
199
241
  end
200
242
 
201
243
  it "approves multiple gem" do
202
- DependencyManager.should_receive(:approve!).with("foo")
203
- DependencyManager.should_receive(:approve!).with("bar")
244
+ DependencyManager.should_receive(:approve!).with("foo", nil, nil)
245
+ DependencyManager.should_receive(:approve!).with("bar", nil, nil)
204
246
 
205
247
  silence_stdout do
206
248
  subject.approve 'foo', 'bar'
@@ -211,9 +253,15 @@ module LicenseFinder
211
253
  DependencyManager.should_not_receive(:approve!)
212
254
 
213
255
  silence_stdout do
214
- subject.should_receive(:say).with(/Warning/, :red)
215
- subject.should_not_receive(:say).with(/dependency has been approved/, anything)
216
- subject.approve
256
+ expect { subject.approve }.to raise_error(ArgumentError)
257
+ end
258
+ end
259
+
260
+ it "sets approver and approval message" do
261
+ DependencyManager.should_receive(:approve!).with("foo", "Julian", "We really need this")
262
+
263
+ silence_stdout do
264
+ Main.start(["approve", "--approver", "Julian", "--message", "We really need this", "foo"])
217
265
  end
218
266
  end
219
267
  end
@@ -11,40 +11,61 @@ module LicenseFinder
11
11
  end
12
12
  end
13
13
 
14
+ describe "#last_modified" do
15
+ let(:time) { double :time }
16
+ before do
17
+ allow(Configuration::Persistence).to receive(:last_modified) { time }
18
+ end
19
+
20
+ it 'returns the last modified date of the config file' do
21
+ expect(LicenseFinder::Configuration.new({}).last_modified).to eq time
22
+ end
23
+ end
24
+
14
25
  describe '.new' do
15
26
  it "should default missing attributes" do
16
27
  subject = described_class.new({})
17
28
  subject.whitelist.should == []
18
29
  subject.ignore_groups.should == []
30
+ subject.ignore_dependencies.should == []
19
31
  subject.artifacts.dir.should == Pathname('./doc/')
32
+ subject.gradle_command.should == 'gradle'
20
33
  end
21
34
 
22
35
  it "should default missing attributes even if they are saved as nils in the YAML file" do
23
36
  attributes = {
24
37
  "whitelist" => nil,
25
38
  "ignore_groups" => nil,
39
+ "ignore_dependencies" => nil,
26
40
  "dependencies_file_dir" => nil,
27
- "project_name" => nil
41
+ "project_name" => nil,
42
+ "gradle_command" => nil
28
43
  }
29
44
  subject = described_class.new(attributes)
30
45
  subject.whitelist.should == []
31
46
  subject.ignore_groups.should == []
47
+ subject.ignore_dependencies.should == []
32
48
  subject.artifacts.dir.should == Pathname('./doc/')
33
49
  subject.project_name.should_not be_nil
50
+ subject.gradle_command.should == 'gradle'
34
51
  end
35
52
 
36
53
  it "should set the all of the attributes on the instance" do
37
54
  attributes = {
38
55
  "whitelist" => %w{a whitelist},
39
56
  "ignore_groups" => %w{test development},
57
+ "ignore_dependencies" => %w{bundler},
40
58
  "dependencies_file_dir" => "some/path",
41
- "project_name" => "my_app"
59
+ "project_name" => "my_app",
60
+ "gradle_command" => "./gradlew"
42
61
  }
43
62
  subject = described_class.new(attributes)
44
63
  subject.whitelist.should == %w{a whitelist}
45
64
  subject.ignore_groups.should == %w{test development}
65
+ subject.ignore_dependencies.should == %w{bundler}
46
66
  subject.artifacts.dir.should == Pathname("some/path")
47
67
  subject.project_name.should == "my_app"
68
+ subject.gradle_command.should == "./gradlew"
48
69
  end
49
70
  end
50
71
 
@@ -72,31 +93,15 @@ module LicenseFinder
72
93
  end
73
94
  end
74
95
 
75
- describe "whitelisted?" do
76
- context "short name whitelisted" do
77
- subject { described_class.new('whitelist' => ["Apache2"]) }
78
-
79
- it "should accept any of the licenses names" do
80
- subject.should be_whitelisted "Apache2"
81
- subject.should be_whitelisted "Apache 2.0"
82
- subject.should be_whitelisted "Apache-2.0"
83
- end
84
-
85
- it "should be case-insensitive" do
86
- subject.should be_whitelisted "apache2"
87
- subject.should be_whitelisted "apache 2.0"
88
- subject.should be_whitelisted "apache-2.0"
89
- end
90
- end
91
- end
92
-
93
96
  describe "#save" do
94
97
  def attributes # can't be a let... the caching causes polution
95
98
  {
96
99
  'whitelist' => ['my_gem'],
97
100
  'ignore_groups' => ['other_group', 'test'],
101
+ 'ignore_dependencies' => ['bundler'],
98
102
  'project_name' => "New Project Name",
99
- 'dependencies_file_dir' => "./deps"
103
+ 'dependencies_file_dir' => "./deps",
104
+ 'gradle_command' => './gradle'
100
105
  }
101
106
  end
102
107
 
@@ -109,6 +114,7 @@ module LicenseFinder
109
114
  config = described_class.new(attributes)
110
115
  config.whitelist << 'my_gem'
111
116
  config.ignore_groups << 'test'
117
+ config.ignore_dependencies << 'bundler'
112
118
 
113
119
  Configuration::Persistence.should_receive(:set).with(attributes)
114
120
  config.save
@@ -116,6 +122,28 @@ module LicenseFinder
116
122
  end
117
123
  end
118
124
 
125
+ describe Configuration::Artifacts do
126
+ describe "#last_refreshed" do
127
+ let(:database_modified_time) { 1 }
128
+ let(:text_modified_time) { 2 }
129
+ let(:detailed_text_modified_time) { 3 }
130
+ let(:html_modified_time) { 4 }
131
+ let(:markdown_modified_time) { 5 }
132
+
133
+ before do
134
+ allow(File).to receive(:mtime).with(Pathname('./doc/dependencies.db')) { database_modified_time }
135
+ allow(File).to receive(:mtime).with(Pathname('./doc/dependencies.csv')) { text_modified_time }
136
+ allow(File).to receive(:mtime).with(Pathname('./doc/dependencies_detailed.csv')) { detailed_text_modified_time }
137
+ allow(File).to receive(:mtime).with(Pathname('./doc/dependencies.html')) { html_modified_time }
138
+ allow(File).to receive(:mtime).with(Pathname('./doc/dependencies.md')) { markdown_modified_time }
139
+ end
140
+
141
+ it 'returns the earliest modified date of the config file' do
142
+ expect(described_class.new(Pathname('./doc')).last_refreshed).to eq database_modified_time
143
+ end
144
+ end
145
+ end
146
+
119
147
  describe Configuration::Persistence do
120
148
  describe ".get" do
121
149
  it "should use saved configuration" do
@@ -168,5 +196,17 @@ module LicenseFinder
168
196
  described_class.init
169
197
  end
170
198
  end
199
+
200
+ describe ".last_modified" do
201
+ let(:time) { double :time }
202
+ let(:config_path) { Pathname.new('.').join('config').join('license_finder.yml') }
203
+ before do
204
+ allow(File).to receive(:mtime).with(config_path) { time }
205
+ end
206
+
207
+ it "returns the last time the yml file was modified" do
208
+ expect(described_class.last_modified).to eq time
209
+ end
210
+ end
171
211
  end
172
212
  end
@@ -13,10 +13,10 @@ module LicenseFinder
13
13
  let(:gem1) { double(:package) }
14
14
  let(:gem2) { double(:package) }
15
15
 
16
- it "destroys every dependency except for the ones Bundler reports as 'current' or are marked as 'manual'" do
16
+ it "destroys every dependency except for the ones Bundler reports as 'current' or are marked as 'added_manually'" do
17
17
  cur1 = Dependency.create(name: "current dependency 1")
18
18
  cur2 = Dependency.create(name: "current dependency 2")
19
- man1 = Dependency.create(name: "manual dependency", manual: true)
19
+ man1 = Dependency.create(name: "manual dependency", added_manually: true)
20
20
  Dependency.create(name: "old dependency 1")
21
21
  Dependency.create(name: "old dependency 2")
22
22
 
@@ -29,20 +29,20 @@ module LicenseFinder
29
29
  end
30
30
  end
31
31
 
32
- describe ".create_manually_managed" do
32
+ describe ".manually_add" do
33
33
  it "should add a Dependency" do
34
34
  expect do
35
- described_class.create_manually_managed("MIT", "js_dep", "0.0.0")
35
+ described_class.manually_add("MIT", "js_dep", "0.0.0")
36
36
  end.to change(Dependency, :count).by(1)
37
37
  end
38
38
 
39
39
  it "should mark the dependency as manual" do
40
- described_class.create_manually_managed("MIT", "js_dep", "0.0.0")
41
- .should be_manual
40
+ described_class.manually_add("MIT", "js_dep", "0.0.0")
41
+ .should be_added_manually
42
42
  end
43
43
 
44
44
  it "should set the appropriate values" do
45
- dep = described_class.create_manually_managed("GPL", "js_dep", "0.0.0")
45
+ dep = described_class.manually_add("GPL", "js_dep", "0.0.0")
46
46
  dep.name.should == "js_dep"
47
47
  dep.version.should == "0.0.0"
48
48
  dep.license.name.should == "GPL"
@@ -51,23 +51,16 @@ module LicenseFinder
51
51
 
52
52
  it "should complain if the dependency already exists" do
53
53
  Dependency.create(name: "current dependency 1")
54
- expect { described_class.create_manually_managed("GPL", "current dependency 1", "0.0.0") }
55
- .to raise_error(LicenseFinder::Error)
56
- end
57
-
58
- it "re-uses an existing, unassociated, license alias" do
59
- existing_license = LicenseAlias.named("existing license")
60
-
61
- dep = described_class.create_manually_managed("existing license", "js_dep", "0.0.0")
62
- dep.license.should == existing_license
54
+ expect { described_class.manually_add("GPL", "current dependency 1", "0.0.0") }
55
+ .to raise_error(Error)
63
56
  end
64
57
  end
65
58
 
66
- describe ".destroy_manually_managed" do
59
+ describe ".manually_remove" do
67
60
  it "should remove a manually managed Dependency" do
68
- described_class.create_manually_managed("GPL", "a manually managed dep", nil)
61
+ described_class.manually_add("GPL", "a manually managed dep", nil)
69
62
  expect do
70
- described_class.destroy_manually_managed("a manually managed dep")
63
+ described_class.manually_remove("a manually managed dep")
71
64
  end.to change(Dependency, :count).by(-1)
72
65
  end
73
66
 
@@ -75,8 +68,8 @@ module LicenseFinder
75
68
  Dependency.create(name: "a bundler dep")
76
69
  expect do
77
70
  expect do
78
- described_class.destroy_manually_managed("a bundler dep")
79
- end.to raise_error(LicenseFinder::Error)
71
+ described_class.manually_remove("a bundler dep")
72
+ end.to raise_error(Error)
80
73
  end.to_not change(Dependency, :count)
81
74
  end
82
75
  end
@@ -84,14 +77,24 @@ module LicenseFinder
84
77
  describe ".approve!" do
85
78
  it "approves the dependency" do
86
79
  dep = Dependency.named("current dependency")
80
+ dep.license = License.find_by_name('not approved')
81
+ dep.save
87
82
  dep.reload.should_not be_approved
88
83
  described_class.approve!("current dependency")
89
84
  dep.reload.should be_approved
90
85
  end
91
86
 
87
+ it "optionally adds approver and approval notes" do
88
+ dep = Dependency.named("current dependency")
89
+ described_class.approve!("current dependency", "Julian", "We really need this")
90
+ approval = dep.reload.manual_approval
91
+ approval.approver.should eq "Julian"
92
+ approval.notes.should eq "We really need this"
93
+ end
94
+
92
95
  it "should raise an error if it can't find the dependency" do
93
96
  expect { described_class.approve!("non-existent dependency") }
94
- .to raise_error(LicenseFinder::Error)
97
+ .to raise_error(Error)
95
98
  end
96
99
  end
97
100
 
@@ -100,13 +103,13 @@ module LicenseFinder
100
103
 
101
104
  it "adds a license for the dependency" do
102
105
  DependencyManager.stub(:find_by_name).with("dependency").and_return(dependency)
103
- dependency.should_receive(:set_license_manually!).with("MIT")
106
+ dependency.should_receive(:set_license_manually!).with(License.find_by_name "MIT")
104
107
  described_class.license!("dependency", "MIT")
105
108
  end
106
109
 
107
110
  it "should raise an error if it can't find the dependency" do
108
111
  expect { described_class.license!("non-existent dependency", "a license") }
109
- .to raise_error(LicenseFinder::Error)
112
+ .to raise_error(Error)
110
113
  end
111
114
  end
112
115
 
@@ -145,27 +148,43 @@ module LicenseFinder
145
148
  context "when the database has not changed" do
146
149
  before do
147
150
  Digest::SHA2.stub_chain(:file, :hexdigest) { 5 }
151
+ allow(config).to receive(:last_modified) { config_last_update }
152
+ allow(config.artifacts).to receive(:last_refreshed) { artifacts_last_update }
148
153
  end
149
154
 
150
- context "when the reports exist" do
155
+ context "and the reports do not exist" do
151
156
  before do
152
- config.artifacts.stub(:html_file).and_return(file_exists)
157
+ config.artifacts.stub(:html_file).and_return(file_does_not_exist)
153
158
  end
154
159
 
155
- it "does not write reports" do
156
- Reporter.should_not_receive(:write_reports)
160
+ it "writes reports" do
161
+ Reporter.should_receive(:write_reports)
157
162
  DependencyManager.modifying {}
158
163
  end
159
164
  end
160
165
 
161
- context "when the reports do not exist" do
166
+ context "and the reports exist" do
162
167
  before do
163
- config.artifacts.stub(:html_file).and_return(file_does_not_exist)
168
+ config.artifacts.stub(:html_file).and_return(file_exists)
164
169
  end
165
170
 
166
- it "writes reports" do
167
- Reporter.should_receive(:write_reports)
168
- DependencyManager.modifying {}
171
+ context "and configs are newer than the reports" do
172
+ let(:config_last_update) { 4 }
173
+ let(:artifacts_last_update) { 1 }
174
+ it "writes reports" do
175
+ expect(Reporter).to receive(:write_reports)
176
+ DependencyManager.modifying {}
177
+ end
178
+ end
179
+
180
+ context "and configs are older than the reports" do
181
+ let(:config_last_update) { 4 }
182
+ let(:artifacts_last_update) { 6 }
183
+
184
+ it "does not write reports" do
185
+ expect(Reporter).not_to receive(:write_reports)
186
+ DependencyManager.modifying {}
187
+ end
169
188
  end
170
189
  end
171
190
  end