summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormo khan <mo.khan@gmail.com>2020-04-12 10:01:50 -0600
committermo khan <mo.khan@gmail.com>2020-04-12 10:01:50 -0600
commit296201db71b8dfd84de06bdd5a5d5c8383ddeb24 (patch)
tree99a44755280025f9124840e980913447bec9d87f
parentb5f0dba189a5ad196922f4c3e546cf82c28c209c (diff)
Start to move nuget license lookup to separate plugin class
-rw-r--r--lib/spandx/cli/commands/scan.rb4
-rw-r--r--lib/spandx/core/dependency.rb17
-rw-r--r--lib/spandx/core/plugin.rb (renamed from lib/spandx/core/extension.rb)18
-rw-r--r--lib/spandx/dotnet/license_plugin.rb56
-rw-r--r--spec/unit/core/dependency_spec.rb256
-rw-r--r--spec/unit/dotnet/license_plugin_spec.rb29
6 files changed, 233 insertions, 147 deletions
diff --git a/lib/spandx/cli/commands/scan.rb b/lib/spandx/cli/commands/scan.rb
index e924498..6fb0c4b 100644
--- a/lib/spandx/cli/commands/scan.rb
+++ b/lib/spandx/cli/commands/scan.rb
@@ -51,9 +51,7 @@ module Spandx
end
def enhance(dependency)
- ::Spandx::Core::Extension
- .for(dependency)
- .enhance(dependency)
+ ::Spandx::Core::Plugin.map { |plugin| plugin.enhance(dependency) }
end
end
end
diff --git a/lib/spandx/core/dependency.rb b/lib/spandx/core/dependency.rb
index 1c46a85..b7a0a84 100644
--- a/lib/spandx/core/dependency.rb
+++ b/lib/spandx/core/dependency.rb
@@ -10,21 +10,26 @@ module Spandx
rubygems: ::Spandx::Ruby::Gateway,
}.freeze
- attr_reader :package_manager, :name, :version, :meta
+ attr_reader :package_manager, :name, :version, :licenses, :meta
- def initialize(package_manager:, name:, version:, meta: {})
+ def initialize(package_manager:, name:, version:, licenses: [], meta: {})
@package_manager = package_manager
@name = name
@version = version
@meta = meta
+ @licenses = []
end
- def licenses(catalogue: Spdx::Catalogue.from_git)
- Spdx::GatewayAdapter
- .new(catalogue: catalogue, gateway: combine(cache_for(package_manager), gateway_for(package_manager)))
- .licenses_for(name, version)
+ def managed_by?(value)
+ package_manager == value&.to_sym
end
+ #def licenses(catalogue: Spdx::Catalogue.from_git)
+ #Spdx::GatewayAdapter
+ #.new(catalogue: catalogue, gateway: combine(cache_for(package_manager), gateway_for(package_manager)))
+ #.licenses_for(name, version)
+ #end
+
def <=>(other)
[name, version] <=> [other.name, other.version]
end
diff --git a/lib/spandx/core/extension.rb b/lib/spandx/core/plugin.rb
index e6fa12b..2dfbcdc 100644
--- a/lib/spandx/core/extension.rb
+++ b/lib/spandx/core/plugin.rb
@@ -2,19 +2,13 @@
module Spandx
module Core
- class Extension
- UNKNOWN = Class.new do
- def self.enhance(x)
- x
- end
- end
-
+ class Plugin
class << self
include Enumerable
def each(&block)
registry.each do |x|
- block.call(x)
+ block.call(x.new)
end
end
@@ -25,14 +19,6 @@ module Spandx
def registry
@registry ||= []
end
-
- def for(dependency)
- result = ::Spandx::Core::Extension.find do |x|
- x.extends?(x)
- end
-
- result&.new || UNKNOWN
- end
end
end
end
diff --git a/lib/spandx/dotnet/license_plugin.rb b/lib/spandx/dotnet/license_plugin.rb
new file mode 100644
index 0000000..6a48bf5
--- /dev/null
+++ b/lib/spandx/dotnet/license_plugin.rb
@@ -0,0 +1,56 @@
+# frozen_string_literal: true
+
+module Spandx
+ module Dotnet
+ class LicensePlugin < Spandx::Core::Plugin
+ GATEWAYS = {
+ composer: ::Spandx::Php::PackagistGateway,
+ maven: ::Spandx::Java::Gateway,
+ nuget: ::Spandx::Dotnet::NugetGateway,
+ rubygems: ::Spandx::Ruby::Gateway,
+ }.freeze
+
+ def initialize(catalogue: Spdx::Catalogue.from_git)
+ @catalogue = catalogue
+ end
+
+ def enhance(dependency)
+ return dependency unless dependency.managed_by?(:nuget)
+
+ licenses_for(dependency).each do |license|
+ dependency.licenses << license
+ end
+ dependency
+ end
+
+ private
+
+ attr_reader :catalogue
+
+ def licenses_for(dependency)
+ Spdx::GatewayAdapter
+ .new(catalogue: catalogue, gateway: combine(cache_for(dependency.package_manager), gateway_for(dependency.package_manager)))
+ .licenses_for(dependency.name, dependency.version)
+ end
+
+ def combine(gateway, other_gateway)
+ ::Spandx::Core::CompositeGateway.new(gateway, other_gateway)
+ end
+
+ def gateway_for(package_manager)
+ case package_manager
+ when :yarn, :npm
+ js_gateway
+ when :pypi
+ python_gateway
+ else
+ GATEWAYS.fetch(package_manager, ::Spandx::Core::NullGateway).new
+ end
+ end
+
+ def cache_for(package_manager)
+ ::Spandx::Core::Cache.new(package_manager, url: package_manager == :rubygems ? 'https://github.com/mokhan/spandx-rubygems.git' : 'https://github.com/mokhan/spandx-index.git')
+ end
+ end
+ end
+end
diff --git a/spec/unit/core/dependency_spec.rb b/spec/unit/core/dependency_spec.rb
index 38b13be..3a1f0c9 100644
--- a/spec/unit/core/dependency_spec.rb
+++ b/spec/unit/core/dependency_spec.rb
@@ -1,131 +1,143 @@
# frozen_string_literal: true
RSpec.describe Spandx::Core::Dependency do
- [
- { package_manager: :composer, name: 'doctrine/instantiator', version: '1.3.0', expected: ['MIT'] },
- { package_manager: :composer, name: 'hamcrest/hamcrest-php', version: 'v2.0.0', expected: ['Nonstandard'] },
- { package_manager: :composer, name: 'mockery/mockery', version: '1.3.1', expected: ['BSD-3-Clause'] },
- { package_manager: :composer, name: 'phpdocumentor/reflection-common', version: '2.0.0', expected: ['MIT'] },
- { package_manager: :composer, name: 'phpdocumentor/type-resolver', version: '1.0.1', expected: ['MIT'] },
- { package_manager: :composer, name: 'symfony/polyfill-ctype', version: 'v1.14.0', expected: ['MIT'] },
- { package_manager: :composer, name: 'webmozart/assert', version: '1.7.0', expected: ['MIT'] },
- { package_manager: :maven, name: 'junit:junit', version: '3.8.1', expected: ['CPL-1.0'] },
- { package_manager: :npm, name: 'accepts', version: '1.3.7', expected: ['MIT'] },
- { package_manager: :npm, name: 'array-flatten', version: '1.1.1', expected: ['MIT'] },
- { package_manager: :npm, name: 'body-parser', version: '1.19.0', expected: ['MIT'] },
- { package_manager: :npm, name: 'bytes', version: '3.1.0', expected: ['MIT'] },
- { package_manager: :npm, name: 'content-disposition', version: '0.5.3', expected: ['MIT'] },
- { package_manager: :npm, name: 'content-type', version: '1.0.4', expected: ['MIT'] },
- { package_manager: :npm, name: 'cookie', version: '0.4.0', expected: ['MIT'] },
- { package_manager: :npm, name: 'cookie-signature', version: '1.0.6', expected: ['MIT'] },
- { package_manager: :npm, name: 'debug', version: '2.6.9', expected: ['MIT'] },
- { package_manager: :npm, name: 'depd', version: '1.1.2', expected: ['MIT'] },
- { package_manager: :npm, name: 'destroy', version: '1.0.4', expected: ['MIT'] },
- { package_manager: :npm, name: 'ee-first', version: '1.1.1', expected: ['MIT'] },
- { package_manager: :npm, name: 'encodeurl', version: '1.0.2', expected: ['MIT'] },
- { package_manager: :npm, name: 'escape-html', version: '1.0.3', expected: ['MIT'] },
- { package_manager: :npm, name: 'etag', version: '1.8.1', expected: ['MIT'] },
- { package_manager: :npm, name: 'express', version: '4.17.1', expected: ['MIT'] },
- { package_manager: :npm, name: 'finalhandler', version: '1.1.2', expected: ['MIT'] },
- { package_manager: :npm, name: 'forwarded', version: '0.1.2', expected: ['MIT'] },
- { package_manager: :npm, name: 'fresh', version: '0.5.2', expected: ['MIT'] },
- { package_manager: :npm, name: 'http-errors', version: '1.7.2', expected: ['MIT'] },
- { package_manager: :npm, name: 'iconv-lite', version: '0.4.24', expected: ['MIT'] },
- { package_manager: :npm, name: 'inherits', version: '2.0.3', expected: ['ISC'] },
- { package_manager: :npm, name: 'ipaddr.js', version: '1.9.1', expected: ['MIT'] },
- { package_manager: :npm, name: 'jquery', version: '3.4.0', expected: ['MIT'] },
- { package_manager: :npm, name: 'media-typer', version: '0.3.0', expected: ['MIT'] },
- { package_manager: :npm, name: 'merge-descriptors', version: '1.0.1', expected: ['MIT'] },
- { package_manager: :npm, name: 'methods', version: '1.1.2', expected: ['MIT'] },
- { package_manager: :npm, name: 'mime', version: '1.6.0', expected: ['MIT'] },
- { package_manager: :npm, name: 'mime-db', version: '1.43.0', expected: ['MIT'] },
- { package_manager: :npm, name: 'mime-types', version: '2.1.26', expected: ['MIT'] },
- { package_manager: :npm, name: 'ms', version: '2.0.0', expected: ['MIT'] },
- { package_manager: :npm, name: 'negotiator', version: '0.6.2', expected: ['MIT'] },
- { package_manager: :npm, name: 'on-finished', version: '2.3.0', expected: ['MIT'] },
- { package_manager: :npm, name: 'parseurl', version: '1.3.3', expected: ['MIT'] },
- { package_manager: :npm, name: 'path-to-regexp', version: '0.1.7', expected: ['MIT'] },
- { package_manager: :npm, name: 'proxy-addr', version: '2.0.6', expected: ['MIT'] },
- { package_manager: :npm, name: 'qs', version: '6.7.0', expected: ['BSD-3-Clause'] },
- { package_manager: :npm, name: 'range-parser', version: '1.2.1', expected: ['MIT'] },
- { package_manager: :npm, name: 'raw-body', version: '2.4.0', expected: ['MIT'] },
- { package_manager: :npm, name: 'safe-buffer', version: '5.1.2', expected: ['MIT'] },
- { package_manager: :npm, name: 'safer-buffer', version: '2.1.2', expected: ['MIT'] },
- { package_manager: :npm, name: 'send', version: '0.17.1', expected: ['MIT'] },
- { package_manager: :npm, name: 'serve-static', version: '1.14.1', expected: ['MIT'] },
- { package_manager: :npm, name: 'setprototypeof', version: '1.1.1', expected: ['ISC'] },
- { package_manager: :npm, name: 'statuses', version: '1.5.0', expected: ['MIT'] },
- { package_manager: :npm, name: 'toidentifier', version: '1.0.0', expected: ['MIT'] },
- { package_manager: :npm, name: 'type-is', version: '1.6.18', expected: ['MIT'] },
- { package_manager: :npm, name: 'unpipe', version: '1.0.0', expected: ['MIT'] },
- { package_manager: :npm, name: 'utils-merge', version: '1.0.1', expected: ['MIT'] },
- { package_manager: :npm, name: 'vary', version: '1.1.2', expected: ['MIT'] },
- { package_manager: :nuget, name: 'NHibernate', version: '5.2.6', expected: ['LGPL-2.1-only'] },
- { package_manager: :nuget, name: 'System.Security.Principal.Windows', version: '4.3.0', expected: ['Nonstandard'] },
- { package_manager: :nuget, name: 'jive', version: '0.1.0', expected: ['MIT'] },
- { package_manager: :pypi, name: 'six', version: '1.14.0', expected: ['MIT'] },
- { package_manager: :rubygems, name: 'spandx', version: '0.1.0', expected: ['MIT'] },
- { package_manager: :yarn, name: 'accepts', version: '1.3.7', expected: ['MIT'] },
- { package_manager: :yarn, name: 'array-flatten', version: '1.1.1', expected: ['MIT'] },
- { package_manager: :yarn, name: 'body-parser', version: '1.19.0', expected: ['MIT'] },
- { package_manager: :yarn, name: 'bytes', version: '3.1.0', expected: ['MIT'] },
- { package_manager: :yarn, name: 'content-disposition', version: '0.5.3', expected: ['MIT'] },
- { package_manager: :yarn, name: 'content-type', version: '1.0.4', expected: ['MIT'] },
- { package_manager: :yarn, name: 'cookie', version: '0.4.0', expected: ['MIT'] },
- { package_manager: :yarn, name: 'cookie-signature', version: '1.0.6', expected: ['MIT'] },
- { package_manager: :yarn, name: 'debug', version: '2.6.9', expected: ['MIT'] },
- { package_manager: :yarn, name: 'depd', version: '1.1.2', expected: ['MIT'] },
- { package_manager: :yarn, name: 'destroy', version: '1.0.4', expected: ['MIT'] },
- { package_manager: :yarn, name: 'ee-first', version: '1.1.1', expected: ['MIT'] },
- { package_manager: :yarn, name: 'encodeurl', version: '1.0.2', expected: ['MIT'] },
- { package_manager: :yarn, name: 'escape-html', version: '1.0.3', expected: ['MIT'] },
- { package_manager: :yarn, name: 'etag', version: '1.8.1', expected: ['MIT'] },
- { package_manager: :yarn, name: 'express', version: '4.17.1', expected: ['MIT'] },
- { package_manager: :yarn, name: 'finalhandler', version: '1.1.2', expected: ['MIT'] },
- { package_manager: :yarn, name: 'forwarded', version: '0.1.2', expected: ['MIT'] },
- { package_manager: :yarn, name: 'fresh', version: '0.5.2', expected: ['MIT'] },
- { package_manager: :yarn, name: 'http-errors', version: '1.7.2', expected: ['MIT'] },
- { package_manager: :yarn, name: 'iconv-lite', version: '0.4.24', expected: ['MIT'] },
- { package_manager: :yarn, name: 'inherits', version: '2.0.3', expected: ['ISC'] },
- { package_manager: :yarn, name: 'ipaddr.js', version: '1.9.1', expected: ['MIT'] },
- { package_manager: :yarn, name: 'jquery', version: '3.4.0', expected: ['MIT'] },
- { package_manager: :yarn, name: 'media-typer', version: '0.3.0', expected: ['MIT'] },
- { package_manager: :yarn, name: 'merge-descriptors', version: '1.0.1', expected: ['MIT'] },
- { package_manager: :yarn, name: 'methods', version: '1.1.2', expected: ['MIT'] },
- { package_manager: :yarn, name: 'mime', version: '1.6.0', expected: ['MIT'] },
- { package_manager: :yarn, name: 'mime-db', version: '1.43.0', expected: ['MIT'] },
- { package_manager: :yarn, name: 'mime-types', version: '2.1.26', expected: ['MIT'] },
- { package_manager: :yarn, name: 'ms', version: '2.0.0', expected: ['MIT'] },
- { package_manager: :yarn, name: 'negotiator', version: '0.6.2', expected: ['MIT'] },
- { package_manager: :yarn, name: 'on-finished', version: '2.3.0', expected: ['MIT'] },
- { package_manager: :yarn, name: 'parseurl', version: '1.3.3', expected: ['MIT'] },
- { package_manager: :yarn, name: 'path-to-regexp', version: '0.1.7', expected: ['MIT'] },
- { package_manager: :yarn, name: 'proxy-addr', version: '2.0.6', expected: ['MIT'] },
- { package_manager: :yarn, name: 'qs', version: '6.7.0', expected: ['BSD-3-Clause'] },
- { package_manager: :yarn, name: 'range-parser', version: '1.2.1', expected: ['MIT'] },
- { package_manager: :yarn, name: 'raw-body', version: '2.4.0', expected: ['MIT'] },
- { package_manager: :yarn, name: 'safe-buffer', version: '5.1.2', expected: ['MIT'] },
- { package_manager: :yarn, name: 'safer-buffer', version: '2.1.2', expected: ['MIT'] },
- { package_manager: :yarn, name: 'send', version: '0.17.1', expected: ['MIT'] },
- { package_manager: :yarn, name: 'serve-static', version: '1.14.1', expected: ['MIT'] },
- { package_manager: :yarn, name: 'setprototypeof', version: '1.1.1', expected: ['ISC'] },
- { package_manager: :yarn, name: 'statuses', version: '1.5.0', expected: ['MIT'] },
- { package_manager: :yarn, name: 'toidentifier', version: '1.0.0', expected: ['MIT'] },
- { package_manager: :yarn, name: 'type-is', version: '1.6.18', expected: ['MIT'] },
- { package_manager: :yarn, name: 'unpipe', version: '1.0.0', expected: ['MIT'] },
- { package_manager: :yarn, name: 'utils-merge', version: '1.0.1', expected: ['MIT'] },
- { package_manager: :yarn, name: 'vary', version: '1.1.2', expected: ['MIT'] },
- ].each do |item|
- context "#{item[:package_manager]}-#{item[:name]}-#{item[:version]}" do
- subject { described_class.new(package_manager: item[:package_manager], name: item[:name], version: item[:version]) }
+ describe "#licenses" do
+ [
+ { package_manager: :composer, name: 'doctrine/instantiator', version: '1.3.0', expected: ['MIT'] },
+ { package_manager: :composer, name: 'hamcrest/hamcrest-php', version: 'v2.0.0', expected: ['Nonstandard'] },
+ { package_manager: :composer, name: 'mockery/mockery', version: '1.3.1', expected: ['BSD-3-Clause'] },
+ { package_manager: :composer, name: 'phpdocumentor/reflection-common', version: '2.0.0', expected: ['MIT'] },
+ { package_manager: :composer, name: 'phpdocumentor/type-resolver', version: '1.0.1', expected: ['MIT'] },
+ { package_manager: :composer, name: 'symfony/polyfill-ctype', version: 'v1.14.0', expected: ['MIT'] },
+ { package_manager: :composer, name: 'webmozart/assert', version: '1.7.0', expected: ['MIT'] },
+ { package_manager: :maven, name: 'junit:junit', version: '3.8.1', expected: ['CPL-1.0'] },
+ { package_manager: :npm, name: 'accepts', version: '1.3.7', expected: ['MIT'] },
+ { package_manager: :npm, name: 'array-flatten', version: '1.1.1', expected: ['MIT'] },
+ { package_manager: :npm, name: 'body-parser', version: '1.19.0', expected: ['MIT'] },
+ { package_manager: :npm, name: 'bytes', version: '3.1.0', expected: ['MIT'] },
+ { package_manager: :npm, name: 'content-disposition', version: '0.5.3', expected: ['MIT'] },
+ { package_manager: :npm, name: 'content-type', version: '1.0.4', expected: ['MIT'] },
+ { package_manager: :npm, name: 'cookie', version: '0.4.0', expected: ['MIT'] },
+ { package_manager: :npm, name: 'cookie-signature', version: '1.0.6', expected: ['MIT'] },
+ { package_manager: :npm, name: 'debug', version: '2.6.9', expected: ['MIT'] },
+ { package_manager: :npm, name: 'depd', version: '1.1.2', expected: ['MIT'] },
+ { package_manager: :npm, name: 'destroy', version: '1.0.4', expected: ['MIT'] },
+ { package_manager: :npm, name: 'ee-first', version: '1.1.1', expected: ['MIT'] },
+ { package_manager: :npm, name: 'encodeurl', version: '1.0.2', expected: ['MIT'] },
+ { package_manager: :npm, name: 'escape-html', version: '1.0.3', expected: ['MIT'] },
+ { package_manager: :npm, name: 'etag', version: '1.8.1', expected: ['MIT'] },
+ { package_manager: :npm, name: 'express', version: '4.17.1', expected: ['MIT'] },
+ { package_manager: :npm, name: 'finalhandler', version: '1.1.2', expected: ['MIT'] },
+ { package_manager: :npm, name: 'forwarded', version: '0.1.2', expected: ['MIT'] },
+ { package_manager: :npm, name: 'fresh', version: '0.5.2', expected: ['MIT'] },
+ { package_manager: :npm, name: 'http-errors', version: '1.7.2', expected: ['MIT'] },
+ { package_manager: :npm, name: 'iconv-lite', version: '0.4.24', expected: ['MIT'] },
+ { package_manager: :npm, name: 'inherits', version: '2.0.3', expected: ['ISC'] },
+ { package_manager: :npm, name: 'ipaddr.js', version: '1.9.1', expected: ['MIT'] },
+ { package_manager: :npm, name: 'jquery', version: '3.4.0', expected: ['MIT'] },
+ { package_manager: :npm, name: 'media-typer', version: '0.3.0', expected: ['MIT'] },
+ { package_manager: :npm, name: 'merge-descriptors', version: '1.0.1', expected: ['MIT'] },
+ { package_manager: :npm, name: 'methods', version: '1.1.2', expected: ['MIT'] },
+ { package_manager: :npm, name: 'mime', version: '1.6.0', expected: ['MIT'] },
+ { package_manager: :npm, name: 'mime-db', version: '1.43.0', expected: ['MIT'] },
+ { package_manager: :npm, name: 'mime-types', version: '2.1.26', expected: ['MIT'] },
+ { package_manager: :npm, name: 'ms', version: '2.0.0', expected: ['MIT'] },
+ { package_manager: :npm, name: 'negotiator', version: '0.6.2', expected: ['MIT'] },
+ { package_manager: :npm, name: 'on-finished', version: '2.3.0', expected: ['MIT'] },
+ { package_manager: :npm, name: 'parseurl', version: '1.3.3', expected: ['MIT'] },
+ { package_manager: :npm, name: 'path-to-regexp', version: '0.1.7', expected: ['MIT'] },
+ { package_manager: :npm, name: 'proxy-addr', version: '2.0.6', expected: ['MIT'] },
+ { package_manager: :npm, name: 'qs', version: '6.7.0', expected: ['BSD-3-Clause'] },
+ { package_manager: :npm, name: 'range-parser', version: '1.2.1', expected: ['MIT'] },
+ { package_manager: :npm, name: 'raw-body', version: '2.4.0', expected: ['MIT'] },
+ { package_manager: :npm, name: 'safe-buffer', version: '5.1.2', expected: ['MIT'] },
+ { package_manager: :npm, name: 'safer-buffer', version: '2.1.2', expected: ['MIT'] },
+ { package_manager: :npm, name: 'send', version: '0.17.1', expected: ['MIT'] },
+ { package_manager: :npm, name: 'serve-static', version: '1.14.1', expected: ['MIT'] },
+ { package_manager: :npm, name: 'setprototypeof', version: '1.1.1', expected: ['ISC'] },
+ { package_manager: :npm, name: 'statuses', version: '1.5.0', expected: ['MIT'] },
+ { package_manager: :npm, name: 'toidentifier', version: '1.0.0', expected: ['MIT'] },
+ { package_manager: :npm, name: 'type-is', version: '1.6.18', expected: ['MIT'] },
+ { package_manager: :npm, name: 'unpipe', version: '1.0.0', expected: ['MIT'] },
+ { package_manager: :npm, name: 'utils-merge', version: '1.0.1', expected: ['MIT'] },
+ { package_manager: :npm, name: 'vary', version: '1.1.2', expected: ['MIT'] },
+ { package_manager: :nuget, name: 'NHibernate', version: '5.2.6', expected: ['LGPL-2.1-only'] },
+ { package_manager: :nuget, name: 'System.Security.Principal.Windows', version: '4.3.0', expected: ['Nonstandard'] },
+ { package_manager: :nuget, name: 'jive', version: '0.1.0', expected: ['MIT'] },
+ { package_manager: :pypi, name: 'six', version: '1.14.0', expected: ['MIT'] },
+ { package_manager: :rubygems, name: 'spandx', version: '0.1.0', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'accepts', version: '1.3.7', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'array-flatten', version: '1.1.1', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'body-parser', version: '1.19.0', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'bytes', version: '3.1.0', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'content-disposition', version: '0.5.3', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'content-type', version: '1.0.4', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'cookie', version: '0.4.0', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'cookie-signature', version: '1.0.6', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'debug', version: '2.6.9', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'depd', version: '1.1.2', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'destroy', version: '1.0.4', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'ee-first', version: '1.1.1', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'encodeurl', version: '1.0.2', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'escape-html', version: '1.0.3', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'etag', version: '1.8.1', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'express', version: '4.17.1', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'finalhandler', version: '1.1.2', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'forwarded', version: '0.1.2', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'fresh', version: '0.5.2', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'http-errors', version: '1.7.2', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'iconv-lite', version: '0.4.24', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'inherits', version: '2.0.3', expected: ['ISC'] },
+ { package_manager: :yarn, name: 'ipaddr.js', version: '1.9.1', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'jquery', version: '3.4.0', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'media-typer', version: '0.3.0', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'merge-descriptors', version: '1.0.1', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'methods', version: '1.1.2', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'mime', version: '1.6.0', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'mime-db', version: '1.43.0', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'mime-types', version: '2.1.26', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'ms', version: '2.0.0', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'negotiator', version: '0.6.2', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'on-finished', version: '2.3.0', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'parseurl', version: '1.3.3', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'path-to-regexp', version: '0.1.7', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'proxy-addr', version: '2.0.6', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'qs', version: '6.7.0', expected: ['BSD-3-Clause'] },
+ { package_manager: :yarn, name: 'range-parser', version: '1.2.1', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'raw-body', version: '2.4.0', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'safe-buffer', version: '5.1.2', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'safer-buffer', version: '2.1.2', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'send', version: '0.17.1', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'serve-static', version: '1.14.1', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'setprototypeof', version: '1.1.1', expected: ['ISC'] },
+ { package_manager: :yarn, name: 'statuses', version: '1.5.0', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'toidentifier', version: '1.0.0', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'type-is', version: '1.6.18', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'unpipe', version: '1.0.0', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'utils-merge', version: '1.0.1', expected: ['MIT'] },
+ { package_manager: :yarn, name: 'vary', version: '1.1.2', expected: ['MIT'] },
+ ].each do |item|
+ context "#{item[:package_manager]}-#{item[:name]}-#{item[:version]}" do
+ subject { described_class.new(package_manager: item[:package_manager], name: item[:name], version: item[:version]) }
- let(:results) do
- VCR.use_cassette("#{item[:package_manager]}-#{item[:name]}-#{item[:version]}") do
- subject.licenses
+ let(:results) do
+ VCR.use_cassette("#{item[:package_manager]}-#{item[:name]}-#{item[:version]}") do
+ subject.licenses
+ end
end
- end
- it { expect(results.map(&:id)).to match_array(item[:expected]) }
+ it { expect(results.map(&:id)).to match_array(item[:expected]) }
+ end
end
end
+
+ describe "#managed_by?" do
+ subject { described_class.new(package_manager: :nuget, name: 'jive', version: '0.1.0') }
+
+ specify { expect(subject).to be_managed_by(:nuget) }
+ specify { expect(subject).to be_managed_by('nuget') }
+ specify { expect(subject).not_to be_managed_by('rubygems') }
+ specify { expect(subject).not_to be_managed_by(nil) }
+ specify { expect(subject).not_to be_managed_by(:rubygems) }
+ end
end
diff --git a/spec/unit/dotnet/license_plugin_spec.rb b/spec/unit/dotnet/license_plugin_spec.rb
new file mode 100644
index 0000000..fb4e73a
--- /dev/null
+++ b/spec/unit/dotnet/license_plugin_spec.rb
@@ -0,0 +1,29 @@
+RSpec.describe Spandx::Dotnet::LicensePlugin do
+ subject { described_class.new }
+
+ describe "#enhance" do
+ context "when the dependency is not managed by the `nuget` package manager" do
+ let(:dependency) { ::Spandx::Core::Dependency.new(package_manager: :rubygems, name: 'jive', version: '0.1.0') }
+
+ specify { expect(subject.enhance(dependency)).to eql(dependency) }
+ end
+
+ [
+ { package_manager: :nuget, name: 'NHibernate', version: '5.2.6', expected: ['LGPL-2.1-only'] },
+ { package_manager: :nuget, name: 'System.Security.Principal.Windows', version: '4.3.0', expected: ['Nonstandard'] },
+ { package_manager: :nuget, name: 'jive', version: '0.1.0', expected: ['MIT'] },
+ ].each do |item|
+ context "#{item[:package_manager]}-#{item[:name]}-#{item[:version]}" do
+ let(:dependency) { ::Spandx::Core::Dependency.new(package_manager: item[:package_manager], name: item[:name], version: item[:version]) }
+
+ let(:results) do
+ VCR.use_cassette("#{item[:package_manager]}-#{item[:name]}-#{item[:version]}") do
+ subject.enhance(dependency).licenses
+ end
+ end
+
+ specify { expect(results.map(&:id)).to match_array(item[:expected]) }
+ end
+ end
+ end
+end