コード例 #1
0
def test_fetch_yarn_no_configs(
    mock_update_config_files,
    mock_generate_npmrc,
    mock_get_yarn_repo_url,
    mock_finalize_nexus,
    mock_get_yarn_username,
    mock_update_env_vars,
    mock_worker_config,
    mock_yarn_lock_to_str,
    mock_b64_config_file,
    mock_resolve_yarn,
    mock_prepare_nexus,
    mock_get_yarn_repo_name,
    mock_get_request,
    mock_set_state,
    mock_verify_files,
    mock_validate_config,
    mock_request_bundle_dir,
    tmp_path,
    task_passes_state_check,
):
    bundle_dir, root, sub = mock_bundle_dir(tmp_path)
    mock_request_bundle_dir.return_value = bundle_dir

    mock_resolve_yarn.return_value = {
        "package.json": None,
        "lock_file": None,
        "downloaded_deps": set(),
        # Following ensures the packages JSON data collection works
        "package": {
            "name": "pkg1",
            "type": "yarn",
            "version": "1.0.0"
        },
        "deps": [],
        # Adding this to ensure this is a complete fake resolved yarn package info.
        "lock_file_name": "",
    }

    yarn.fetch_yarn_source(1)

    # Just do a sanity-check on calls where subpaths are relevant
    mock_verify_files.assert_called_once_with(bundle_dir, ["."])
    mock_resolve_yarn.assert_called_once_with(str(root),
                                              mock_get_request.return_value,
                                              skip_deps=set())
    mock_generate_npmrc.assert_called_once_with(
        mock_get_yarn_repo_url.return_value,
        mock_get_yarn_username.return_value,
        mock_finalize_nexus.return_value,  # password
        ["."],
    )
    mock_b64_config_file.assert_called_once_with("", "app/.yarnrc")
コード例 #2
0
def test_fetch_yarn_resolve_fails(
    mock_resolve_yarn,
    mock_prepare_nexus,
    mock_get_yarn_repo_name,
    mock_set_state,
    mock_verify_files,
    mock_validate_config,
    mock_request_bundle_dir,
    tmp_path,
):
    bundle_dir, root, sub = mock_bundle_dir(tmp_path)
    mock_request_bundle_dir.return_value = bundle_dir

    mock_resolve_yarn.side_effect = [CachitoError("oops")]

    with pytest.raises(CachitoError, match="oops"):
        yarn.fetch_yarn_source(1)
コード例 #3
0
def test_fetch_yarn_no_configs(
    mock_update_config_files,
    mock_generate_npmrc,
    mock_get_yarn_repo_url,
    mock_finalize_nexus,
    mock_get_yarn_username,
    mock_update_deps,
    mock_update_package,
    mock_worker_config,
    mock_yarn_lock_to_str,
    mock_b64_config_file,
    mock_resolve_yarn,
    mock_prepare_nexus,
    mock_get_yarn_repo_name,
    mock_set_state,
    mock_verify_files,
    mock_validate_config,
    mock_request_bundle_dir,
    tmp_path,
):
    bundle_dir, root, sub = mock_bundle_dir(tmp_path)
    mock_request_bundle_dir.return_value = bundle_dir

    def mock_getitem(key):
        if key in ("package.json", "lock_file"):
            return None
        if key == "downloaded_deps":
            return set()
        return mock.Mock()

    mock_resolve_yarn.return_value.__getitem__.side_effect = mock_getitem

    yarn.fetch_yarn_source(1)

    # Just do a sanity-check on calls where subpaths are relevant
    mock_verify_files.assert_called_once_with(bundle_dir, ["."])
    mock_resolve_yarn.assert_called_once_with(str(root),
                                              mock_set_state.return_value,
                                              skip_deps=set())
    mock_generate_npmrc.assert_called_once_with(
        mock_get_yarn_repo_url.return_value,
        mock_get_yarn_username.return_value,
        mock_finalize_nexus.return_value,  # password
        ["."],
    )
    mock_b64_config_file.assert_called_once_with("", "app/.yarnrc")
コード例 #4
0
def test_fetch_yarn(
    mock_update_config_files,
    mock_generate_npmrc,
    mock_get_yarn_repo_url,
    mock_finalize_nexus,
    mock_get_yarn_username,
    mock_update_env_vars,
    mock_worker_config,
    mock_yarn_lock_to_str,
    mock_b64_config_file,
    mock_resolve_yarn,
    mock_prepare_nexus,
    mock_get_yarn_repo_name,
    mock_get_request,
    mock_set_state,
    mock_verify_files,
    mock_validate_config,
    mock_request_bundle_dir,
    tmp_path,
    task_passes_state_check,
):
    # SETUP
    bundle_dir, root, sub = mock_bundle_dir(tmp_path)
    mock_request_bundle_dir.return_value = bundle_dir

    dep1 = {"name": "dep1", "version": "1.0.0", "dev": False, "type": "yarn"}
    dep2 = {"name": "dep2", "version": "2.0.0", "dev": False, "type": "yarn"}

    rv1 = {
        "deps": [dep1],
        "downloaded_deps": {"[email protected]"},
        "lock_file": None,
        "package": {
            "name": "pkg1",
            "version": "1.1.1",
            "type": "yarn"
        },
        "package.json": None,
    }
    rv2 = {
        "deps": [dep2],
        "downloaded_deps": {"[email protected]"},
        "lock_file": {
            "dep2@^2.0.0": {
                "version": "2.0.0-external"
            }
        },
        "package": {
            "name": "pkg2",
            "version": "2.2.2",
            "type": "yarn"
        },
        "package.json": {
            "name": "pkg2",
            "version": "2.2.2",
            "dependencies": {
                "dep2": "2.0.0-external"
            },
        },
    }
    mock_resolve_yarn.side_effect = [rv1, rv2]

    yarnlock_str = dedent("""\
        dep2@^2.0.0:
          version "2.0.0-external"
        """)
    mock_yarn_lock_to_str.return_value = yarnlock_str

    packjson_str = dedent("""\
        {
          "name": "pkg2",
          "version": "2.2.2",
          "dependencies": {
            "dep2": "2.0.0-external"
          }
        }""")

    mock_worker_config.return_value.cachito_default_environment_variables = {
        "npm": {
            "A": "1",
            "B": "2"
        },
        "yarn": {
            "B": "3",
            "C": "4"
        },
    }

    packjson_cfg = mock.Mock()
    yarnlock_cfg = mock.Mock()
    yarnrc_1_cfg = mock.Mock()
    yarnrc_2_cfg = mock.Mock()
    mock_b64_config_file.side_effect = [
        packjson_cfg, yarnlock_cfg, yarnrc_1_cfg, yarnrc_2_cfg
    ]

    npmrc_1_cfg = mock.Mock()
    npmrc_2_cfg = mock.Mock()
    mock_generate_npmrc.return_value = [npmrc_1_cfg, npmrc_2_cfg]
    # /SETUP

    yarn.fetch_yarn_source(1, [{"path": "."}, {"path": "sub"}])

    # VALIDATION
    mock_validate_config.assert_called_once()
    mock_verify_files.assert_called_once_with(bundle_dir, [".", "sub"])
    mock_set_state.assert_has_calls([
        mock.call(1, "in_progress", "Configuring Nexus for yarn"),
        mock.call(1, "in_progress",
                  'Fetching the yarn dependencies at the "." directory'),
        mock.call(1, "in_progress",
                  'Fetching the yarn dependencies at the "sub" directory'),
        mock.call(1, "in_progress",
                  "Finalizing the Nexus configuration for yarn"),
    ])
    mock_get_request.assert_has_calls(mock.call(1) for _ in range(2))
    mock_get_yarn_repo_name.assert_called_once_with(1)
    mock_prepare_nexus.assert_called_once_with(
        mock_get_yarn_repo_name.return_value)
    mock_resolve_yarn.assert_has_calls([
        mock.call(str(root), mock_get_request.return_value, skip_deps=set()),
        mock.call(str(sub),
                  mock_get_request.return_value,
                  skip_deps=rv1["downloaded_deps"]),
    ])
    mock_worker_config.assert_called_once()
    mock_update_env_vars.assert_called_once_with(1, {
        "A": "1",
        "B": "3",
        "C": "4"
    })
    mock_get_yarn_username.assert_called_once_with(1)
    mock_finalize_nexus.assert_called_once_with(
        mock_get_yarn_username.return_value,
        mock_get_yarn_repo_name.return_value)
    mock_get_yarn_repo_url.assert_called_once_with(1)
    mock_generate_npmrc.assert_called_once_with(
        mock_get_yarn_repo_url.return_value,
        mock_get_yarn_username.return_value,
        mock_finalize_nexus.return_value,  # password
        [".", "sub"],
    )
    mock_b64_config_file.assert_has_calls([
        mock.call(packjson_str, "app/sub/package.json"),
        mock.call(yarnlock_str, "app/sub/yarn.lock"),
        mock.call("", "app/.yarnrc"),
        mock.call("", "app/sub/.yarnrc"),
    ])
    mock_update_config_files.assert_called_once_with(1, [
        packjson_cfg, yarnlock_cfg, npmrc_1_cfg, npmrc_2_cfg, yarnrc_1_cfg,
        yarnrc_2_cfg
    ])

    expected = {
        "packages": [
            {
                "name": "pkg1",
                "version": "1.1.1",
                "type": "yarn",
                "dependencies": rv1["deps"]
            },
            {
                "name": "pkg2",
                "version": "2.2.2",
                "type": "yarn",
                "path": "sub",
                "dependencies": rv2["deps"],
            },
        ],
    }
    assert expected == json.loads(bundle_dir.yarn_packages_data.read_bytes())