def test_load_user_config_not_found(fake_vcs): with pytest.raises(ConfigNotFoundError): load_user_config(fake_vcs)
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)
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
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)
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
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