def METHOD_NAME(test_name, field_path, filter_template, body, expected_data):
    config = {"response_override": "stop_if_you_see_me"}
    parameters = {"parameters_field": "data", "created_at": "06-07-21"}
    stream_state = {"created_at": "06-06-21"}
    stream_slice = {"last_seen": "06-10-21"}
    next_page_token = {"last_seen_id": 14}
    first_transformation = Mock(spec=RecordTransformation)
    second_transformation = Mock(spec=RecordTransformation)
    transformations = [first_transformation, second_transformation]
    response = create_response(body)
    decoder = JsonDecoder(parameters={})
    extractor = DpathExtractor(field_path=field_path, decoder=decoder, config=config, parameters=parameters)
    if filter_template is None:
        record_filter = None
    else:
        record_filter = RecordFilter(config=config, condition=filter_template, parameters=parameters)
    record_selector = RecordSelector(
        extractor=extractor,
        record_filter=record_filter,
        transformations=transformations,
        config=config,
        parameters=parameters
    )
    actual_records = record_selector.select_records(
        response=response, stream_state=stream_state, stream_slice=stream_slice, next_page_token=next_page_token
    )
    assert actual_records == [Record(data, stream_slice) for data in expected_data]
    calls = []
    for record in expected_data:
        calls.append(call(record, config=config, stream_state=stream_state, stream_slice=stream_slice))
    for transformation in transformations:
        assert transformation.transform.call_count == len(expected_data)
        transformation.transform.assert_has_calls(calls)