Compare commits
No commits in common. '5a4c3146edf37f7033df84199d8ba6f7a1c1eaf0' and '66ad45007e17d9ab22d4e76b89b8afa193b190fc' have entirely different histories.
5a4c3146ed
...
66ad45007e
2 changed files with 23 additions and 268 deletions
@ -1,274 +1,16 @@ |
|||||||
# This is the template for the InnoDrive e2e and domain and computation test cases. |
# This is the template for the InnoDrive e2e and domain and computation test cases. |
||||||
|
|
||||||
import pytest |
import pytest |
||||||
import json |
|
||||||
|
|
||||||
from httpx import Client |
from httpx import Client |
||||||
|
|
||||||
my_spec = { |
|
||||||
"budget_minute_price": 17, |
|
||||||
"luxury_minute_price": 37, |
|
||||||
"budget_km_price": 11, |
|
||||||
"deviation": 0.14, |
|
||||||
"inno_discount": 0.06 |
|
||||||
} |
|
||||||
|
|
||||||
type_cases = ['budget', 'luxury', 'string'] |
|
||||||
plan_cases = ['fixed_price', 'minute', 'string'] |
|
||||||
distance_cases = [-1, 0, 10] |
|
||||||
inno_discount = ['yes', 'no', 'string'] |
|
||||||
time_cases = [-1, 0, 10] |
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="module") |
@pytest.fixture(scope="module") |
||||||
def test_app(): |
def test_app(): |
||||||
client = Client(base_url="https://instructors.pg.innopolis.university/innodrive") |
client = Client(base_url="https://innodrive.containers.cloud.ru") |
||||||
yield client |
yield client # testing happens here |
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("email", ["m.matantsev@innopolis.university"]) |
@pytest.mark.parametrize("email", ["i.ivanov@innopolis.university"]) |
||||||
def test_spec(test_app, email): |
def test_spec(test_app, email): |
||||||
response = test_app.get("/spec/"+email) |
response = test_app.get("/spec/"+email) |
||||||
assert response.status_code == 200 |
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("email", ["m.matantsev@innopolis.university"]) |
|
||||||
@pytest.mark.parametrize( |
|
||||||
"type, plan, distance, time, inno_discount, expected_code", |
|
||||||
[ |
|
||||||
# Test case 1: Budget, fixed_price, distance = 10, time = 10, with discount |
|
||||||
(type_cases[0], plan_cases[0], distance_cases[2], time_cases[2], inno_discount[0], 200), |
|
||||||
# Test case 2: Budget, minute, distance = 10, time = 10, with discount |
|
||||||
(type_cases[0], plan_cases[1], distance_cases[2], time_cases[2], inno_discount[0], 200), |
|
||||||
# Test case 3: Budget, minute, distance = -1, time = 10, with discount |
|
||||||
(type_cases[0], plan_cases[1], distance_cases[0], time_cases[2], inno_discount[0], 406), |
|
||||||
# Test case 4: Luxury, minute, distance = 10, time = 10, with discount |
|
||||||
(type_cases[1], plan_cases[1], distance_cases[2], time_cases[2], inno_discount[0], 200), |
|
||||||
# Test case 5: Budget, fixed_price, distance = 0, time = 10, with discount |
|
||||||
(type_cases[0], plan_cases[0], distance_cases[1], time_cases[2], inno_discount[0], 406), |
|
||||||
] |
|
||||||
) |
|
||||||
def test_distance(test_app, email, type, plan, distance, time, inno_discount, expected_code): |
|
||||||
data = { |
|
||||||
"type": type, |
|
||||||
"plan": plan, |
|
||||||
"distance": distance, |
|
||||||
"planned_distance": distance, |
|
||||||
"time": time, |
|
||||||
"planned_time": time, |
|
||||||
"inno_discount": inno_discount |
|
||||||
} |
|
||||||
response = test_app.post("/price/" + email, content=json.dumps(data)) |
|
||||||
assert response.status_code == expected_code |
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("email", ["m.matantsev@innopolis.university"]) |
|
||||||
@pytest.mark.parametrize( |
|
||||||
"ride_type, expected_output", |
|
||||||
[ |
|
||||||
# Test case 1: Budget |
|
||||||
(type_cases[0], 200), |
|
||||||
# Test case 2: Luxury |
|
||||||
(type_cases[1], 200), |
|
||||||
# Test case 3: nonsense |
|
||||||
(type_cases[2], 406), |
|
||||||
] |
|
||||||
) |
|
||||||
def test_ride_type(test_app, email, ride_type, expected_output): |
|
||||||
# gives 200 on nonsense for ride type |
|
||||||
data = { |
|
||||||
"type": ride_type, |
|
||||||
"plan": "fixed_price", |
|
||||||
"distance": 10, |
|
||||||
"planned_distance": 10, |
|
||||||
"time": 10, |
|
||||||
"planned_time": 10, |
|
||||||
"inno_discount": "no" |
|
||||||
} |
|
||||||
response = test_app.post("/price/" + email, content=json.dumps(data)) |
|
||||||
assert response.status_code == expected_output |
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("email", ["m.matantsev@innopolis.university"]) |
|
||||||
@pytest.mark.parametrize( |
|
||||||
"plan_type, expected_output", |
|
||||||
[ |
|
||||||
# Test case 1: Minute |
|
||||||
(plan_cases[0], 200), |
|
||||||
# Test case 2: Fixed |
|
||||||
(plan_cases[1], 200), |
|
||||||
# Test case 3: nonsense |
|
||||||
(plan_cases[2], 406), |
|
||||||
] |
|
||||||
) |
|
||||||
def test_ride_plan(test_app, email, plan_type, expected_output): |
|
||||||
data = { |
|
||||||
"type": "budget", |
|
||||||
"plan": plan_type, |
|
||||||
"distance": 10, |
|
||||||
"planned_distance": 10, |
|
||||||
"time": 10, |
|
||||||
"planned_time": 10, |
|
||||||
"inno_discount": "no" |
|
||||||
} |
|
||||||
response = test_app.post("/price/" + email, content=json.dumps(data)) |
|
||||||
assert response.status_code == expected_output |
|
||||||
|
|
||||||
@pytest.mark.parametrize("email", ["m.matantsev@innopolis.university"]) |
|
||||||
@pytest.mark.parametrize( |
|
||||||
"discount, expected_output", |
|
||||||
[ |
|
||||||
# Test case 1: Minute |
|
||||||
(inno_discount[0], 200), |
|
||||||
# Test case 2: Fixed |
|
||||||
(inno_discount[1], 200), |
|
||||||
# Test case 3: nonsense |
|
||||||
(inno_discount[2], 406), |
|
||||||
] |
|
||||||
) |
|
||||||
def test_discount(test_app, email, discount, expected_output): |
|
||||||
# gives 200 on nonsense for discount |
|
||||||
data = { |
|
||||||
"type": "budget", |
|
||||||
"plan": "minute", |
|
||||||
"distance": 10, |
|
||||||
"planned_distance": 10, |
|
||||||
"time": 10, |
|
||||||
"planned_time": 10, |
|
||||||
"inno_discount": discount |
|
||||||
} |
|
||||||
response = test_app.post("/price/" + email, content=json.dumps(data)) |
|
||||||
assert response.status_code == expected_output |
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("email", ["m.matantsev@innopolis.university"]) |
assert response.status_code == 200 |
||||||
@pytest.mark.parametrize( |
|
||||||
"time, expected_output", |
|
||||||
[ |
|
||||||
# Test case 1: Minute |
|
||||||
(time_cases[0], 406), |
|
||||||
# Test case 2: Fixed |
|
||||||
(time_cases[1], 406), |
|
||||||
# Test case 3: nonsense |
|
||||||
(time_cases[2], 200), |
|
||||||
] |
|
||||||
) |
|
||||||
def test_time(test_app, email, time, expected_output): |
|
||||||
data = { |
|
||||||
"type": "budget", |
|
||||||
"plan": "minute", |
|
||||||
"distance": 10, |
|
||||||
"planned_distance": 10, |
|
||||||
"time": time, |
|
||||||
"planned_time": time, |
|
||||||
"inno_discount": "no" |
|
||||||
} |
|
||||||
response = test_app.post("/price/" + email, content=json.dumps(data)) |
|
||||||
assert response.status_code == expected_output |
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("email", ["m.matantsev@innopolis.university"]) |
|
||||||
@pytest.mark.parametrize( |
|
||||||
"ride_type, plan_type, expected_output", |
|
||||||
[ |
|
||||||
# Test case 1: Budget + minute |
|
||||||
(type_cases[0], plan_cases[1], 200), |
|
||||||
# Test case 2: Budget + fixed |
|
||||||
(type_cases[0], plan_cases[0], 200), |
|
||||||
# Test case 3: Luxury + minute |
|
||||||
(type_cases[1], plan_cases[1], 200), |
|
||||||
# Test case 4: Luxury + fixed |
|
||||||
(type_cases[1], plan_cases[0], 406), |
|
||||||
] |
|
||||||
) |
|
||||||
def test_type_plan(test_app, email, ride_type, plan_type, expected_output): |
|
||||||
#Luxury + fixed gives 200 - error |
|
||||||
data = { |
|
||||||
"type": ride_type, |
|
||||||
"plan": plan_type, |
|
||||||
"distance": 10, |
|
||||||
"planned_distance": 10, |
|
||||||
"time": 10, |
|
||||||
"planned_time": 10, |
|
||||||
"inno_discount": "no" |
|
||||||
} |
|
||||||
response = test_app.post("/price/" + email, content=json.dumps(data)) |
|
||||||
assert response.status_code == expected_output |
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("email", ["m.matantsev@innopolis.university"]) |
|
||||||
def test_type_budget_min_computational_ok(test_app, email): |
|
||||||
data = { |
|
||||||
"type": type_cases[0], |
|
||||||
"plan": plan_cases[1], |
|
||||||
"distance": distance_cases[2], |
|
||||||
"planned_distance": distance_cases[2], |
|
||||||
"time": time_cases[2], |
|
||||||
"planned_time": time_cases[2], |
|
||||||
"inno_discount": inno_discount[1] |
|
||||||
} |
|
||||||
response = test_app.post("/price/" + email, content=json.dumps(data)) |
|
||||||
assert response.json()['price'] == my_spec["budget_minute_price"] * time_cases[2] |
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("email", ["m.matantsev@innopolis.university"]) |
|
||||||
def test_type_budget_km_computational_ok(test_app, email): |
|
||||||
data = { |
|
||||||
"type": type_cases[0], |
|
||||||
"plan": plan_cases[0], |
|
||||||
"distance": distance_cases[2], |
|
||||||
"planned_distance": distance_cases[2], |
|
||||||
"time": time_cases[2], |
|
||||||
"planned_time": time_cases[2], |
|
||||||
"inno_discount": inno_discount[1] |
|
||||||
} |
|
||||||
response = test_app.post("/price/" + email, content=json.dumps(data)) |
|
||||||
assert response.json()['price'] == my_spec["budget_km_price"] * distance_cases[2] |
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("email", ["m.matantsev@innopolis.university"]) |
|
||||||
def test_type_luxury_min_computational_err(test_app, email): |
|
||||||
# computational Error => 481 got, but require 370 |
|
||||||
data = { |
|
||||||
"type": type_cases[1], |
|
||||||
"plan": plan_cases[1], |
|
||||||
"distance": distance_cases[2], |
|
||||||
"planned_distance": distance_cases[2], |
|
||||||
"time": time_cases[2], |
|
||||||
"planned_time": time_cases[2], |
|
||||||
"inno_discount": inno_discount[1] |
|
||||||
} |
|
||||||
response = test_app.post("/price/" + email, content=json.dumps(data)) |
|
||||||
assert response.json()['price'] == my_spec["luxury_minute_price"] * time_cases[2] |
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("email", ["m.matantsev@innopolis.university"]) |
|
||||||
def test_type_luxury_min_deviation_err(test_app, email): |
|
||||||
# computational Error => 481 got, but max price with deviation is 421.8 |
|
||||||
data = { |
|
||||||
"type": type_cases[1], |
|
||||||
"plan": plan_cases[1], |
|
||||||
"distance": distance_cases[2], |
|
||||||
"planned_distance": distance_cases[2], |
|
||||||
"time": time_cases[2], |
|
||||||
"planned_time": time_cases[2], |
|
||||||
"inno_discount": inno_discount[1] |
|
||||||
} |
|
||||||
response = test_app.post("/price/" + email, content=json.dumps(data)) |
|
||||||
assert response.json()['price'] == my_spec["luxury_minute_price"] * time_cases[2] * (1+my_spec["deviation"]) |
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("email", ["m.matantsev@innopolis.university"]) |
|
||||||
def test_type_luxury_discount_err(test_app, email): |
|
||||||
# discount is not being applied - unreal to calculate it |
|
||||||
data = { |
|
||||||
"type": type_cases[0], |
|
||||||
"plan": plan_cases[0], |
|
||||||
"distance": distance_cases[2], |
|
||||||
"planned_distance": distance_cases[2], |
|
||||||
"time": time_cases[2], |
|
||||||
"planned_time": time_cases[2], |
|
||||||
"inno_discount": inno_discount[0] |
|
||||||
} |
|
||||||
response = test_app.post("/price/" + email, content=json.dumps(data)) |
|
||||||
assert response.json()['price'] == my_spec["budget_km_price"] * distance_cases[2] * (1 - my_spec["inno_discount"]) |
|
||||||
|
|||||||
Loading…
Reference in new issue