import io
import unittest
from os import path
from src.advisor.manifester.dependency import Dependency
from src.advisor.manifester.manifester import Manifester
class TestManifester(unittest.TestCase):
def test_initialization_loads_rules_correctly(self):
manifester = Manifester()
self.assertGreater(len(manifester._supported_files), 0)
self.assertTrue("requirements.txt" in manifester._supported_files)
self.assertTrue("pom.xml" in manifester._supported_files)
self.assertTrue("go.mod" in manifester._supported_files)
def test_get_dependencies_for_pip_returns_array_of_dependencies(self):
manifester = Manifester()
io_object = io.StringIO('''
SciPy == 1.7.2
Jinja2==3.1.2''')
dependencies = manifester.get_dependencies('requirements.txt', io_object)
self.assertEqual(2, len(dependencies))
self.assertEqual('Jinja2', dependencies[1].name)
self.assertEqual('3.1.2', dependencies[1].version)
self.assertEqual('requirements.txt', dependencies[1].filename)
self.assertEqual('pip', dependencies[1].tool)
self.assertEqual(3, dependencies[1].lineno)
self.assertEqual('3.1.2', dependencies[1].installed_version)
def test_get_dependencies_for_maven_returns_array_of_dependencies(self):
manifester = Manifester()
io_object = io.StringIO(r'''
my-test1
1.0
1.1.3
org.xerial.snappy
snappy-java
${snappy.version}
''')
dependencies = manifester.get_dependencies('pom.xml', io_object)
self.assertEqual(1, len(dependencies))
self.assertEqual('snappy-java', dependencies[0].name)
self.assertEqual('1.1.3', dependencies[0].version)
self.assertEqual('pom.xml', dependencies[0].filename)
self.assertEqual('maven', dependencies[0].tool)
def test_get_dependencies_for_go_returns_array_of_dependencies(self):
manifester = Manifester()
io_object = io.StringIO('''module sample/graviton-invalid
go 1.18
require (
github.com/golang/snappy v0.0.2
)''')
dependencies = manifester.get_dependencies('go.mod', io_object)
self.assertEqual(1, len(dependencies))
self.assertEqual('github.com/golang/snappy', dependencies[0].name)
self.assertEqual('0.0.2', dependencies[0].version)
self.assertEqual('go.mod', dependencies[0].filename)
self.assertEqual('go', dependencies[0].tool)
def test_get_dependencies_for_npm_returns_array_of_dependencies(self):
manifester = Manifester()
io_object = io.StringIO('''{
"name": "fakelibraryjs",
"version": "1.2.3",
"description": "Test package.json file",
"scripts": {
"build": "npm build"
},
"dependencies": {
"cors": "2.8.5",
"express": "4.18.1",
"rxjs": "7.5.6",
"socket.io": "4.5.1",
"tslib": "2.4.0"
},
"devDependencies": {
"@codechecks/client": "0.1.12",
"@commitlint/cli": "17.0.3",
"eslint": "7.32.0",
"typescript": "4.7.4"
}
}''')
dependencies = manifester.get_dependencies('package.json', io_object)
self.assertEqual(9, len(dependencies))
self.assertEqual('cors', dependencies[0].name)
self.assertEqual('2.8.5', dependencies[0].version)
self.assertEqual('package.json', dependencies[0].filename)
self.assertEqual('npm', dependencies[0].tool)
def test_get_dependencies_for_nuget_returns_array_of_dependencies(self):
manifester = Manifester()
io_object = io.StringIO('''
net6.0
''')
dependencies = manifester.get_dependencies('sampledotnet.csproj', io_object)
self.assertEqual(4, len(dependencies))
self.assertEqual('Microsoft.Extensions.Logging.Console', dependencies[0].name)
self.assertEqual('6.0.0', dependencies[0].version)
self.assertEqual('sampledotnet.csproj', dependencies[0].filename)
self.assertEqual('nuget', dependencies[0].tool)
def test_get_dependencies_for_ruby_returns_array_of_dependencies(self):
manifester = Manifester()
io_object = io.StringIO('''source 'https://rubygems.org'
gem 'rails', '~> 6.1.6.1'
gem "rake", ">= 11.1"
gem 'actionpack', rails_version
gem 'bcrypt', '~> 3.1', '>= 3.1.14'
gem "cucumber", RUBY_VERSION >= "2.5" ? "~> 5.1.2" : "~> 4.1"
gem 'gc_tracer', require: false, platform: :mri
gem 'gssapi', group: :kerberos
gem 'mail', git: 'https://github.com/discourse/mail.git'
gem "turbo-rails"
group :test do
gem "httpclient"
if RUBY_ENGINE == "jruby"
gem "jruby-openssl"
end
end''')
dependencies = manifester.get_dependencies('Gemfile', io_object)
self.assertEqual(11, len(dependencies))
self.assertEqual('rails', dependencies[0].name)
self.assertEqual('6.1.6.1', dependencies[0].version)
self.assertEqual('Gemfile', dependencies[0].filename)
self.assertEqual('ruby', dependencies[0].tool)
def test_scan_folder_returns_array_of_all_dependencies(self):
manifester = Manifester()
sample_path = path.abspath(path.join(path.dirname(__file__), '..', 'sample-projects'))
dependencies = manifester.scan_folder(sample_path)
self.assertGreater(len(dependencies), 0)
self.assertIsInstance(dependencies, list)
self.assertIsInstance(dependencies[0], Dependency)