Example #1
0
def test_load_user_config_not_found(fake_vcs):
    with pytest.raises(ConfigNotFoundError):
        load_user_config(fake_vcs)
Example #2
0
def test(ctx, staged_only, head_only):
    """Run tests. If a passing test run is found in the tests run history,
    then this does not run any tests.
    """
    git = ctx.obj['vcs']

    click.echo('Making a temporary copy of your project...', nl=False)
    with git.temp_copy() as copy:
        click.echo('Done.')
        if head_only:
            click.echo('Resetting to HEAD...', nl=False)
            copy.clear('HEAD')
            click.echo('Done.')
        elif staged_only:
            click.echo('Resetting to staged files...', nl=False)
            copy.remove_unstaged_files()
            click.echo('Done.')

        click.echo('Loading config file...', nl=False)
        try:
            config = load_user_config(copy)
            click.echo('Done.')
        except ConfigFormatError:
            click.echo("Invalid config")
            ctx.abort()
        except ConfigNotFoundError:
            click.echo("No config file")
            config = _default_config

        click.echo('Checking if tests were already run...', nl=False)
        new_signature = copy.get_signature()

        with locking.lock(git, locking.Lock.tests_history):
            in_committed = new_signature in get_committed_signatures(git)
            in_staged = new_signature in get_staged_signatures(git)
            if not in_committed and not in_staged:
                stage_signature(git, new_signature)
            if in_committed:
                click.echo('')
                click.echo(click.style('OK', bg='green', fg='black') +
                           ' Tests already ran.')
                try:
                    click.echo('Syncing test results...', nl=False)
                    sync_results(git, new_signature)
                    click.echo('Done')
                except ResultsNotFoundError:
                    click.echo('No results to sync.')
                ctx.exit(exit_codes.SUCCESS)
            if in_staged:
                click.echo('')
                click.echo(click.style('In Progress', bg='yellow', fg='black') +
                           ' Tests already running.')
                ctx.exit(exit_codes.ALREADY_RUNNING)
        click.echo('Done.')
        with contextmanagers.chdir(copy.path):
            all_passed = True
            for test in config['tests']:
                click.echo('Running test: {}'.format(test))

                # ok to use shell=True, as the whole point of EasyCI is to run
                # arbitrary code
                ret = subprocess.call(test, shell=True)
                if ret == 0:
                    click.secho('Passed', bg='green', fg='black')
                else:
                    click.secho('Failed', bg='red', fg='black')
                    all_passed = False

        with locking.lock(git, locking.Lock.tests_history):
            # collect results
            if len(config['collect_results']) > 0:
                click.echo('Collecting results...', nl=False)
                save_results(git, new_signature, copy.path,
                             config['collect_results'])
                click.echo('Done')
                click.echo('Syncing test results...', nl=False)
                sync_results(git, new_signature)
                click.echo('Done')

            # save signature
            if not all_passed:
                unstage_signature(git, new_signature)
                ctx.exit(exit_codes.FAILURE)
            else:
                commit_signature(git, config, new_signature)
                ctx.exit(exit_codes.SUCCESS)
Example #3
0
def test_load_user_config_default_config(user_config, fake_vcs, repo_path):
    _create_config_file(user_config, repo_path)
    config = load_user_config(fake_vcs)
    user_config.update(_default_config)
    assert config == user_config
Example #4
0
def test_load_user_config_invalid_config(config_string, fake_vcs, repo_path):
    with open(os.path.join(repo_path, 'eci.yaml'), 'w') as f:
        f.write(config_string)
    with pytest.raises(ConfigFormatError):
        load_user_config(fake_vcs)
Example #5
0
def test_load_user_config_simple(tests, fake_vcs, repo_path):
    _create_config_file({"tests": tests}, repo_path)
    config = load_user_config(fake_vcs)
    assert config['tests'] == tests
Example #6
0
def test_load_user_config_not_found(fake_vcs):
    with pytest.raises(ConfigNotFoundError):
        load_user_config(fake_vcs)
Example #7
0
def test_load_user_config_invalid_config(config_string, fake_vcs, repo_path):
    with open(os.path.join(repo_path, 'eci.yaml'), 'w') as f:
        f.write(config_string)
    with pytest.raises(ConfigFormatError):
        load_user_config(fake_vcs)
Example #8
0
def test_load_user_config_default_config(user_config, fake_vcs, repo_path):
    _create_config_file(user_config, repo_path)
    config = load_user_config(fake_vcs)
    user_config.update(_default_config)
    assert config == user_config
Example #9
0
def test_load_user_config_simple(tests, fake_vcs, repo_path):
    _create_config_file({
        "tests": tests
    }, repo_path)
    config = load_user_config(fake_vcs)
    assert config['tests'] == tests