Example #1
0
def test_get_deps_unsupported_non_registry_dep():
    package_lock_deps = {
        "@angular/animations": {
            "version":
            "8.2.14",
            "resolved":
            "https://registry.npmjs.org/@angular/animations/-/animations-8.2.14.tgz",
            "integrity":
            ("sha512-3Vc9TnNpKdtvKIXcWDFINSsnwgEMiDmLzjceWg1iYKwpeZGQahUXPoesLwQazBMmxJzQiA"
             "4HOMj0TTXKZ+Jzkg=="),
            "requires": {
                "tslib": "^1.9.0"
            },
        },
        "tslib": {
            "version":
            "file:tslib.tar.gz",
            "integrity":
            ("sha512-ZETBuz/jo9ivHHolRRfYZgK5Zd2F5KZ/Yk7iygP8y8YEFLe5ZHCVY5zJMHiP3WeA8M/yvPKN7"
             "XJpM03KH7FtPw=="),
        },
    }
    expected = "The dependency tslib@file:tslib.tar.gz is hosted in an unsupported location"
    with pytest.raises(CachitoError, match=expected):
        npm._get_deps(package_lock_deps, set(), {})
Example #2
0
def test_get_deps(package_lock_deps):
    name_to_deps, replacements = npm._get_deps(package_lock_deps, set())

    assert name_to_deps == {
        "@angular-devkit/architect": [
            {
                "bundled": False,
                "dev": True,
                "name": "@angular-devkit/architect",
                "type": "npm",
                "version": "0.803.26",
                "version_in_nexus": None,
            }
        ],
        "@angular/animations": [
            {
                "bundled": False,
                "dev": False,
                "name": "@angular/animations",
                "type": "npm",
                "version": "8.2.14",
                "version_in_nexus": None,
            }
        ],
        "rxjs": [
            {
                "bundled": False,
                "dev": True,
                "name": "rxjs",
                "type": "npm",
                "version": "6.4.0",
                "version_in_nexus": None,
            },
            {
                "bundled": False,
                "dev": False,
                "name": "rxjs",
                "type": "npm",
                "version": "6.5.5",
                "version_in_nexus": None,
            },
        ],
        "tslib": [
            {
                "bundled": False,
                "dev": False,
                "name": "tslib",
                "type": "npm",
                "version": "1.11.1",
                "version_in_nexus": None,
            }
        ],
    }
    assert replacements == []
Example #3
0
def test_get_deps_allowlisted_file_dep():
    package_lock_deps = {
        "jsplumb": {
            "version":
            "file:jsplumb-2.10.2.tgz",
            "integrity":
            ("sha512-I6R70uG8HTBl4bDae8Tj4WpwRRS0RPLPDw/cZOqNFkk+qhQ241rLq8ynuC7dN4CKtihxybAvqv"
             "k+FrsLau3fOA=="),
        },
        "rxjs": {
            "version":
            "6.5.5",
            "resolved":
            "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz",
            "integrity":
            ("sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+Z"
             "xKH5bNghw9UeylGQ=="),
            "requires": {
                "tslib": "^1.9.0"
            },
        },
    }
    name_to_deps, replacements = npm._get_deps(package_lock_deps, {"jsplumb"})

    assert name_to_deps == {
        "jsplumb": [{
            "bundled": False,
            "dev": False,
            "name": "jsplumb",
            "type": "npm",
            "version": "file:jsplumb-2.10.2.tgz",
            "version_in_nexus": None,
        }],
        "rxjs": [
            {
                "bundled": False,
                "dev": False,
                "name": "rxjs",
                "type": "npm",
                "version": "6.5.5",
                "version_in_nexus": None,
            },
        ],
    }
    assert replacements == []
Example #4
0
def test_get_deps_non_registry_dep(mock_ctnh, package_lock_deps):
    # Set the rxjs dependencies to be directly from GitHub
    package_lock_deps["@angular-devkit/architect"]["dependencies"]["rxjs"] = {
        "version":
        "github:ReactiveX/rxjs#dfa239d41b97504312fa95e13f4d593d95b49c4b",
        "from":
        "github:ReactiveX/rxjs#dfa239d41b97504312fa95e13f4d593d95b49c4b",
        "requires": {
            "tslib": "^1.9.0"
        },
    }
    nexus_hosted_info = {
        "version":
        "6.5.5-external-gitcommit-dfa239d41b97504312fa95e13f4d593d95b49c4b",
        "resolved":
        ("https://nexus.domain.local/repository/cachito-js-hosted/rxjs/-/"
         "rxjs-6.5.5-external-gitcommit-dfa239d41b97504312fa95e13f4d593d95b49c4b.tgz"
         ),
        "integrity":
        ("sha512-vvAdzoVTdbr5Lq7BI2+l4R3dM4Mw7305wNKLgij8ru7sx3Fuo1W2XrsoTXWfPtIk+kxiBXxCoc8UX"
         "1Vb45kbRQ=="),
        "requires": {
            "tslib": "^1.9.0"
        },
    }

    package_lock_deps["rxjs"] = {
        "version":
        "github:ReactiveX/rxjs#8cc6491771fcbf44984a419b7f26ff442a5d58f5",
        "from":
        "github:ReactiveX/rxjs#8cc6491771fcbf44984a419b7f26ff442a5d58f5",
        "requires": {
            "tslib": "^1.9.0"
        },
    }
    nexus_hosted_info_two = {
        "version":
        "6.5.2-external-gitcommit-8cc6491771fcbf44984a419b7f26ff442a5d58f5",
        "resolved":
        ("https://nexus.domain.local/repository/cachito-js-hosted/rxjs/-/"
         "rxjs-6.5.2-external-gitcommit-8cc6491771fcbf44984a419b7f26ff442a5d58f5.tgz"
         ),
        "integrity":
        ("sha512-AvAdzoVTdVT5Lq7BI2+l5R3dM4Mw7305wNKLgij8rh7sx3Fuo1W2XrsoTXWfPtIk+kxiBXxCoc8UX"
         "1Vb45kbRP=="),
        "requires": {
            "tslib": "^1.9.0"
        },
    }

    # Python 3 iterates through a dictionary in alphabetical order, so this order will always be
    # correct
    mock_ctnh.side_effect = [
        copy.deepcopy(nexus_hosted_info),
        copy.deepcopy(nexus_hosted_info_two)
    ]

    name_to_deps, replacements = npm._get_deps(package_lock_deps, set())

    assert name_to_deps == {
        "@angular-devkit/architect": [{
            "bundled": False,
            "dev": True,
            "name": "@angular-devkit/architect",
            "type": "npm",
            "version": "0.803.26",
            "version_in_nexus": None,
        }],
        "@angular/animations": [{
            "bundled": False,
            "dev": False,
            "name": "@angular/animations",
            "type": "npm",
            "version": "8.2.14",
            "version_in_nexus": None,
        }],
        "rxjs": [
            {
                "bundled":
                False,
                "dev":
                False,
                "name":
                "rxjs",
                "type":
                "npm",
                "version":
                "github:ReactiveX/rxjs#dfa239d41b97504312fa95e13f4d593d95b49c4b",
                "version_in_nexus":
                ("6.5.5-external-gitcommit-dfa239d41b97504312fa95e13f4d593d95b49c4b"
                 ),
            },
            {
                "bundled":
                False,
                "dev":
                False,
                "name":
                "rxjs",
                "type":
                "npm",
                "version":
                "github:ReactiveX/rxjs#8cc6491771fcbf44984a419b7f26ff442a5d58f5",
                "version_in_nexus":
                ("6.5.2-external-gitcommit-8cc6491771fcbf44984a419b7f26ff442a5d58f5"
                 ),
            },
        ],
        "tslib": [{
            "bundled": False,
            "dev": False,
            "name": "tslib",
            "type": "npm",
            "version": "1.11.1",
            "version_in_nexus": None,
        }],
    }
    # Verify that only the top level replacements are returned
    assert replacements == [
        ("rxjs",
         "6.5.2-external-gitcommit-8cc6491771fcbf44984a419b7f26ff442a5d58f5")
    ]
    # Ensure the lock file was updated with the Nexus hosted dependency
    assert (package_lock_deps["@angular-devkit/architect"]["dependencies"]
            ["rxjs"] == nexus_hosted_info)
    assert package_lock_deps["rxjs"] == nexus_hosted_info_two
    assert package_lock_deps["@angular-devkit/architect"]["requires"] == {
        "@angular-devkit/core":
        "8.3.26",
        "rxjs":
        "6.5.5-external-gitcommit-dfa239d41b97504312fa95e13f4d593d95b49c4b",
    }

    assert mock_ctnh.call_count == 2