123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- import os
- import pytest
- from build.plugins.lib.nots.package_manager.base.package_json import PackageJson, PackageJsonWorkspaceError
- def test_get_name_exist():
- pj = PackageJson("/packages/foo/package.json")
- pj.data = {
- "name": "package-name",
- }
- name = pj.get_name()
- assert name == "package-name"
- def test_get_name_none():
- pj = PackageJson("/packages/foo/package.json")
- pj.data = {}
- name = pj.get_name()
- assert name == "packages-foo"
- def test_get_workspace_dep_spec_paths_ok():
- pj = PackageJson("/packages/foo/package.json")
- pj.data = {
- "dependencies": {
- "@yandex-int/bar": "workspace:../bar",
- },
- "devDependencies": {
- "@yandex-int/baz": "workspace:../baz",
- },
- }
- ws_dep_spec_paths = pj.get_workspace_dep_spec_paths()
- assert ws_dep_spec_paths == [
- ("@yandex-int/bar", "../bar"),
- ("@yandex-int/baz", "../baz"),
- ]
- def test_get_workspace_dep_spec_paths_invalid_path():
- pj = PackageJson("/packages/foo/package.json")
- pj.data = {
- "dependencies": {
- "@yandex-int/bar": "workspace:*",
- },
- }
- with pytest.raises(PackageJsonWorkspaceError) as e:
- pj.get_workspace_dep_spec_paths()
- assert (
- str(e.value)
- == "Expected relative path specifier for workspace dependency, but got 'workspace:*' for @yandex-int/bar in /packages/foo/package.json"
- )
- def test_get_workspace_dep_paths_ok():
- pj = PackageJson("/packages/foo/package.json")
- pj.data = {
- "dependencies": {
- "@yandex-int/bar": "workspace:../bar",
- },
- "devDependencies": {
- "@yandex-int/baz": "workspace:../baz",
- },
- }
- ws_dep_paths = pj.get_workspace_dep_paths()
- assert ws_dep_paths == [
- "/packages/bar",
- "/packages/baz",
- ]
- def test_get_dep_specifier():
- pj = PackageJson("/packages/foo/package.json")
- pj.data = {
- "dependencies": {
- "jestify": "0.0.1",
- "eslint": ">= 7.27.0",
- },
- "devDependencies": {
- "jest": "27.1.0",
- "eslinting": "0.0.2",
- },
- }
- jest_spec = pj.get_dep_specifier("jest")
- assert jest_spec == "27.1.0", "Got unexpected jest specifier: {}".format(jest_spec)
- eslint_spec = pj.get_dep_specifier("eslint")
- assert eslint_spec == ">= 7.27.0", "Got unexpected eslint specifier: {}".format(eslint_spec)
- def test_get_workspace_dep_paths_with_custom_base_path():
- pj = PackageJson("/packages/foo/package.json")
- pj.data = {
- "dependencies": {
- "@yandex-int/bar": "workspace:../bar",
- },
- "devDependencies": {
- "@yandex-int/baz": "workspace:../baz",
- },
- }
- ws_dep_paths = pj.get_workspace_dep_paths(base_path="custom/dir")
- assert ws_dep_paths == [
- "custom/bar",
- "custom/baz",
- ]
- def test_get_workspace_deps_ok():
- pj = PackageJson("/packages/foo/package.json")
- pj.data = {
- "dependencies": {
- "@yandex-int/bar": "workspace:../bar",
- },
- "devDependencies": {
- "@yandex-int/baz": "workspace:../baz",
- },
- }
- def load_mock(cls, path):
- p = PackageJson(path)
- p.data = {
- "name": "@yandex-int/{}".format(os.path.basename(os.path.dirname(path))),
- }
- return p
- PackageJson.load = classmethod(load_mock)
- ws_deps = pj.get_workspace_deps()
- assert len(ws_deps) == 2
- assert ws_deps[0].path == "/packages/bar/package.json"
- assert ws_deps[1].path == "/packages/baz/package.json"
- def test_get_workspace_deps_with_wrong_name():
- pj = PackageJson("/packages/foo/package.json")
- pj.data = {
- "dependencies": {
- "@yandex-int/bar": "workspace:../bar",
- },
- }
- def load_mock(cls, path):
- p = PackageJson(path)
- p.data = {
- "name": "@shouldbe/{}".format(os.path.basename(os.path.dirname(path))),
- }
- return p
- PackageJson.load = classmethod(load_mock)
- with pytest.raises(PackageJsonWorkspaceError) as e:
- pj.get_workspace_deps()
- assert (
- str(e.value)
- == "Workspace dependency name mismatch, found '@yandex-int/bar' instead of '@shouldbe/bar' in /packages/foo/package.json"
- )
- def test_get_workspace_map_ok():
- pj = PackageJson("/packages/foo/package.json")
- pj.data = {
- "dependencies": {
- "@yandex-int/bar": "workspace:../bar",
- },
- }
- def load_mock(cls, path):
- name = os.path.basename(os.path.dirname(path))
- p = PackageJson(path)
- p.data = {
- "name": "@yandex-int/{}".format(name),
- "dependencies": ({"@yandex-int/qux": "workspace:../qux"} if name == "bar" else {}),
- }
- return p
- PackageJson.load = classmethod(load_mock)
- ws_map = pj.get_workspace_map()
- assert len(ws_map) == 3
- assert ws_map["/packages/foo"][0].path == "/packages/foo/package.json"
- assert ws_map["/packages/foo"][1] == 0
- assert ws_map["/packages/bar"][0].path == "/packages/bar/package.json"
- assert ws_map["/packages/bar"][1] == 1
- assert ws_map["/packages/qux"][0].path == "/packages/qux/package.json"
- assert ws_map["/packages/qux"][1] == 2
- def test_get_bin_path_string():
- # arrange
- pj = PackageJson("/packages/foo/package.json")
- pj.data = {
- "name": "next",
- "bin": "./dist/bin/next",
- }
- # act + assert
- assert pj.get_bin_path() == "./dist/bin/next"
- def test_get_bin_path_same_name():
- # arrange
- pj = PackageJson("/packages/foo/package.json")
- pj.data = {
- "name": "next",
- "bin": {"next": "./dist/bin/next"},
- }
- # act + assert
- assert pj.get_bin_path() == "./dist/bin/next"
- def test_get_bin_path_custom_bin_name():
- # arrange
- pj = PackageJson("/packages/foo/package.json")
- pj.data = {
- "name": "typescript",
- "bin": {"tsc": "./bin/tsc"},
- }
- # act + assert
- assert pj.get_bin_path("tsc") == "./bin/tsc"
|