1 changed files with 263 additions and 5 deletions
@ -1,16 +1,274 @@
@@ -1,16 +1,274 @@
|
||||
# This is the template for the InnoDrive e2e and domain and computation test cases. |
||||
|
||||
import pytest |
||||
import json |
||||
|
||||
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") |
||||
def test_app(): |
||||
client = Client(base_url="https://innodrive.containers.cloud.ru") |
||||
yield client # testing happens here |
||||
client = Client(base_url="https://instructors.pg.innopolis.university/innodrive") |
||||
yield client |
||||
|
||||
@pytest.mark.parametrize("email", ["i.ivanov@innopolis.university"]) |
||||
def test_spec(test_app, email): |
||||
response = test_app.get("/spec/"+email) |
||||
|
||||
@pytest.mark.parametrize("email", ["m.matantsev@innopolis.university"]) |
||||
def test_spec(test_app, 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"]) |
||||
@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