#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# Copyright 2023, School of Engineering and Architecture of Fribourg
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

from urllib.parse import urlencode
import json

__author__ = 'Michael Mader'
__date__ = "2023-03-12"
__version__ = "0.2"
__email__ = "michael.maeder@hefr.ch"


def call(client, path, params):
    """calling function that simulates an API webcall of a specific function/route
    
    Args:
        client: this is the client object used by pytest to 'simulate' the API without running the webserver
        path:   route of the API to use
        params: GET parameter that are passed to the function
    
    Returns:
        json:   the result of the client call
    """
    url = path + '?' + urlencode(params)
    response = client.get(url)
    return json.loads(response.data.decode('utf-8'))

# increment test 1
def test_plus_one1(client):
    result = call(client, '/inc', {'x': 2})
    assert result['x'] == 3

# increment test 1
def test_plus_one2(client):
    result = call(client, '/inc', {'x': -2})
    assert result['x'] == -1

# adding test with negative value
def test_plus_y(client):
    result = call(client, '/add', {'x': -2, 'y': 7})
    assert result['result'] == 5

# multiplication test
def test_multiply(client):
    result = call(client, '/mul', {'x': -2, 'y': 7})
    assert result['result'] == -14

# division test
def test_division(client):
    result = call(client, '/div', {'x': 35, 'y': 7})
    assert result['result'] == 5
