1
0
Fork 0
mirror of https://github.com/ansible-collections/community.general.git synced 2024-09-14 20:13:21 +02:00

npm - fix installing from package.json (#2924)

correctly handle cases where a dependency does not have a `version` property because it is either missing or invalid
This commit is contained in:
Shahar Mor 2021-07-02 22:42:50 +03:00 committed by GitHub
parent ffe505a798
commit a0915036f9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 25 additions and 2 deletions

View file

@ -0,0 +1,3 @@
bugfixes:
- npm - correctly handle cases where a dependency does not have a ``version`` property because it is either missing or invalid
(https://github.com/ansible-collections/community.general/issues/2917).

View file

@ -216,7 +216,6 @@ class Npm(object):
self.module.fail_json(msg="Failed to parse NPM output with error %s" % to_native(e)) self.module.fail_json(msg="Failed to parse NPM output with error %s" % to_native(e))
if 'dependencies' in data: if 'dependencies' in data:
for dep, props in data['dependencies'].items(): for dep, props in data['dependencies'].items():
dep_version = dep + '@' + str(props['version'])
if 'missing' in props and props['missing']: if 'missing' in props and props['missing']:
missing.append(dep) missing.append(dep)
@ -224,7 +223,9 @@ class Npm(object):
missing.append(dep) missing.append(dep)
else: else:
installed.append(dep) installed.append(dep)
installed.append(dep_version) if 'version' in props and props['version']:
dep_version = dep + '@' + str(props['version'])
installed.append(dep_version)
if self.name_version and self.name_version not in installed: if self.name_version and self.name_version not in installed:
missing.append(self.name) missing.append(self.name)
# Named dependency not installed # Named dependency not installed

View file

@ -52,6 +52,25 @@ class NPMModuleTestCase(ModuleTestCase):
call(['/testbin/npm', 'install', '--global', 'coffee-script'], check_rc=True, cwd=None), call(['/testbin/npm', 'install', '--global', 'coffee-script'], check_rc=True, cwd=None),
]) ])
def test_present_missing(self):
set_module_args({
'name': 'coffee-script',
'global': 'true',
'state': 'present',
})
self.module_main_command.side_effect = [
(0, '{"dependencies": {"coffee-script": {"missing" : true}}}', ''),
(0, '{}', ''),
]
result = self.module_main(AnsibleExitJson)
self.assertTrue(result['changed'])
self.module_main_command.assert_has_calls([
call(['/testbin/npm', 'list', '--json', '--long', '--global'], check_rc=False, cwd=None),
call(['/testbin/npm', 'install', '--global', 'coffee-script'], check_rc=True, cwd=None),
])
def test_present_version(self): def test_present_version(self):
set_module_args({ set_module_args({
'name': 'coffee-script', 'name': 'coffee-script',