def test_save_and_load_test_result_to_map(temp_files_factory): root_dir = temp_files_factory([ 'api/user/POST/curl', 'api/user/{id}/GET/curl', 'api/user/{id}/friend/POST/curl', 'api/user/{id}/friend/{fid}/GET/curl', ]) samples = load_code_samples(root_dir) parent_sample = samples[0] child_sample = samples[1] child_sample_post = samples[2] grand_child_sample = samples[3] result_map = TestExecutionResultMap() result_map.put(ApiTestResult(parent_sample, passed=True, json_body={1: 2})) result_map.put(ApiTestResult(child_sample, passed=True)) result_map.put( ApiTestResult(child_sample_post, passed=True, json_body={3: 4}) ) assert result_map.get_parent_result(parent_sample) is None assert result_map.get_parent_result(child_sample).sample == parent_sample assert result_map.get_parent_body(parent_sample) == {} assert result_map.get_parent_body(child_sample) == {1: 2} assert result_map.get_parent_body(grand_child_sample) == {1: 2, 3: 4}
def test_before_sample_replacements( run_sys_cmd, mocked_parse_stdout, temp_files_factory, reporter, no_cleanup, monkeypatch): root_dir = temp_files_factory([ 'api/users/POST/curl', ]) sample = load_code_samples(root_dir)[0] original_source_code = 'curl url --data {"name": "<username>"}' expected_source_code = 'curl url --data {"name": "John"}' sample.path.write_text(original_source_code) _post = MagicMock(status_code=200, json=lambda: {'@id': 'John'}) monkeypatch.setattr( 'samples_validator.prerequisites.base.requests', MagicMock( post=MagicMock(return_value=_post) ) ) mocked_parse_stdout.return_value = ({}, 200) conf.before_sample = { sample.name: [{ 'resource': 'Identity', 'subs': {'@id': '<username>'}, 'method': 'POST', }] } session = TestSession([sample]) session.run() actual_code = session.runners[Language.shell].tmp_sample_path.read_text() assert actual_code == expected_source_code
def test_before_sample_replacements_nested_path( run_sys_cmd, mocked_parse_stdout, temp_files_factory, reporter, no_cleanup, monkeypatch): root_dir = temp_files_factory([ 'api/users/{id}/link/POST/curl', 'api/users/{id}/link/linkID/GET/curl', ]) samples = load_code_samples(root_dir) original_source_code = 'curl api/users/{id}/link/linkID' expected_source_code = 'curl api/users/John/link/linkID' samples[-1].path.write_text(original_source_code) _post = MagicMock(status_code=200, json=lambda: {'@id': 'John'}) monkeypatch.setattr( 'samples_validator.prerequisites.base.requests', MagicMock( post=MagicMock(return_value=_post) ) ) mocked_parse_stdout.return_value = ({'stub': 'data'}, 200) conf.before_sample = { samples[0].name: [{ 'resource': 'Identity', 'subs': {'@id': 'id'}, 'method': 'POST', }] } session = TestSession(samples) session.run() actual_code = session.runners[Language.shell].tmp_sample_path.read_text() assert actual_code == expected_source_code
def test_parents_and_child_sorting_all_methods(temp_files_factory): files_structure = [ ('api/_parent', ('GET', 'POST')), ('api/_parent_{id}', ('GET', 'PUT', 'DELETE')), ('api/_parent_{id}_child', ('GET', 'POST')), ('api/_parent_{id}_child_{childId}', ('GET', 'PUT', 'DELETE')), ] resources = [] for prefix, methods in files_structure: for method in methods: resources.append(f'{prefix}/{method}/curl') samples = load_code_samples(temp_files_factory(resources)) sorted_names = [(sample.name, sample.http_method) for sample in samples] assert sorted_names == [ ('api/parent', HttpMethod.post), ('api/parent', HttpMethod.get), ('api/parent/{id}', HttpMethod.get), ('api/parent/{id}', HttpMethod.put), ('api/parent/{id}/child', HttpMethod.post), ('api/parent/{id}/child', HttpMethod.get), ('api/parent/{id}/child/{childId}', HttpMethod.get), ('api/parent/{id}/child/{childId}', HttpMethod.put), ('api/parent/{id}/child/{childId}', HttpMethod.delete), ('api/parent/{id}', HttpMethod.delete), ]
def test_reusing_response_from_prev_requests_nested( run_sys_cmd, mocked_parse_stdout, temp_files_factory, reporter, no_cleanup, monkeypatch): root_dir = temp_files_factory([ 'api/users/POST/curl', 'api/users/{from}/link/{to}/POST/curl', 'api/users/{from}/link/{to}/{type}/GET/curl', ]) samples = load_code_samples(root_dir) mocked_parse_stdout.side_effect = [ ({'id': 'uuid'}, 200), ({}, 200), ({}, 200) ] conf.resp_attr_replacements = { 'api/users': [{'id': 'from'}] } original_source_code = 'curl /users/{from}/link/{to}/{type}' expected_source_code = 'curl /users/uuid/link/{to}/{type}' samples[-1].path.write_text(original_source_code) session = TestSession(samples) session.run() actual_code = session.runners[Language.shell].tmp_sample_path.read_text() assert actual_code == expected_source_code
def test_loading_by_keyword(temp_files_factory): root_dir = temp_files_factory([ 'one-api/resource/POST/curl', 'another-one-api/resource//DELETE/curl', 'api/resource/POST/curl', 'on-more-api/resource/DELETE/curl', ]) samples = load_code_samples(root_dir, keyword='one') assert len(samples) == 2
def test_sorting_by_endpoint(temp_files_factory, run_sys_cmd): root_dir = temp_files_factory([ f'api/endpoint/{method}/curl' for method in ('GET', 'POST', 'PUT', 'DELETE') ]) samples = load_code_samples(root_dir) methods = [sample.http_method for sample in samples] assert methods == [ HttpMethod.post, HttpMethod.get, HttpMethod.put, HttpMethod.delete ]
def test_test_session_return_value( status_codes, expected_failures, runner_sample_factory, run_sys_cmd, mocked_parse_stdout, reporter, temp_files_factory): root_dir = temp_files_factory([ 'api/user/POST/curl', 'api/user/GET/curl' ]) session = TestSession(load_code_samples(root_dir)) mocked_parse_stdout.side_effect = [({}, code) for code in status_codes] failed_count = session.run() assert failed_count == expected_failures
def test_base_loading(sample_filename, temp_files_factory, run_sys_cmd): root_dir = temp_files_factory([ 'api/endpoint/POST/sample.js', 'api/endpoint/POST/sample.py', 'api/endpoint/POST/curl', 'api/endpoint/POST/trash' ]) samples = load_code_samples(root_dir) assert len(samples) == 3 sample = CodeSample(path=root_dir / f'api/endpoint/POST/{sample_filename}', name='api/endpoint', http_method=HttpMethod.post) assert sample in samples
def test_parents_and_child_sorting_simple(temp_files_factory): root_dir = temp_files_factory([ 'api/_parent/POST/curl', 'api/_parent_{id}/DELETE/curl', 'api/_parent_{id}_child/POST/curl', 'api/_parent_{id}_child_{childId}/DELETE/curl', ]) samples = load_code_samples(root_dir) sorted_names = [(sample.name, sample.http_method) for sample in samples] assert sorted_names == [ ('api/parent', HttpMethod.post), ('api/parent/{id}/child', HttpMethod.post), ('api/parent/{id}/child/{childId}', HttpMethod.delete), ('api/parent/{id}', HttpMethod.delete), ]
def factory(lang: Language) -> (CodeRunner, CodeSample): if lang == Language.shell: runner = CurlRunner() name = 'curl' elif lang == Language.python: runner = PythonRunner() # type: ignore name = 'sample.py' elif lang == Language.js: runner = NodeRunner() # type: ignore name = 'sample.js' else: raise ValueError('Unknown language') root_dir = temp_files_factory([f'api/GET/{name}']) sample = load_code_samples(root_dir)[0] return runner, sample
def test_reusing_response_from_prev_requests( run_sys_cmd, mocked_parse_stdout, temp_files_factory, reporter, no_cleanup): root_dir = temp_files_factory([ 'api/user/POST/curl', 'api/user/{id}/GET/curl' ]) samples = load_code_samples(root_dir) assert samples[-1].http_method == HttpMethod.get mocked_parse_stdout.return_value = ({'id': 1}, 200) original_source_code = 'curl website/api/user/{id}' expected_source_code = 'curl website/api/user/1' samples[-1].path.write_text(original_source_code) session = TestSession(samples) session.run() actual_code = session.runners[Language.shell].tmp_sample_path.read_text() assert actual_code == expected_source_code
def test_http_methods_parsing(dir_name, expected_method, temp_files_factory, run_sys_cmd): root_dir = temp_files_factory([f'api/{dir_name}/sample.js']) samples = load_code_samples(root_dir) assert samples assert samples[0].http_method == expected_method
def test_correct_name_is_loaded(sample_path, expected_name, temp_files_factory, run_sys_cmd): root_dir = temp_files_factory([sample_path]) samples = load_code_samples(root_dir) assert samples assert samples[0].name == expected_name