license_finder 3.0.4 → 3.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (251) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +56 -0
  3. data/CHANGELOG.md +29 -2
  4. data/CONTRIBUTING.md +5 -1
  5. data/Dockerfile +33 -10
  6. data/Gemfile +2 -2
  7. data/README.md +27 -5
  8. data/Rakefile +15 -21
  9. data/ci/pipelines/pipeline.yml.erb +40 -6
  10. data/ci/pipelines/release.yml +11 -5
  11. data/ci/scripts/containerize-tests.sh +16 -0
  12. data/ci/scripts/run-rubocop.sh +8 -0
  13. data/ci/scripts/run-tests.sh +22 -0
  14. data/ci/scripts/test.ps1 +81 -0
  15. data/ci/tasks/build-windows.yml +6 -0
  16. data/ci/tasks/build.yml +2 -2
  17. data/ci/tasks/rubocop.yml +13 -0
  18. data/features/features/cli/cli_spec.rb +8 -8
  19. data/features/features/configure/add_dependencies_spec.rb +7 -7
  20. data/features/features/configure/approve_dependencies_spec.rb +15 -15
  21. data/features/features/configure/assign_licenses_spec.rb +4 -4
  22. data/features/features/configure/blacklist_licenses_spec.rb +3 -3
  23. data/features/features/configure/ignore_dependencies_spec.rb +3 -3
  24. data/features/features/configure/ignore_groups_spec.rb +4 -4
  25. data/features/features/configure/name_project_spec.rb +4 -4
  26. data/features/features/configure/set_project_path_spec.rb +2 -2
  27. data/features/features/configure/whitelist_licenses_spec.rb +4 -4
  28. data/features/features/package_managers/bower_spec.rb +3 -3
  29. data/features/features/package_managers/carthage_spec.rb +14 -0
  30. data/features/features/package_managers/cocoapods_spec.rb +3 -3
  31. data/features/features/package_managers/conan_spec.rb +11 -0
  32. data/features/features/package_managers/dep_spec.rb +15 -0
  33. data/features/features/package_managers/glide_spec.rb +14 -0
  34. data/features/features/package_managers/govendor_spec.rb +15 -0
  35. data/features/features/package_managers/gradle_spec.rb +1 -1
  36. data/features/features/package_managers/gvt_spec.rb +14 -0
  37. data/features/features/package_managers/maven_spec.rb +2 -3
  38. data/features/features/package_managers/mix_spec.rb +16 -0
  39. data/features/features/package_managers/npm_spec.rb +3 -3
  40. data/features/features/package_managers/nuget_spec.rb +4 -4
  41. data/features/features/package_managers/pip_spec.rb +2 -2
  42. data/features/features/package_managers/rebar_spec.rb +3 -3
  43. data/features/features/package_managers/yarn_spec.rb +14 -0
  44. data/features/features/report/composite_spec.rb +1 -1
  45. data/features/features/report/csv_spec.rb +3 -3
  46. data/features/features/report/diff_spec.rb +20 -10
  47. data/features/features/report/html_spec.rb +10 -10
  48. data/features/features/report/subproject_spec.rb +15 -4
  49. data/features/fixtures/Cartfile +1 -0
  50. data/features/fixtures/Podfile +1 -1
  51. data/features/fixtures/alternate-build-file-gradle/build-alt.gradle +5 -15
  52. data/features/fixtures/build.gradle +5 -15
  53. data/features/fixtures/conanfile.txt +11 -0
  54. data/features/fixtures/file-based-libs-gradle/build.gradle +5 -7
  55. data/features/fixtures/gopath_dep/src/foo-dep/Gopkg.lock +9 -0
  56. data/features/fixtures/gopath_dep/src/foo-dep/Gopkg.toml +7 -0
  57. data/features/fixtures/gopath_dep/src/foo-dep/bar/bar.go +10 -0
  58. data/features/fixtures/gopath_dep/src/foo-dep/foo.go +7 -0
  59. data/features/fixtures/gopath_glide/src/glide.lock +9 -0
  60. data/features/fixtures/gopath_glide/src/glide.yaml +6 -0
  61. data/features/fixtures/gopath_govendor/src/vendor/vendor.json +19 -0
  62. data/features/fixtures/gopath_gvt/src/vendor/manifest +22 -0
  63. data/features/fixtures/gradle-wrapper/build.gradle +5 -15
  64. data/features/fixtures/gradle-wrapper/gradlew +6 -1
  65. data/features/fixtures/gradle-wrapper/gradlew.bat +9 -1
  66. data/features/fixtures/mix.exs +22 -0
  67. data/features/fixtures/multi-module-gradle/build.gradle +7 -15
  68. data/features/fixtures/single-module-gradle/build.gradle +5 -15
  69. data/features/support/testing_dsl.rb +155 -43
  70. data/lib/license_finder.rb +4 -3
  71. data/lib/license_finder/cli.rb +0 -3
  72. data/lib/license_finder/cli/approvals.rb +3 -3
  73. data/lib/license_finder/cli/base.rb +11 -8
  74. data/lib/license_finder/cli/blacklist.rb +7 -7
  75. data/lib/license_finder/cli/dependencies.rb +8 -8
  76. data/lib/license_finder/cli/ignored_dependencies.rb +4 -4
  77. data/lib/license_finder/cli/ignored_groups.rb +4 -4
  78. data/lib/license_finder/cli/licenses.rb +2 -2
  79. data/lib/license_finder/cli/main.rb +59 -39
  80. data/lib/license_finder/cli/makes_decisions.rb +2 -2
  81. data/lib/license_finder/cli/patched_thor.rb +6 -7
  82. data/lib/license_finder/cli/project_name.rb +5 -6
  83. data/lib/license_finder/cli/whitelist.rb +7 -7
  84. data/lib/license_finder/configuration.rb +15 -4
  85. data/lib/license_finder/core.rb +20 -4
  86. data/lib/license_finder/decision_applier.rb +0 -1
  87. data/lib/license_finder/decisions.rb +12 -14
  88. data/lib/license_finder/diff.rb +33 -31
  89. data/lib/license_finder/license.rb +13 -9
  90. data/lib/license_finder/license/definitions.rb +55 -55
  91. data/lib/license_finder/license/none_matcher.rb +1 -1
  92. data/lib/license_finder/license/template.rb +1 -1
  93. data/lib/license_finder/license/text.rb +0 -1
  94. data/lib/license_finder/license_aggregator.rb +1 -0
  95. data/lib/license_finder/logger.rb +18 -61
  96. data/lib/license_finder/package.rb +25 -11
  97. data/lib/license_finder/package_delta.rb +3 -6
  98. data/lib/license_finder/package_manager.rb +77 -34
  99. data/lib/license_finder/package_managers/bower.rb +8 -8
  100. data/lib/license_finder/package_managers/bower_package.rb +12 -12
  101. data/lib/license_finder/package_managers/bundler.rb +21 -9
  102. data/lib/license_finder/package_managers/bundler_package.rb +1 -1
  103. data/lib/license_finder/package_managers/carthage.rb +66 -0
  104. data/lib/license_finder/package_managers/carthage_package.rb +16 -0
  105. data/lib/license_finder/package_managers/cocoa_pods.rb +13 -13
  106. data/lib/license_finder/package_managers/cocoa_pods_package.rb +1 -1
  107. data/lib/license_finder/package_managers/conan.rb +26 -0
  108. data/lib/license_finder/package_managers/conan_info_parser.rb +74 -0
  109. data/lib/license_finder/package_managers/conan_package.rb +17 -0
  110. data/lib/license_finder/package_managers/dep.rb +33 -0
  111. data/lib/license_finder/package_managers/glide.rb +30 -0
  112. data/lib/license_finder/package_managers/{go_vendor.rb → go_15vendorexperiment.rb} +19 -24
  113. data/lib/license_finder/package_managers/go_dep.rb +15 -12
  114. data/lib/license_finder/package_managers/go_package.rb +15 -13
  115. data/lib/license_finder/package_managers/go_workspace.rb +39 -34
  116. data/lib/license_finder/package_managers/govendor.rb +32 -0
  117. data/lib/license_finder/package_managers/gradle.rb +16 -16
  118. data/lib/license_finder/package_managers/gradle_package.rb +8 -8
  119. data/lib/license_finder/package_managers/gvt.rb +61 -0
  120. data/lib/license_finder/package_managers/maven.rb +17 -18
  121. data/lib/license_finder/package_managers/maven_package.rb +4 -6
  122. data/lib/license_finder/package_managers/merged_package.rb +25 -2
  123. data/lib/license_finder/package_managers/mix.rb +51 -0
  124. data/lib/license_finder/package_managers/mix_package.rb +7 -0
  125. data/lib/license_finder/package_managers/npm.rb +8 -32
  126. data/lib/license_finder/package_managers/npm_package.rb +51 -48
  127. data/lib/license_finder/package_managers/nuget.rb +30 -40
  128. data/lib/license_finder/package_managers/pip.rb +11 -11
  129. data/lib/license_finder/package_managers/pip_package.rb +8 -8
  130. data/lib/license_finder/package_managers/rebar.rb +11 -11
  131. data/lib/license_finder/package_managers/yarn.rb +62 -0
  132. data/lib/license_finder/packages/activation.rb +2 -2
  133. data/lib/license_finder/packages/license_files.rb +6 -6
  134. data/lib/license_finder/packages/licensing.rb +8 -10
  135. data/lib/license_finder/packages/manual_package.rb +2 -2
  136. data/lib/license_finder/project_finder.rb +6 -5
  137. data/lib/license_finder/report.rb +1 -0
  138. data/lib/license_finder/reports/csv_report.rb +4 -4
  139. data/lib/license_finder/reports/diff_report.rb +2 -2
  140. data/lib/license_finder/reports/erb_report.rb +2 -4
  141. data/lib/license_finder/reports/html_report.rb +2 -2
  142. data/lib/license_finder/reports/markdown_report.rb +1 -1
  143. data/lib/license_finder/reports/merged_report.rb +1 -1
  144. data/lib/license_finder/reports/text_report.rb +3 -5
  145. data/lib/license_finder/shared_helpers/cmd.rb +11 -0
  146. data/lib/license_finder/version.rb +1 -1
  147. data/license_finder-2.1.2.gem +0 -0
  148. data/license_finder.gemspec +38 -38
  149. metadata +84 -118
  150. data/ci/scripts/test.sh +0 -26
  151. data/ci/tasks/create-source-archives.yml +0 -23
  152. data/spec/dummy_app/Gemfile +0 -6
  153. data/spec/fixtures/all_pms/.envrc +0 -1
  154. data/spec/fixtures/all_pms/.nuget/.keep +0 -0
  155. data/spec/fixtures/all_pms/Gemfile +0 -0
  156. data/spec/fixtures/all_pms/Godeps/Godeps.json +0 -0
  157. data/spec/fixtures/all_pms/Podfile +0 -0
  158. data/spec/fixtures/all_pms/bower.json +0 -0
  159. data/spec/fixtures/all_pms/build.gradle +0 -0
  160. data/spec/fixtures/all_pms/package.json +0 -0
  161. data/spec/fixtures/all_pms/pom.xml +0 -0
  162. data/spec/fixtures/all_pms/rebar.config +0 -0
  163. data/spec/fixtures/all_pms/requirements.txt +0 -0
  164. data/spec/fixtures/all_pms/vendor/.gitkeep +0 -0
  165. data/spec/fixtures/composite/Gemfile +0 -0
  166. data/spec/fixtures/composite/nested_project/.envrc +0 -8
  167. data/spec/fixtures/composite/nested_project/src/github.com/pivotal/foo/Godeps/Godeps.json +0 -16
  168. data/spec/fixtures/composite/nested_project/src/github.com/pivotal/foo/Godeps/Readme +0 -5
  169. data/spec/fixtures/composite/nested_project/src/github.com/pivotal/foo/foo.go +0 -6
  170. data/spec/fixtures/composite/not_a_project/DONTREADME.md +0 -0
  171. data/spec/fixtures/composite/project1/Gemfile +0 -0
  172. data/spec/fixtures/composite/project2/package.json +0 -0
  173. data/spec/fixtures/config/license_finder.yml +0 -5
  174. data/spec/fixtures/license_directory/COPYING +0 -1
  175. data/spec/fixtures/license_directory/LICENSE/MIT.txt +0 -1
  176. data/spec/fixtures/license_directory/LICENSE/lib/unrelated.txt +0 -2
  177. data/spec/fixtures/license_names/COPYING.txt +0 -1
  178. data/spec/fixtures/license_names/LICENSE +0 -1
  179. data/spec/fixtures/license_names/Licence.rdoc +0 -1
  180. data/spec/fixtures/license_names/Mit-License +0 -1
  181. data/spec/fixtures/license_names/README.rdoc +0 -1
  182. data/spec/fixtures/nested_gem/vendor/LICENSE +0 -1
  183. data/spec/fixtures/npm-circular-dependencies/npm-list.json +0 -5339
  184. data/spec/fixtures/npm-circular-dependencies/package.json +0 -5
  185. data/spec/fixtures/npm-circular-licenses/npm-list.json +0 -7597
  186. data/spec/fixtures/npm-circular-licenses/package.json +0 -23
  187. data/spec/fixtures/npm-licenses-string/npm-list.json +0 -7597
  188. data/spec/fixtures/npm-licenses-string/package.json +0 -23
  189. data/spec/fixtures/npm-recursive-dependencies/npm-list.json +0 -5158
  190. data/spec/fixtures/npm-recursive-dependencies/package.json +0 -15
  191. data/spec/fixtures/npm-stack-too-deep/npm-list.json +0 -13464
  192. data/spec/fixtures/npm-stack-too-deep/package.json +0 -5
  193. data/spec/fixtures/utf8_gem/README +0 -210
  194. data/spec/lib/license_finder/cli/approvals_spec.rb +0 -71
  195. data/spec/lib/license_finder/cli/blacklist_spec.rb +0 -58
  196. data/spec/lib/license_finder/cli/dependencies_spec.rb +0 -73
  197. data/spec/lib/license_finder/cli/ignored_dependencies_spec.rb +0 -47
  198. data/spec/lib/license_finder/cli/ignored_groups_spec.rb +0 -40
  199. data/spec/lib/license_finder/cli/licenses_spec.rb +0 -60
  200. data/spec/lib/license_finder/cli/main_spec.rb +0 -243
  201. data/spec/lib/license_finder/cli/project_name_spec.rb +0 -40
  202. data/spec/lib/license_finder/cli/whitelist_spec.rb +0 -58
  203. data/spec/lib/license_finder/configuration_spec.rb +0 -115
  204. data/spec/lib/license_finder/core_spec.rb +0 -54
  205. data/spec/lib/license_finder/decision_applier_spec.rb +0 -219
  206. data/spec/lib/license_finder/decisions_spec.rb +0 -408
  207. data/spec/lib/license_finder/diff_spec.rb +0 -129
  208. data/spec/lib/license_finder/license/definitions_spec.rb +0 -177
  209. data/spec/lib/license_finder/license_aggregator_spec.rb +0 -61
  210. data/spec/lib/license_finder/license_spec.rb +0 -106
  211. data/spec/lib/license_finder/package_delta_spec.rb +0 -18
  212. data/spec/lib/license_finder/package_manager_spec.rb +0 -62
  213. data/spec/lib/license_finder/package_managers/bower_package_spec.rb +0 -71
  214. data/spec/lib/license_finder/package_managers/bower_spec.rb +0 -39
  215. data/spec/lib/license_finder/package_managers/bundler_package_spec.rb +0 -35
  216. data/spec/lib/license_finder/package_managers/bundler_spec.rb +0 -56
  217. data/spec/lib/license_finder/package_managers/cocoa_pods_package_spec.rb +0 -48
  218. data/spec/lib/license_finder/package_managers/cocoa_pods_spec.rb +0 -59
  219. data/spec/lib/license_finder/package_managers/go_dep_spec.rb +0 -126
  220. data/spec/lib/license_finder/package_managers/go_package_spec.rb +0 -33
  221. data/spec/lib/license_finder/package_managers/go_vendor_spec.rb +0 -144
  222. data/spec/lib/license_finder/package_managers/go_workspace_spec.rb +0 -286
  223. data/spec/lib/license_finder/package_managers/gradle_package_spec.rb +0 -80
  224. data/spec/lib/license_finder/package_managers/gradle_spec.rb +0 -180
  225. data/spec/lib/license_finder/package_managers/maven_package_spec.rb +0 -63
  226. data/spec/lib/license_finder/package_managers/maven_spec.rb +0 -128
  227. data/spec/lib/license_finder/package_managers/merged_package_spec.rb +0 -60
  228. data/spec/lib/license_finder/package_managers/npm_package_spec.rb +0 -57
  229. data/spec/lib/license_finder/package_managers/npm_spec.rb +0 -253
  230. data/spec/lib/license_finder/package_managers/nuget_package_spec.rb +0 -9
  231. data/spec/lib/license_finder/package_managers/nuget_spec.rb +0 -157
  232. data/spec/lib/license_finder/package_managers/pip_package_spec.rb +0 -87
  233. data/spec/lib/license_finder/package_managers/pip_spec.rb +0 -47
  234. data/spec/lib/license_finder/package_managers/rebar_package_spec.rb +0 -24
  235. data/spec/lib/license_finder/package_managers/rebar_spec.rb +0 -50
  236. data/spec/lib/license_finder/package_spec.rb +0 -179
  237. data/spec/lib/license_finder/packages/activation_spec.rb +0 -41
  238. data/spec/lib/license_finder/packages/license_files_spec.rb +0 -46
  239. data/spec/lib/license_finder/packages/licensing_spec.rb +0 -1
  240. data/spec/lib/license_finder/packages/possible_license_file_spec.rb +0 -38
  241. data/spec/lib/license_finder/project_finder_spec.rb +0 -33
  242. data/spec/lib/license_finder/reports/csv_report_spec.rb +0 -70
  243. data/spec/lib/license_finder/reports/diff_report_spec.rb +0 -56
  244. data/spec/lib/license_finder/reports/html_report_spec.rb +0 -101
  245. data/spec/lib/license_finder/reports/markdown_report_spec.rb +0 -45
  246. data/spec/lib/license_finder/reports/merged_report_spec.rb +0 -21
  247. data/spec/lib/license_finder/reports/text_report_spec.rb +0 -43
  248. data/spec/spec_helper.rb +0 -27
  249. data/spec/support/shared_examples_for_package_manager.rb +0 -52
  250. data/spec/support/stdout_helpers.rb +0 -31
  251. data/spec/support/test_fixtures.rb +0 -7
@@ -1,54 +0,0 @@
1
- require "spec_helper"
2
-
3
- module LicenseFinder
4
- describe Core do
5
- let(:options) { {} }
6
- let(:license_finder) { described_class.new(options) }
7
- let(:logger) { Logger.new(options[:logger]) }
8
- let(:configuration) { LicenseFinder::Configuration.new(options, {})}
9
- let(:pathname) { Pathname.pwd + Pathname(options[:project_path]) }
10
-
11
- before do
12
- allow(Logger).to receive(:new).and_return(logger)
13
- end
14
-
15
- describe "#unapproved" do
16
- let(:options) {
17
- {
18
- logger: {},
19
- project_path: 'other_directory',
20
- gradle_command: 'just_do_it',
21
- rebar_command: 'do_it',
22
- rebar_deps_dir: 'nowhere/deps'
23
- }
24
- }
25
- let(:package_options) {
26
- {
27
- logger: logger,
28
- project_path: configuration.project_path,
29
- ignored_groups: Set.new,
30
- go_full_version: nil,
31
- gradle_command: configuration.gradle_command,
32
- gradle_include_groups: nil,
33
- maven_include_groups: nil,
34
- maven_options: nil,
35
- pip_requirements_path: nil,
36
- rebar_command: configuration.rebar_command,
37
- rebar_deps_dir: configuration.rebar_deps_dir
38
- }
39
- }
40
-
41
- it "delegates to the decision_applier" do
42
- decision_applier = double(:decision_applier)
43
- allow(license_finder).to receive(:decision_applier).and_return(decision_applier)
44
- expect(decision_applier).to receive(:unapproved)
45
- license_finder.unapproved
46
- end
47
-
48
- it "passes through options when fetching current packages" do
49
- expect(PackageManager).to receive(:current_packages).with(package_options).and_return([])
50
- license_finder.unapproved
51
- end
52
- end
53
- end
54
- end
@@ -1,219 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module LicenseFinder
4
- describe DecisionApplier do
5
- it "reports nothing found" do
6
- decision_applier = described_class.new(
7
- decisions: Decisions.new,
8
- packages: []
9
- )
10
- expect(decision_applier.any_packages?).to be false
11
- end
12
-
13
- describe "#acknowledged" do
14
- it "combines manual and system packages" do
15
- decision_applier = described_class.new(
16
- decisions: Decisions.new.add_package("manual", nil),
17
- packages: [Package.new("system")]
18
- )
19
- expect(decision_applier.acknowledged.map(&:name)).to match_array ["manual", "system"]
20
- end
21
-
22
- it "applies decided licenses" do
23
- decisions = Decisions.new
24
- .add_package("manual", nil)
25
- .license("manual", "MIT")
26
- decision_applier = described_class.new(decisions: decisions, packages: [])
27
- expect(decision_applier.acknowledged.last.licenses).to eq Set.new([License.find_by_name("MIT")])
28
- end
29
-
30
- it "ignores specific packages" do
31
- decisions = Decisions.new
32
- .add_package("manual", nil)
33
- .ignore("manual")
34
- decision_applier = described_class.new(decisions: decisions, packages: [])
35
- expect(decision_applier.acknowledged).to be_empty
36
- end
37
-
38
- it "ignores packages in certain groups" do
39
- decisions = Decisions.new
40
- .ignore_group("development")
41
- dev_dep = Package.new("dep", nil, groups: ["development"])
42
- decision_applier = described_class.new(
43
- decisions: decisions,
44
- packages: [dev_dep]
45
- )
46
- expect(decision_applier.acknowledged).to be_empty
47
- end
48
-
49
- it "does not ignore packages if some of their groups are not ignored" do
50
- decisions = Decisions.new
51
- .ignore_group("development")
52
- dev_and_prod_dep = Package.new("dev_and_prod_dep", nil, groups: ["development", "production"])
53
- decision_applier = described_class.new(
54
- decisions: decisions,
55
- packages: [dev_and_prod_dep]
56
- )
57
- expect(decision_applier.acknowledged).to eq [dev_and_prod_dep]
58
- end
59
-
60
- it "does not ignore packages if they have no groups" do
61
- decisions = Decisions.new
62
- .ignore_group("development")
63
- dep_with_no_group = Package.new("dep_with_no_group", nil, groups: [])
64
- decision_applier = described_class.new(
65
- decisions: decisions,
66
- packages: [dep_with_no_group]
67
- )
68
- expect(decision_applier.acknowledged).to eq [dep_with_no_group]
69
- end
70
-
71
-
72
- it "adds manual approvals to packages" do
73
- decisions = Decisions.new
74
- .add_package("manual", nil)
75
- .approve("manual", who: "Approver", why: "Because")
76
- decision_applier = described_class.new(decisions: decisions, packages: [])
77
- dep = decision_applier.acknowledged.last
78
- expect(dep).to be_approved
79
- expect(dep).to be_approved_manually
80
- expect(dep.manual_approval.who).to eq "Approver"
81
- expect(dep.manual_approval.why).to eq "Because"
82
- end
83
-
84
- it "adds whitelist approvals to packages" do
85
- decisions = Decisions.new
86
- .add_package("manual", nil)
87
- .license("manual", "MIT")
88
- .whitelist("MIT")
89
- decision_applier = described_class.new(decisions: decisions, packages: [])
90
- dep = decision_applier.acknowledged.last
91
- expect(dep).to be_approved
92
- expect(dep).to be_whitelisted
93
- end
94
-
95
- it "forbids approval of packages with only blacklisted license" do
96
- decisions = Decisions.new
97
- .add_package("manual", nil)
98
- .license("manual", "ABC")
99
- .whitelist("ABC")
100
- .approve("manual")
101
- .blacklist("ABC")
102
- decision_applier = described_class.new(decisions: decisions, packages: [])
103
- dep = decision_applier.acknowledged.last
104
- expect(dep).not_to be_approved
105
- end
106
-
107
- it "allows approval of packages if not all licenses are blacklisted" do
108
- decisions = Decisions.new
109
- .add_package("manual", nil)
110
- .license("manual", "ABC")
111
- .license("manual", "DEF")
112
- .whitelist("ABC")
113
- .blacklist("DEF")
114
- decision_applier = described_class.new(decisions: decisions, packages: [])
115
- dep = decision_applier.acknowledged.last
116
- expect(dep).to be_approved
117
- expect(dep).to be_whitelisted
118
-
119
- decisions = Decisions.new
120
- .add_package("manual", nil)
121
- .license("manual", "ABC")
122
- .license("manual", "DEF")
123
- .approve("manual")
124
- .blacklist("DEF")
125
- decision_applier = described_class.new(decisions: decisions, packages: [])
126
- dep = decision_applier.acknowledged.last
127
- expect(dep).to be_approved
128
- expect(dep).to be_approved_manually
129
- end
130
-
131
- it 'does not return an approval for a package without a version if all approvals have an explicit version' do
132
- decisions = Decisions.new
133
- .add_package('spring-boot', nil)
134
- .approve('spring-boot', versions: ['1.3.0.RELEASE'], who: 'Approver', why: 'Because')
135
- decision_applier = described_class.new(decisions: decisions, packages: [])
136
- dep = decision_applier.acknowledged.last
137
- expect(dep).to_not be_approved
138
- end
139
-
140
- it 'does not return an approval if the package has the wrong version' do
141
- decisions = Decisions.new
142
- .add_package('spring-boot', '1.3.1.RELEASE')
143
- .approve('spring-boot', versions: ['1.3.0.RELEASE'], who: 'Approver', why: 'Because')
144
- decision_applier = described_class.new(decisions: decisions, packages: [])
145
- dep = decision_applier.acknowledged.last
146
- expect(dep).to_not be_approved
147
- end
148
-
149
- it 'returns an approval if the requested package has an approved version' do
150
- decisions = Decisions.new
151
- .add_package('spring-boot', '1.3.0.RELEASE')
152
- .approve('spring-boot', versions: ['1.3.0.RELEASE'], who: 'Approver', why: 'Because')
153
- decision_applier = described_class.new(decisions: decisions, packages: [])
154
- dep = decision_applier.acknowledged.last
155
- expect(dep).to be_approved
156
- expect(dep).to be_approved_manually
157
- end
158
-
159
- it 'returns an approval if the requested package has been approved, but no version was specified' do
160
- decisions = Decisions.new
161
- .add_package('spring-boot', '1.3.0.RELEASE')
162
- .approve('spring-boot', versions: [], who: 'Approver', why: 'Because')
163
- decision_applier = described_class.new(decisions: decisions, packages: [])
164
- dep = decision_applier.acknowledged.last
165
- expect(dep).to be_approved
166
- expect(dep).to be_approved_manually
167
- end
168
-
169
- it 'does not return an approval if no dependencies have been approved' do
170
- decisions = Decisions.new
171
- .add_package('spring-boot', '1.3.0.RELEASE')
172
- decision_applier = described_class.new(decisions: decisions, packages: [])
173
- dep = decision_applier.acknowledged.last
174
- expect(dep).to_not be_approved
175
- end
176
- end
177
-
178
- describe '#unapproved' do
179
- it 'returns all acknowledged packages that are not approved' do
180
- packages = [
181
- Package.new('foo', '0.0.1', spec_licenses: ['whitelist']),
182
- Package.new('bar', '0.0.1', spec_licenses: ['blacklist'])
183
- ]
184
- decisions = Decisions.new
185
- .add_package('baz', '0.0.1')
186
- .whitelist('whitelist')
187
- .blacklist('blacklist')
188
- decision_applier = described_class.new(decisions: decisions, packages: packages)
189
-
190
- expect(decision_applier.unapproved.map(&:name)).to include('baz')
191
- expect(decision_applier.unapproved.map(&:name)).to include('bar')
192
- expect(decision_applier.unapproved.map(&:name)).not_to include('foo')
193
- end
194
- end
195
-
196
- describe '#blacklisted' do
197
- it 'returns all packages that have blacklisted licenses' do
198
- decision_applier = described_class.new(
199
- decisions: Decisions.new.blacklist('GPLv3'),
200
- packages: [Package.new('foo', '1.0', spec_licenses: ['GPLv3'])]
201
- )
202
-
203
- expect(decision_applier.blacklisted.map(&:name)).to eq(['foo'])
204
- end
205
-
206
- it 'does not report ignored packages' do
207
- dev_dep = Package.new("dev_dep", nil, spec_licenses: ['GPLv3'], groups: ["development"])
208
- decisions = Decisions.new
209
- .ignore_group("development")
210
- .add_package("manual", nil)
211
- .ignore("manual")
212
- .blacklist('GPLv3')
213
- decision_applier = described_class.new(decisions: decisions, packages: [dev_dep])
214
-
215
- expect(decision_applier.blacklisted).to be_empty
216
- end
217
- end
218
- end
219
- end
@@ -1,408 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module LicenseFinder
4
- describe Decisions do
5
- describe ".add_package" do
6
- it "adds to list of packages" do
7
- packages = subject.add_package("dep", nil).packages
8
- expect(packages.map(&:name)).to eq ["dep"]
9
- end
10
-
11
- it "includes optional version" do
12
- packages = subject.add_package("dep", "0.2.0").packages
13
- expect(packages.first.version).to eq "0.2.0"
14
- end
15
- end
16
-
17
- describe ".remove_package" do
18
- it "drops a package" do
19
- packages = subject
20
- .add_package("dep", nil)
21
- .remove_package("dep")
22
- .packages
23
- expect(packages.size).to eq 0
24
- end
25
-
26
- it "does nothing if package was never added" do
27
- packages = subject
28
- .remove_package("dep")
29
- .packages
30
- expect(packages.size).to eq 0
31
- end
32
- end
33
-
34
- describe ".license" do
35
- it "will report license for a dependency" do
36
- license = subject
37
- .license("dep", "MIT")
38
- .licenses_of("dep")
39
- .first
40
- expect(license).to eq License.find_by_name("MIT")
41
- end
42
-
43
- it "will report multiple licenses" do
44
- licenses = subject
45
- .license("dep", "MIT")
46
- .license("dep", "GPL")
47
- .licenses_of("dep")
48
- expect(licenses).to eq [
49
- License.find_by_name("MIT"),
50
- License.find_by_name("GPL"),
51
- ].to_set
52
- end
53
-
54
- it "adapts names" do
55
- license = subject
56
- .license("dep", "Expat")
57
- .licenses_of("dep")
58
- .first
59
- expect(license).to eq License.find_by_name("MIT")
60
- end
61
- end
62
-
63
- describe ".unlicense" do
64
- it "will not report the given dependency as licensed" do
65
- licenses = subject
66
- .license("dep", "MIT")
67
- .unlicense("dep", "MIT")
68
- .licenses_of("dep")
69
- expect(licenses).to be_empty
70
- end
71
-
72
- it "will only remove the specified license" do
73
- licenses = subject
74
- .license("dep", "MIT")
75
- .license("dep", "GPL")
76
- .unlicense("dep", "MIT")
77
- .licenses_of("dep")
78
- expect(licenses).to eq [License.find_by_name("GPL")].to_set
79
- end
80
-
81
- it "is cumulative" do
82
- license = subject
83
- .license("dep", "MIT")
84
- .unlicense("dep", "MIT")
85
- .license("dep", "MIT")
86
- .licenses_of("dep")
87
- .first
88
- expect(license).to eq License.find_by_name("MIT")
89
- end
90
- end
91
-
92
- describe ".approve" do
93
- it "will report a dependency as approved" do
94
- decisions = subject.approve("dep")
95
- expect(decisions).to be_approved("dep")
96
- end
97
-
98
- it "will not report a dependency as approved by default" do
99
- expect(subject).not_to be_approved("dep")
100
- end
101
- end
102
-
103
- describe ".unapprove" do
104
- it "will not report the given dependency as approved" do
105
- decisions = subject
106
- .approve("dep")
107
- .unapprove("dep")
108
- expect(subject).not_to be_approved("dep")
109
- end
110
-
111
- it "is cumulative" do
112
- decisions = subject
113
- .approve("dep")
114
- .unapprove("dep")
115
- .approve("dep")
116
- expect(subject).to be_approved("dep")
117
- end
118
- end
119
-
120
- describe ".whitelist" do
121
- it "will report the given license as approved" do
122
- decisions = subject.whitelist("MIT")
123
- expect(decisions).to be_whitelisted(License.find_by_name("MIT"))
124
- end
125
-
126
- it "adapts names" do
127
- decisions = subject.whitelist("Expat")
128
- expect(decisions).to be_whitelisted(License.find_by_name("MIT"))
129
- end
130
-
131
- it "adds to list" do
132
- decisions = subject.whitelist("MIT")
133
- expect(decisions.whitelisted).to eq(Set.new([License.find_by_name("MIT")]))
134
- end
135
- end
136
-
137
- describe ".unwhitelist" do
138
- it "will not report the given license as approved" do
139
- decisions = subject
140
- .whitelist("MIT")
141
- .unwhitelist("MIT")
142
- expect(decisions).not_to be_whitelisted(License.find_by_name("MIT"))
143
- end
144
-
145
- it "is cumulative" do
146
- decisions = subject
147
- .whitelist("MIT")
148
- .unwhitelist("MIT")
149
- .whitelist("MIT")
150
- expect(decisions).to be_whitelisted(License.find_by_name("MIT"))
151
- end
152
-
153
- it "adapts names" do
154
- decisions = subject
155
- .whitelist("MIT")
156
- .unwhitelist("Expat")
157
- expect(decisions).not_to be_whitelisted(License.find_by_name("MIT"))
158
- end
159
- end
160
-
161
- describe ".blacklist" do
162
- it "will report the given license as blacklisted" do
163
- decisions = subject.blacklist("MIT")
164
- expect(decisions).to be_blacklisted(License.find_by_name("MIT"))
165
- end
166
-
167
- it "adapts names" do
168
- decisions = subject.blacklist("Expat")
169
- expect(decisions).to be_blacklisted(License.find_by_name("MIT"))
170
- end
171
-
172
- it "adds to list" do
173
- decisions = subject.blacklist("MIT")
174
- expect(decisions.blacklisted).to eq(Set.new([License.find_by_name("MIT")]))
175
- end
176
- end
177
-
178
- describe ".unblacklist" do
179
- it "will not report the given license as blacklisted" do
180
- decisions = subject
181
- .blacklist("MIT")
182
- .unblacklist("MIT")
183
- expect(decisions).not_to be_blacklisted(License.find_by_name("MIT"))
184
- end
185
-
186
- it "is cumulative" do
187
- decisions = subject
188
- .blacklist("MIT")
189
- .unblacklist("MIT")
190
- .blacklist("MIT")
191
- expect(decisions).to be_blacklisted(License.find_by_name("MIT"))
192
- end
193
-
194
- it "adapts names" do
195
- decisions = subject
196
- .blacklist("MIT")
197
- .unblacklist("Expat")
198
- expect(decisions).not_to be_blacklisted(License.find_by_name("MIT"))
199
- end
200
- end
201
-
202
- describe ".ignore" do
203
- it "will report ignored dependencies" do
204
- decisions = subject.ignore("dep")
205
- expect(decisions).to be_ignored("dep")
206
- end
207
- end
208
-
209
- describe ".heed" do
210
- it "will not report heeded dependencies" do
211
- decisions = subject
212
- .ignore("dep")
213
- .heed("dep")
214
- expect(decisions).not_to be_ignored("dep")
215
- end
216
-
217
- it "is cumulative" do
218
- decisions = subject
219
- .ignore("dep")
220
- .heed("dep")
221
- .ignore("dep")
222
- expect(decisions).to be_ignored("dep")
223
- end
224
- end
225
-
226
- describe ".ignore_group" do
227
- it "will report ignored groups" do
228
- decisions = subject.ignore_group("development")
229
- expect(decisions).to be_ignored_group("development")
230
- end
231
- end
232
-
233
- describe ".heed_group" do
234
- it "will not report heeded groups" do
235
- decisions = subject
236
- .ignore_group("development")
237
- .heed_group("development")
238
- expect(decisions).not_to be_ignored_group("development")
239
- end
240
-
241
- it "is cumulative" do
242
- decisions = subject
243
- .ignore_group("development")
244
- .heed_group("development")
245
- .ignore_group("development")
246
- expect(decisions).to be_ignored_group("development")
247
- end
248
- end
249
-
250
- describe ".name_project" do
251
- it "reports project name" do
252
- decisions = subject.name_project("proj")
253
- expect(decisions.project_name).to eq "proj"
254
- end
255
- end
256
-
257
- describe ".unname_project" do
258
- it "reports project name" do
259
- decisions = subject
260
- .name_project("proj")
261
- .unname_project
262
- expect(decisions.project_name).to be_nil
263
- end
264
- end
265
-
266
- describe "persistence" do
267
- def roundtrip(decisions)
268
- described_class.restore(decisions.persist)
269
- end
270
-
271
- it "can restore added packages" do
272
- decisions = roundtrip(
273
- subject.add_package("dep", "0.2.0")
274
- )
275
- packages = decisions.packages
276
- expect(packages.map(&:name)).to eq ["dep"]
277
- end
278
-
279
- it "can restore removed packages" do
280
- decisions = roundtrip(
281
- subject
282
- .add_package("dep", nil)
283
- .remove_package("dep")
284
- )
285
- expect(decisions.packages.size).to eq 0
286
- end
287
-
288
- it "can restore licenses" do
289
- license = roundtrip(
290
- subject.license("dep", "MIT")
291
- ).licenses_of("dep").first
292
- expect(license).to eq License.find_by_name("MIT")
293
- end
294
-
295
- it "can restore unlicenses" do
296
- licenses = roundtrip(
297
- subject
298
- .license("dep", "MIT")
299
- .license("dep", "GPL")
300
- .unlicense("dep", "MIT")
301
- ).licenses_of("dep")
302
- expect(licenses).to eq [License.find_by_name("GPL")].to_set
303
- end
304
-
305
- it "can restore approvals" do
306
- time = Time.now.getutc
307
- decisions = roundtrip(subject.approve("dep", who: "Somebody", why: "Some reason", when: time))
308
- expect(decisions).to be_approved("dep")
309
- approval = decisions.approval_of("dep")
310
- expect(approval.who).to eq "Somebody"
311
- expect(approval.why).to eq "Some reason"
312
- expect(approval.safe_when).to eq time
313
- end
314
-
315
- it "can restore unapprovals" do
316
- decisions = roundtrip(
317
- subject
318
- .approve("dep")
319
- .unapprove("dep")
320
- )
321
- expect(decisions).not_to be_approved("dep")
322
- end
323
-
324
- it "can restore whitelists" do
325
- decisions = roundtrip(
326
- subject.whitelist("MIT")
327
- )
328
- expect(decisions).to be_whitelisted(License.find_by_name("MIT"))
329
- end
330
-
331
- it "can restore un-whitelists" do
332
- decisions = roundtrip(
333
- subject
334
- .whitelist("MIT")
335
- .unwhitelist("MIT")
336
- )
337
- expect(decisions).not_to be_whitelisted(License.find_by_name("MIT"))
338
- end
339
-
340
- it "can restore blacklists" do
341
- decisions = roundtrip(
342
- subject.blacklist("MIT")
343
- )
344
- expect(decisions).to be_blacklisted(License.find_by_name("MIT"))
345
- end
346
-
347
- it "can restore un-blacklists" do
348
- decisions = roundtrip(
349
- subject
350
- .blacklist("MIT")
351
- .unblacklist("MIT")
352
- )
353
- expect(decisions).not_to be_blacklisted(License.find_by_name("MIT"))
354
- end
355
-
356
- it "can restore ignorals" do
357
- decisions = roundtrip(subject.ignore("dep"))
358
- expect(decisions).to be_ignored("dep")
359
- end
360
-
361
- it "can restore heeds" do
362
- decisions = roundtrip(
363
- subject
364
- .ignore("dep")
365
- .heed("dep")
366
- )
367
- expect(decisions).not_to be_ignored("dep")
368
- end
369
-
370
- it "can restore ignored groups" do
371
- decisions = roundtrip(
372
- subject.ignore_group("development")
373
- )
374
- expect(decisions).to be_ignored_group("development")
375
- end
376
-
377
- it "can restore heeded groups" do
378
- decisions = roundtrip(
379
- subject
380
- .ignore_group("development")
381
- .heed_group("development")
382
- )
383
- expect(decisions).not_to be_ignored_group("development")
384
- end
385
-
386
- it "can restore project names" do
387
- decisions = roundtrip(
388
- subject.name_project("an-app")
389
- )
390
- expect(decisions.project_name).to eq "an-app"
391
- end
392
-
393
- it "can restore project unnames" do
394
- decisions = roundtrip(
395
- subject
396
- .name_project("an-app")
397
- .unname_project
398
- )
399
- expect(decisions.project_name).to be_nil
400
- end
401
-
402
- it "ignores empty or missing persisted decisions" do
403
- described_class.restore('')
404
- described_class.restore(nil)
405
- end
406
- end
407
- end
408
- end