Exemple #1
0
def test_middleware_methods_are_called(api, client):
    process_request_called = False
    process_response_called = False

    class CallMiddlewareMethods(Middleware):
        def __init__(self, app):
            super().__init__(app)

        def process_request(self, request):
            nonlocal process_request_called
            process_request_called = True

        def process_response(self, response):
            nonlocal process_response_called
            process_response_called = True

    api.add_middleware(CallMiddlewareMethods)

    @api.route('/')
    def home(request, response):
        response.text = 'hello'
        return response

    client.get(TEST_URL + '/')

    assert process_request_called is True
    assert process_response_called is True
def test_download_json(mocker):
    download_parquet_data = mocker.patch(
        'app.routers.downloads.download_parquet_data_v1')
    download_parquet_data.return_value = ([{'data': 'data'}], HTTPStatus.OK)
    get_guid_config = mocker.patch('app.routers.downloads.get_guid_config')
    get_guid_config.return_value = 'INDEX', 'HORIZON'

    response = client.get('/v1/12345/json',
                          headers={'Authorization': ACCESS_TOKEN},
                          params={
                              'from_date': '2021-01-01',
                              'to_date': '2021-01-02'
                          })

    assert response.status_code == HTTPStatus.OK
    assert download_parquet_data.called
    assert download_parquet_data.await_args.args == ('12345', ACCESS_TOKEN,
                                                     'INDEX', 'HORIZON',
                                                     '2021-01-01',
                                                     '2021-01-02')
    assert response.json() == [{'data': 'data'}]

    response = client.get(
        '/v1/12345/json',
        headers={'Authorization': ACCESS_TOKEN},
    )

    assert response.status_code == HTTPStatus.OK
    assert download_parquet_data.called
    assert download_parquet_data.await_args.args == ('12345', ACCESS_TOKEN,
                                                     'INDEX', 'HORIZON', None,
                                                     None)
    assert response.json() == [{'data': 'data'}]
Exemple #3
0
def test_parametrized_route(api, client):
    @api.route('/posts/{id}')
    def posts(request, response, id):
        response.text = f'post {id}'
        return response

    assert client.get(TEST_URL + '/posts/1').status_code == 200
    assert client.get(TEST_URL + '/posts/1').text == 'post 1'
    assert client.get(TEST_URL + '/posts/33').text == 'post 33'
Exemple #4
0
def test_download_neptun(mocker):
    import app.routers.neptun
    download_parquet_data = mocker.patch('app.routers.neptun.download_parquet_data_v1')
    download_parquet_data.return_value = ([{'data': 'data'}], HTTPStatus.OK)
    get_guid_config = mocker.patch('app.routers.neptun.get_guid_config')
    get_guid_config.return_value = 'INDEX', 'HORIZON'

    app.routers.neptun.config = {'Neptun': {'daily_guid': 'daily_guid_1234',
                                               'hourly_guid': 'hourly_guid_1234',
                                               'minutely_guid': 'minutely_guid_1234'}}

    response = client.get(
        '/v1/neptun',
        headers={'Authorization': ACCESS_TOKEN},
        params={'horizon': 'DAILY', 'from_date': '2021-01-01', 'to_date': '2021-01-02', 'tags': 'TAG1, TAG2'}
    )

    assert response.status_code == HTTPStatus.OK
    assert download_parquet_data.called
    assert download_parquet_data.await_args.args == ('daily_guid_1234', ACCESS_TOKEN, 'INDEX', 'HORIZON',
                                                     '2021-01-01', '2021-01-02',
                                                     [[('Tag', '=', 'TAG1')], [('Tag', '=', ' TAG2')]])
    assert response.json() == [{'data': 'data'}]

    response = client.get(
        '/v1/neptun',
        headers={'Authorization': ACCESS_TOKEN},
        params={'horizon': 'HOURLY', 'from_date': '2021-01-01', 'to_date': '2021-01-02'}
    )

    assert response.status_code == HTTPStatus.OK
    assert download_parquet_data.called
    assert download_parquet_data.await_args.args == ('hourly_guid_1234', ACCESS_TOKEN, 'INDEX', 'HORIZON',
                                                     '2021-01-01', '2021-01-02', None)
    assert response.json() == [{'data': 'data'}]

    response = client.get(
        '/v1/neptun',
        headers={'Authorization': ACCESS_TOKEN},
        params={'horizon': 'MINUTELY', 'from_date': '2021-01-01', 'to_date': '2021-01-02'}
    )

    assert response.status_code == HTTPStatus.OK
    assert download_parquet_data.called
    assert download_parquet_data.await_args.args == ('minutely_guid_1234', ACCESS_TOKEN, 'INDEX', 'HORIZON',
                                                     '2021-01-01', '2021-01-02', None)
    assert response.json() == [{'data': 'data'}]

    response = client.get(
        '/v1/neptun',
        headers={'Authorization': ACCESS_TOKEN},
        params={'horizon': 'YEARLY', 'from_date': '2021-01-01', 'to_date': '2021-01-02'}
    )

    assert response.status_code == HTTPStatus.BAD_REQUEST
    assert response.json()['detail'] == '(ValueError) The horizon parameter must be Daily, Hourly or Minutely.'
Exemple #5
0
def test_weather(client):
    Config.WEATHER_API_KEY = "c376a81f73mshb9a443574833ecdp1bc627jsnc4245b06df70"
    Config.WEATHER_API_URL = "https://community-open-weather-map.p.rapidapi.com/find"
    Config.WEATHER_API_HOST = "community-open-weather-map.p.rapidapi.com"
    response = client.get('/weather?city=London')
    assert response.status_code == 200
    response = client.get('/weather?city=Lviv,London')
    assert response.status_code == 200
    response = client.get('/weather?city=L')
    assert response.status_code == 200
Exemple #6
0
def test_search_weather(client):
    Config.WEATHER_API_KEY = "53493f042amsh58b54fe3ed83e24p195f98jsnf109acbc59d2"
    Config.WEATHER_API_URL = "https://community-open-weather-map.p.rapidapi.com/find"
    Config.WEATHER_API_HOST = "community-open-weather-map.p.rapidapi.com"
    response = client.get('/weather?city=Lviv')
    assert response.status_code == 200
    response = client.get('/weather?city=Paris,Barcelona')
    assert response.status_code == 200
    response = client.get('/weather?city=B')
    assert response.status_code == 404
    response = client.get('/weather?city=.')
    assert response.status_code == 404
Exemple #7
0
def test_class_based_view_get(api, client):
    @api.route('/posts')
    class PostsView:
        def get(self, request, response):
            id = request.GET.get('id')
            if id is None:
                response.text = 'posts'
            else:
                response.text = f'post {id}'
            return response

    assert client.get(TEST_URL + '/posts').text == 'posts'
    assert client.get(TEST_URL + '/posts?id=5').text == 'post 5'
def test_download_dmi_list(mocker):
    import app.routers.dmi
    download_blob_to_stream = mocker.patch('app.routers.dmi.download_blob_to_stream')

    test_df = pd.DataFrame({'lon': [1, 2], 'lat': [2, 3]})
    bytes_io_file = BytesIO()
    test_df.to_parquet(bytes_io_file, engine='pyarrow', compression='snappy')
    bytes_io_file.seek(0)

    download_blob_to_stream.return_value = bytes_io_file

    app.routers.dmi.config = {'DMI': {'guid': 'dmi_guid'}}

    response = client.get(
        '/v1/dmi_list',
        headers={'Authorization': ACCESS_TOKEN},
        params={'from_date': '2021-01'}
    )

    path = 'dmi_guid/year=2021/month=01/data.parquet'

    assert response.status_code == HTTPStatus.OK
    assert download_blob_to_stream.called
    assert download_blob_to_stream.await_args.args == (path, ACCESS_TOKEN)
    assert response.json() == [{'lon': 1, 'lat': 2}, {'lon': 2, 'lat': 3}]
Exemple #9
0
def test_templates(tmpdir_factory):

    title = 'Microframework'
    name = 'tiny-web'
    template_content = f'<title>{title}</title><body>{name}</body>'
    template_dir = tmpdir_factory.mktemp('./templates')
    template = template_dir.join('index.html')
    template.write(template_content)
    api = Api(templates_dir=template_dir)
    client = api.test_session()

    @api.route('/')
    def home(request, response):
        context = {
            'title': title,
            'name': name,
        }
        response.html = api.template('index.html', context)
        return response

    response = client.get(TEST_URL + '/')

    assert 'text/html' in response.headers['Content-Type']
    assert title in response.text
    assert name in response.text
Exemple #10
0
def test_loan_endpoint_without_start_date(client):
    rv = client.get('/loan-outstanding-percentages/500?end_date=2016-07-05')
    assert rv.status_code == 200
    assert rv.json == [{
        'all_outstanding_shares': '100.0000',
        'date': 'Mon, 04 Jul 2016 00:00:00 GMT',
        'floating_shares': '100.0000',
        'loan_outstanding_amount': '100.0000',
        'loan_outstanding_shares': '100.0000',
        'loan_utilization_percentage': '100.00',
        'loan_utilization_percentage_amount': '100.00',
        'loan_utilization_percentage_shares': '100.00',
        'market_cap': '100.0000',
        'prev_valid_free_floats': '100.0000',
        'prev_valid_outstanding_shares': '100.0000',
        'security_id': 500
    }, {
        'all_outstanding_shares': '100.0000',
        'date': 'Tue, 05 Jul 2016 00:00:00 GMT',
        'floating_shares': '100.0000',
        'loan_outstanding_amount': '100.0000',
        'loan_outstanding_shares': '100.0000',
        'loan_utilization_percentage': '100.00',
        'loan_utilization_percentage_amount': '100.00',
        'loan_utilization_percentage_shares': '100.00',
        'market_cap': '100.0000',
        'prev_valid_free_floats': '100.0000',
        'prev_valid_outstanding_shares': '100.0000',
        'security_id': 500
    }]
Exemple #11
0
def test_get_ride(client):
    rideId: int = 6
    response = client.get("/rides/" + str(rideId))
    assert response.status_code == 200
    response_data = json.loads(response.get_data(as_text=True))
    assert 'data' in response_data
    assert isinstance(response_data['data'], dict)
Exemple #12
0
def test_short_volume_endpoint(client):
    rv = client.get('/short-volume-percentages/500?start_date=2016-07-04&end_date=2016-07-04')
    assert rv.status_code == 200
    assert rv.json == [{'date': 'Mon, 04 Jul 2016 00:00:00 GMT',
                        'security_id': 500,
                        'short_volume': '50.0000',
                        'short_volume_percentage': '50.00',
                        'trading_volume': '50.0000'}]
Exemple #13
0
def test_get_ride_not_found(client, ride_id):
    assert type(ride_id) is int
    response = client.get("/rides/" + str(ride_id))
    assert response.status_code == 404
    if ride_id > 0:
        response_data = json.loads(response.get_data(as_text=True))
        assert 'message' in response_data
        assert isinstance(response_data['message'], str)
def test_update(client):
    update_data = {"text": "blablabla"}

    response = client.put("/todos/1", json=update_data)
    assert response.status_code == 200
    get_response = client.get("/todos/1")
    assert get_response.status_code == 200
    assert get_response.json['1'] == "blablabla"
Exemple #15
0
def test_alternative_add_route(api, client):
    def home(request, response):
        response.text = 'alternative'
        return response

    api.add_route('/home', home)

    assert client.get(TEST_URL + '/home').status_code == 200
Exemple #16
0
def test_api_test_client_works(api, client):
    response_text = 'works'

    @api.route('/foo')
    def foo(request, response):
        response.text = response_text
        return response

    assert client.get(TEST_URL + '/foo').text == response_text
def test_single_search_true(client):
    rv = client.get('/search/삼성전자')
    assert rv.status_code == 200
    assert rv.json == [{
        "id": 314,
        "english_name": "SamsungElectronics",
        "name": "삼성전자",
        "ticker": "005930"
    }]
Exemple #18
0
def test_plain_response(api, client):
    @api.route('/text')
    def text_handler(request, response):
        response.text = 'hello'
        return response

    response = client.get(TEST_URL + '/text')

    assert response.headers['Content-Type'] == 'text/plain; charset=UTF-8'
    assert response.text == 'hello'
Exemple #19
0
def test_html_response(api, client):
    @api.route('/html')
    def html_handler(request, response):
        response.html = '<h1>Hello</h1>'
        return response

    response = client.get(TEST_URL + '/html')

    assert response.headers['Content-Type'] == 'text/html; charset=UTF-8'
    assert response.text == '<h1>Hello</h1>'
Exemple #20
0
def test_json_response(api, client):
    @api.route('/json')
    def json_handler(request, response):
        response.json = {'message': 'hello'}
        return response

    response = client.get(TEST_URL + '/json')

    assert response.headers['Content-Type'] == 'application/json'
    assert response.json()['message'] == 'hello'
Exemple #21
0
def test_static_is_served(tmpdir_factory):
    static_dir = tmpdir_factory.mktemp('static')
    _create_static(static_dir)
    api = Api(static_dir=str(static_dir))
    client = api.test_session()

    response = client.get(TEST_URL + f'/static/{FILE_DIR}/{FILE_NAME}')

    assert response.status_code == 200
    assert response.text == FILE_CONTENTS
Exemple #22
0
def test_loan_endpoint_without_end_date(client):
    rv = client.get('/days-to-covers/631?start_date=2016-07-04')
    assert rv.status_code == 200
    assert rv.json == [{
        "date":
        "Mon, 04 Jul 2016 00:00:00 GMT",
        "days_to_cover_in_amount":
        "0.39",
        "days_to_cover_in_shares":
        "0.39",
        "security_id":
        631,
        "short_outstanding_amount":
        "35931975000.0000",
        "short_outstanding_shares":
        "49425.0000",
        "twenty_days_moving_average_trading_amount":
        "91136813750.0000",
        "twenty_days_moving_average_trading_volume":
        "127226.0000"
    }, {
        "date":
        "Tue, 05 Jul 2016 00:00:00 GMT",
        "days_to_cover_in_amount":
        "0.34",
        "days_to_cover_in_shares":
        "0.32",
        "security_id":
        631,
        "short_outstanding_amount":
        "30985500000.0000",
        "short_outstanding_shares":
        "41314.0000",
        "twenty_days_moving_average_trading_amount":
        "92378772400.0000",
        "twenty_days_moving_average_trading_volume":
        "128596.2500"
    }, {
        "date":
        "Wed, 06 Jul 2016 00:00:00 GMT",
        "days_to_cover_in_amount":
        "0.32",
        "days_to_cover_in_shares":
        "0.31",
        "security_id":
        631,
        "short_outstanding_amount":
        "30047340000.0000",
        "short_outstanding_shares":
        "40332.0000",
        "twenty_days_moving_average_trading_amount":
        "92924194100.0000",
        "twenty_days_moving_average_trading_volume":
        "129156.6500"
    }]
Exemple #23
0
def test_allowed_method_for_func_based_views(api, client):
    @api.route('/', allowed_methods=['get', 'post'])
    def home(request, response):
        response.text = 'hello'
        return response

    assert client.get(TEST_URL + '/').status_code == 200
    assert client.post(TEST_URL + '/').status_code == 200

    with pytest.raises(AttributeError):
        client.delete(TEST_URL + '/')
def test_connection_missing_headers(mocker):
    directory_client = mocker.patch(
        'app.routers.grafana_json.__get_directory_client')
    check_directory_exist = mocker.patch(
        'app.routers.grafana_json.check_directory_exist')

    response = client.get('v1/grafana/12345')

    assert response.status_code == HTTPStatus.BAD_REQUEST
    assert not directory_client.called
    assert not check_directory_exist.called
Exemple #25
0
def test_short_volume_endpoint_without_end_date(client):
    rv = client.get('/short-volume-percentages/500?start_date=2016-07-05')
    assert rv.json ==   [{'date': 'Tue, 05 Jul 2016 00:00:00 GMT',
                        'security_id': 500,
                        'short_volume': '50.0000',
                        'short_volume_percentage': '50.00',
                        'trading_volume': '50.0000'},
                        {'date': 'Wed, 06 Jul 2016 00:00:00 GMT',
                        'security_id': 500,
                        'short_volume': '50.0000',
                        'short_volume_percentage': '50.00',
                        'trading_volume': '50.0000'}]
def test_short_out_with_all(client):
    rv = client.get(
        '/short-outstanding-percentages/500?start_date=2016-07-04&end_date=2016-07-04'
    )
    assert rv.status_code == 200
    assert rv.json == [{
        "date": "Mon, 04 Jul 2016 00:00:00 GMT",
        "floating_shares": "100.0000",
        "security_id": 500,
        "short_outstanding_percentage": "100.00",
        "short_outstanding_shares": "100.0000"
    }]
Exemple #27
0
def test_exception_handler(api, client):
    def on_exception(request, response, exception_class):
        response.text = 'Attribute error'
        return response

    api.add_custom_exception_handler(on_exception)

    @api.route('/')
    def home(request, response):
        raise AttributeError()

    response = client.get(TEST_URL + '/')

    assert response.text == 'Attribute error'
def test_multiple_search_true(client):
    rv = client.get('/search/삼성')
    assert rv.status_code == 200
    assert rv.json == [{
        "english_name": "SamsungFire&MarineInsurance",
        "id": 51,
        "name": "삼성화재",
        "ticker": "000810"
    }, {
        "id": 314,
        "english_name": "SamsungElectronics",
        "name": "삼성전자",
        "ticker": "005930"
    }]
def test_connection(mocker):
    directory_client = mocker.patch(
        'app.routers.grafana_json.__get_directory_client')
    check_directory_exist = mocker.patch(
        'app.routers.grafana_json.check_directory_exist')

    response = client.get('v1/grafana/12345',
                          headers={
                              'client-id': 'mr_test',
                              'client-secret': 'secret'
                          })

    assert response.status_code == HTTPStatus.OK
    assert directory_client.called
    assert directory_client.call_args.args == ('12345', 'mr_test', 'secret')
    assert check_directory_exist.called
def test_retrieve_state(mocker):
    directory_client = mocker.patch(
        'app.routers.uploads.DataLakeDirectoryClient')
    download_file = mocker.patch('app.routers.uploads.__download_file')
    buffered_file = mocker.patch('_io.BufferedRandom')

    json_data = {'test1': 'test2'}
    download_file.return_value = buffered_file
    buffered_file.readall.return_value = json.dumps(json_data)

    response = client.get('/12345/retrieve_state',
                          headers={'Authorization': ACCESS_TOKEN})

    assert directory_client.called
    assert response.status_code == HTTPStatus.FOUND
    assert response.json() == json_data