예제 #1
0
def test_pretend_move_old_package(tmpfolder, caplog, isolated_logger):
    # Given a package is already created without namespace
    create_project(project="proj", package="my_pkg")

    opts = parse_args(
        ["proj", "-p", "my_pkg", "--namespace", "my.ns", "--pretend"])
    opts = process_opts(opts)
    configure_logger(opts)
    struct = dict(proj={'src': {'my_pkg': {'file.py': ''}}})

    # when 'pretend' option is passed,
    struct, opts = get_default_options(struct, opts)
    struct, opts = enforce_namespace_options(struct, opts)
    struct, opts = move_old_package(struct, opts)

    # then nothing should happen,
    assert tmpfolder.join("proj/src/my_pkg/__init__.py").check()
    assert not tmpfolder.join("proj/src/my/ns").check()

    # something should be logged,
    log = caplog.text
    expected_log = ('move', 'my_pkg', 'to', 'my/ns')
    for text in expected_log:
        assert text in log

    # but user should see no warning,
    unexpected_warnings = ('A folder', 'exists in the project directory',
                           'a namespace option was passed', 'Please make sure')
    for text in unexpected_warnings:
        assert text not in log
예제 #2
0
def test_pretend_move_old_package(tmpfolder, caplog, isolated_logger):
    # Given a package is already created without namespace
    create_project(project="proj", package="my_pkg")

    opts = parse_args(
        ["proj", "-p", "my_pkg", "--namespace", "my.ns", "--pretend"])
    opts = process_opts(opts)
    configure_logger(opts)
    struct = dict(proj={'src': {'my_pkg': {'file.py': ''}}})

    # when 'pretend' option is passed,
    struct, opts = get_default_options(struct, opts)
    struct, opts = enforce_namespace_options(struct, opts)
    struct, opts = move_old_package(struct, opts)

    # then nothing should happen,
    assert tmpfolder.join("proj/src/my_pkg/__init__.py").check()
    assert not tmpfolder.join("proj/src/my/ns").check()

    # something should be logged,
    log = caplog.text
    expected_log = ('move', 'my_pkg', 'to', 'my/ns')
    for text in expected_log:
        assert text in log

    # but user should see no warning,
    unexpected_warnings = ('A folder', 'exists in the project directory',
                           'a namespace option was passed', 'Please make sure')
    for text in unexpected_warnings:
        assert text not in log
예제 #3
0
def test_pretend_move_old_package(tmpfolder, caplog, isolated_logger):
    # Given a package is already created without namespace
    create_project(project="proj", package="my_pkg")

    opts = parse_args(
        ["proj", "-p", "my_pkg", "--namespace", "my.ns", "--pretend"])
    opts = process_opts(opts)
    logger.reconfigure(opts)
    struct = dict(proj={"src": {"my_pkg": {"file.py": ""}}})

    # when 'pretend' option is passed,
    struct, opts = get_default_options(struct, opts)
    struct, opts = enforce_namespace_options(struct, opts)
    struct, opts = move_old_package(struct, opts)

    # then nothing should happen,
    assert tmpfolder.join("proj/src/my_pkg/__init__.py").check()
    assert not tmpfolder.join("proj/src/my/ns").check()

    # something should be logged,
    log = caplog.text
    expected_log = ("move", "my_pkg", "to", str(Path("my/ns")))
    for text in expected_log:
        assert text in log

    # but user should see no warning,
    unexpected_warnings = (
        "A folder",
        "exists in the project directory",
        "a namespace option was passed",
        "Please make sure",
    )
    for text in unexpected_warnings:
        assert text not in log
예제 #4
0
def test_get_default_opts():
    _, opts = get_default_options({}, dict(
        project="project",
        package="package",
        description="description"))
    assert all(k in opts for k in "project update force author".split())
    assert isinstance(opts["extensions"], list)
    assert isinstance(opts["requirements"], list)
예제 #5
0
def test_get_default_opts():
    _, opts = get_default_options({},
                                  dict(project="project",
                                       package="package",
                                       description="description"))
    assert all(k in opts for k in "project update force author".split())
    assert isinstance(opts["extensions"], list)
    assert isinstance(opts["requirements"], list)
예제 #6
0
def test_create_project_with_license(tmpfolder, git_mock):
    _, opts = get_default_options({}, dict(
        project="my-project",
        license="new-bsd"))
    # ^ The entire default options are needed, since template
    #   uses computed information

    create_project(opts)
    assert path_exists("my-project")
    content = tmpfolder.join("my-project/LICENSE.txt").read()
    assert content == templates.license(opts)
예제 #7
0
def test_create_project_with_license(tmpfolder, git_mock):
    _, opts = get_default_options({},
                                  dict(project="my-project",
                                       license="new-bsd"))
    # ^ The entire default options are needed, since template
    #   uses computed information

    create_project(opts)
    assert path_exists("my-project")
    content = tmpfolder.join("my-project/LICENSE.txt").read()
    assert content == templates.license(opts)
예제 #8
0
def test_move_old_package_without_namespace(tmpfolder):
    # Given a package is already created without namespace
    create_project(project="proj", package="my_pkg")

    opts = dict(project="proj", package="my_pkg")
    struct = dict(proj={'src': {'my_pkg': {'file.py': ''}}})

    # when no 'namespace' option is passed,
    struct, opts = get_default_options(struct, opts)
    struct, opts = enforce_namespace_options(struct, opts)
    struct, opts = move_old_package(struct, opts)

    # then the old package remains,
    assert tmpfolder.join("proj/src/my_pkg/__init__.py").check()
예제 #9
0
def test_move_old_package_without_namespace(tmpfolder):
    # Given a package is already created without namespace
    create_project(project="proj", package="my_pkg")

    opts = dict(project="proj", package="my_pkg")
    struct = dict(proj={"src": {"my_pkg": {"file.py": ""}}})

    # when no 'namespace' option is passed,
    struct, opts = get_default_options(struct, opts)
    struct, opts = enforce_namespace_options(struct, opts)
    struct, opts = move_old_package(struct, opts)

    # then the old package remains,
    assert tmpfolder.join("proj/src/my_pkg/__init__.py").check()
예제 #10
0
def test_move_old_package(tmpfolder):
    # Given a package is already created without namespace
    create_project(project="proj", package="my_pkg")
    assert tmpfolder.join("proj/src/my_pkg/__init__.py").check()

    opts = dict(project="proj", package="my_pkg", namespace="my.ns")
    struct = dict(proj={'src': {'my_pkg': {'file.py': ''}}})

    # when the 'namespace' option is passed,
    struct, opts = get_default_options(struct, opts)
    struct, opts = enforce_namespace_options(struct, opts)
    struct, opts = move_old_package(struct, opts)

    # then the old package should be moved
    assert not tmpfolder.join("proj/src/my_pkg/__init__.py").check()
    assert tmpfolder.join("proj/src/my/ns/my_pkg/__init__.py").check()
예제 #11
0
def test_version_of_subdir(tmpfolder):
    projects = ["main_project", "inner_project"]
    for project in projects:
        opts = cli.parse_args([project])
        _, opts = api.get_default_options({}, opts)
        struct, _ = structure.define_structure({}, opts)
        struct, _ = structure.apply_update_rules(struct, opts)
        structure.create_structure(struct, {})
        repo.init_commit_repo(project, struct)
    shutil.rmtree(os.path.join('inner_project', '.git'))
    shutil.move('inner_project', 'main_project/inner_project')
    with utils.chdir('main_project'):
        main_version = subprocess.check_output(
            ['python', 'setup.py', '--version']).strip().splitlines()[-1]
        with utils.chdir('inner_project'):
            inner_version = subprocess.check_output(
                ['python', 'setup.py', '--version']).strip().splitlines()[-1]
    assert main_version.strip() == inner_version.strip()
예제 #12
0
def test_version_of_subdir(tmpfolder):
    projects = ["main_project", "inner_project"]
    for project in projects:
        opts = cli.parse_args([project])
        _, opts = api.get_default_options({}, opts)
        struct, _ = structure.define_structure({}, opts)
        struct, _ = structure.apply_update_rules(struct, opts)
        structure.create_structure(struct, {})
        repo.init_commit_repo(project, struct)
    shutil.rmtree(os.path.join('inner_project', '.git'))
    shutil.move('inner_project', 'main_project/inner_project')
    with utils.chdir('main_project'):
        main_version = subprocess.check_output([
            'python', 'setup.py', '--version']).strip().splitlines()[-1]
        with utils.chdir('inner_project'):
            inner_version = subprocess.check_output([
                'python', 'setup.py', '--version']).strip().splitlines()[-1]
    assert main_version.strip() == inner_version.strip()
예제 #13
0
def test_version_of_subdir(tmpfolder):
    projects = ["main_project", "inner_project"]
    for project in projects:
        opts = cli.parse_args([project])
        opts = cli.process_opts(opts)
        _, opts = api.get_default_options({}, opts)
        struct, _ = structure.define_structure({}, opts)
        struct, _ = update.apply_update_rules(struct, opts)
        structure.create_structure(struct, {})
        repo.init_commit_repo(project, struct)
    utils.rm_rf(os.path.join("inner_project", ".git"))
    shutil.move("inner_project", "main_project/inner_project")
    with utils.chdir("main_project"):
        main_version = (subprocess.check_output(
            [sys.executable, "setup.py",
             "--version"]).strip().splitlines()[-1])
        with utils.chdir("inner_project"):
            inner_version = (subprocess.check_output(
                [sys.executable, "setup.py",
                 "--version"]).strip().splitlines()[-1])
    assert main_version.strip() == inner_version.strip()
예제 #14
0
def test_define_structure():
    args = ["project", "-p", "package", "-d", "description"]
    opts = cli.parse_args(args)
    _, opts = api.get_default_options({}, opts)
    struct, _ = structure.define_structure({}, opts)
    assert isinstance(struct, dict)
예제 #15
0
def test_get_default_opts_when_updating_project_doesnt_exist(
        tmpfolder, git_mock):
    with pytest.raises(DirectoryDoesNotExist):
        get_default_options({}, dict(project="my-project", update=True))
예제 #16
0
def test_define_structure():
    args = ["project", "-p", "package", "-d", "description"]
    opts = cli.parse_args(args)
    _, opts = api.get_default_options({}, opts)
    struct, _ = structure.define_structure({}, opts)
    assert isinstance(struct, dict)
예제 #17
0
def test_get_default_opts_with_nogit(nogit_mock):
    with pytest.raises(GitNotInstalled):
        get_default_options({}, dict(project="my-project"))
예제 #18
0
def test_get_default_opts_with_git_not_configured(noconfgit_mock):
    with pytest.raises(GitNotConfigured):
        get_default_options({}, dict(project="my-project"))
예제 #19
0
def test_get_default_opts_with_git_not_configured(noconfgit_mock):
    with pytest.raises(GitNotConfigured):
        get_default_options({}, dict(project="my-project"))
예제 #20
0
def test_get_default_opts_with_nogit(nogit_mock):
    with pytest.raises(GitNotInstalled):
        get_default_options({}, dict(project="my-project"))
예제 #21
0
def test_get_default_opts_when_updating_project_doesnt_exist(
        tmpfolder, git_mock):
    with pytest.raises(DirectoryDoesNotExist):
        get_default_options({}, dict(project="my-project", update=True))