def test_generate_stub(store_data, stdout, stderr): store, db_file = store_data traces = [ CallTrace(func, { 'a': int, 'b': str }, NoneType), CallTrace(func2, { 'a': int, 'b': int }, NoneType), ] store.add(traces) with mock.patch.dict(os.environ, {DefaultConfig.DB_PATH_VAR: db_file.name}): ret = cli.main(['stub', func.__module__], stdout, stderr) expected = """def func(a: int, b: str) -> None: ... def func2(a: int, b: int) -> None: ... """ assert stdout.getvalue() == expected assert stderr.getvalue() == '' assert ret == 0
def test_retype_failure(store_data, stdout, stderr): store, db_file = store_data traces = [ CallTrace(func, { 'a': int, 'b': str }, NoneType), CallTrace(func2, { 'a': int, 'b': int }, NoneType), ] store.add(traces) msg = "this is a test" err = subprocess.CalledProcessError(returncode=100, cmd='retype') err.stdout = msg.encode() with mock.patch.dict(os.environ, {DefaultConfig.DB_PATH_VAR: db_file.name}): with mock.patch('subprocess.run', side_effect=err): ret = cli.main(['apply', func.__module__], stdout, stderr) assert stdout.getvalue() == "" assert stderr.getvalue( ) == f"ERROR: Failed applying stub with retype:\n{msg}\n" assert ret == 1
def test_get_diff(store_data, stdout, stderr): store, db_file = store_data traces = [ CallTrace(func_anno, { 'a': int, 'b': int }, int), CallTrace(func_anno2, { 'a': str, 'b': str }, None), ] store.add(traces) with mock.patch.dict(os.environ, {DefaultConfig.DB_PATH_VAR: db_file.name}): ret = cli.main(['stub', func.__module__, '--diff'], stdout, stderr) expected = """- def func_anno(a: int, b: str) -> None: ... ? ^ - ^^ ^ + def func_anno(a: int, b: int) -> int: ... ? ^^ ^ ^ """ assert stdout.getvalue() == expected assert stderr.getvalue() == '' assert ret == 0
def test_cli_context_manager_activated(capsys, stdout, stderr): ret = cli.main(['-c', f'{__name__}:LoudContextConfig()', 'stub', 'some.module'], stdout, stderr) out, err = capsys.readouterr() assert out == "IN SETUP: stub\nIN TEARDOWN: stub\n" assert err == "" assert ret == 0
def test_pathlike_parameter(store, db_file, capsys, stdout, stderr): with mock.patch.dict(os.environ, {DefaultConfig.DB_PATH_VAR: db_file.name}): with pytest.raises(SystemExit): cli.main(['stub', 'test/foo.py:bar'], stdout, stderr) out, err = capsys.readouterr() assert "test/foo.py does not look like a valid Python import path" in err
def test_no_traces(store, db_file, stdout, stderr, arg, error): with mock.patch.dict(os.environ, {DefaultConfig.DB_PATH_VAR: db_file.name}): ret = cli.main(['stub', arg], stdout, stderr) assert stderr.getvalue() == error assert stdout.getvalue() == '' assert ret == 0