Skip to content

Commit

Permalink
Merge pull request #45 from CS222-UIUC/minh/fix_prod_tests
Browse files Browse the repository at this point in the history
Fix backend production tests and add support for deleting reviews
  • Loading branch information
xxxfzxxx authored Nov 13, 2022
2 parents 32bff1c + 382e9fc commit ef23fbc
Show file tree
Hide file tree
Showing 9 changed files with 168 additions and 92 deletions.
64 changes: 38 additions & 26 deletions src/backend/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from flask_cors import CORS
from pages.login import Login
from pages.mainpage import MainPage
from dataholders.mainpage_get import GetRequestType, Params
from dataholders.mainpage_get import GetRequestType, GetRequestParams

# from logging import FileHandler, WARNING
app = Flask(__name__)
Expand Down Expand Up @@ -74,7 +74,7 @@ def mainpage_get(mainpage_obj: MainPage, args: MultiDict):
args.get("pictures", default=False, type=bool),
)

param = Params(
param = GetRequestParams(
args.get("numApts", type=int),
args.get("aptId", type=int),
args.get("searchQuery", type=str),
Expand All @@ -85,13 +85,14 @@ def mainpage_get(mainpage_obj: MainPage, args: MultiDict):
return mainpage_process_get(mainpage_obj, action, param)


def mainpage_process_get(mainpage_obj: MainPage, action: GetRequestType, param: Params):
def mainpage_process_get(
mainpage_obj: MainPage, action: GetRequestType, param: GetRequestParams
):
"""Process the get requests"""
query_result = ""
if action.is_search is True and param.search_query is not None:
apts = mainpage_obj.search_apartments(param.search_query)
apts_dict = [dataclasses.asdict(apt) for apt in apts]
query_result = json.dumps(apts_dict)
query_result = dataclasses_into_json(apts)

elif action.is_populate is True and param.num_apts is not None:
apts = []
Expand All @@ -109,13 +110,11 @@ def mainpage_process_get(mainpage_obj: MainPage, action: GetRequestType, param:
apts = mainpage_obj.populate_apartments(
param.num_apts, price_sort, rating_sort, apt_id
)
apts_dict = [dataclasses.asdict(apt) for apt in apts]
query_result = json.dumps(apts_dict)
query_result = dataclasses_into_json(apts)

elif action.is_review is True and param.apt_id is not None:
reviews = mainpage_obj.get_apartments_reviews(param.apt_id)
reviews_dict = [dataclasses.asdict(review) for review in reviews]
query_result = json.dumps(reviews_dict)
query_result = dataclasses_into_json(reviews)

elif action.is_pictures is True and param.apt_id is not None:
query_result = json.dumps(mainpage_obj.get_apartments_pictures(param.apt_id))
Expand All @@ -133,26 +132,39 @@ def mainpage_post(mainpage_obj: MainPage):
"""
json_form = request.get_json(force=True)

is_delete = request.args.get("delete", default=False, type=bool)

if isinstance(json_form, dict):
apt_id = json_form.get("apt_id")
username = json_form.get("username")
comment = json_form.get("comment")
vote = json_form.get("vote")
if (
apt_id is not None
and username is not None
and comment is not None
and vote is not None
):
query_result = ""
reviews = mainpage_obj.write_apartment_review(
apt_id, username, comment, vote
)
reviews_dict = [dataclasses.asdict(review) for review in reviews]
query_result = json.dumps(reviews_dict)
return query_result, 201
if not is_delete:
apt_id = json_form.get("apt_id")
username = json_form.get("username")
comment = json_form.get("comment")
vote = json_form.get("vote")
if (
apt_id is not None
and username is not None
and comment is not None
and vote is not None
):
reviews = mainpage_obj.write_apartment_review(
apt_id, username, comment, vote
)
return dataclasses_into_json(reviews), 201
else:
apt_id = json_form.get("apt_id")
username = json_form.get("username")
if apt_id is not None and username is not None:
reviews = mainpage_obj.delete_apartment_review(apt_id, username)
return dataclasses_into_json(reviews), 201
return "", 400


def dataclasses_into_json(data_sequence: list):
"""Process dataclasses into json strings"""
data_dict = [dataclasses.asdict(data) for data in data_sequence]
query_result = json.dumps(data_dict)
return query_result


if __name__ == "__main__":
app.run(debug=True) # pragma: no cover
Binary file modified src/backend/database/database_prod.db
Binary file not shown.
Binary file modified src/backend/database/database_test.db
Binary file not shown.
122 changes: 61 additions & 61 deletions src/backend/database/schema.sql
Original file line number Diff line number Diff line change
Expand Up @@ -36,92 +36,92 @@ CREATE TABLE Reviews (
);

-- TEST
INSERT INTO Users (username, password, email, phone, apt_id)
VALUES ('Zongxian', '12345abcde', '[email protected]', '1234567890', 1);
INSERT INTO Users (user_id, username, password, email, phone, apt_id)
VALUES (1, 'Zongxian', '12345abcde', '[email protected]', '1234567890', 1);

INSERT INTO Users (username, password, email, phone, apt_id)
VALUES ('MonteCarlo', 'qwert#6767', '[email protected]', '9876543210', 2);
INSERT INTO Users (user_id, username, password, email, phone, apt_id)
VALUES (2, 'MonteCarlo', 'qwert#6767', '[email protected]', '9876543210', 2);

INSERT INTO Users (username, password, email, phone, apt_id)
VALUES ('Evans', 'asd', 'Evans.com', '9876543210', 3);
INSERT INTO Users (user_id, username, password, email, phone, apt_id)
VALUES (3, 'Evans', 'asd', 'Evans.com', '9876543210', 3);

INSERT INTO Users (username, password, email, phone, apt_id)
VALUES ('Xi', 'abcdefg', '[email protected]', '9876543210', 4);
INSERT INTO Users (user_id, username, password, email, phone, apt_id)
VALUES (4, 'Xi', 'abcdefg', '[email protected]', '9876543210', 4);

INSERT INTO Users (username, password, email, phone, apt_id)
VALUES ('Waterbottle', 'hello123', 'Minh.com', '9876543210', 5);
INSERT INTO Users (user_id, username, password, email, phone, apt_id)
VALUES (5, 'Waterbottle', 'hello123', 'Minh.com', '9876543210', 5);

INSERT INTO Users (username, password, email, phone, apt_id)
VALUES ('Pencil', 'qw??DASFD@$!@767', '[email protected]', '9876543210', 6);
INSERT INTO Users (user_id, username, password, email, phone, apt_id)
VALUES (6, 'Pencil', 'qw??DASFD@$!@767', '[email protected]', '9876543210', 6);

INSERT INTO Users (username, password, email, phone, apt_id)
VALUES ('Green alien', '1234324324fgrerw?$#@%?', 'Minh.com', '9876543210', 7);
INSERT INTO Users (user_id, username, password, email, phone, apt_id)
VALUES (7, 'Green alien', '1234324324fgrerw?$#@%?', 'Minh.com', '9876543210', 7);

INSERT INTO Users (username, password, email, phone, apt_id)
VALUES ('Jefferson', '0q4043jtqwt?$#T', '[email protected]', '123456789', 8);
INSERT INTO Users (user_id, username, password, email, phone, apt_id)
VALUES (8, 'Jefferson', '0q4043jtqwt?$#T', '[email protected]', '123456789', 8);

INSERT INTO Users (username, password, email, phone, apt_id)
VALUES ('Timothy', 'asdfsdf', 'Minh.com', '9876543210', 2);
INSERT INTO Users (user_id, username, password, email, phone, apt_id)
VALUES (9, 'Timothy', 'asdfsdf', 'Minh.com', '9876543210', 2);

INSERT INTO Apartments (apt_name, apt_address, price_min, price_max, link)
VALUES ('The Dean Campustown', '708 S 6th St Champaign, IL 61820', 860, 1900, 'https://www.apartmentfinder.com/Illinois/Champaign-Apartments/The-Dean-Campustown-Apartments-ttrtct8');
INSERT INTO Apartments (apt_id, apt_name, apt_address, price_min, price_max, link)
VALUES (1, 'The Dean Campustown', '708 S 6th St Champaign, IL 61820', 860, 1900, 'https://www.apartmentfinder.com/Illinois/Champaign-Apartments/The-Dean-Campustown-Apartments-ttrtct8');

INSERT INTO Apartments (apt_name, apt_address, price_min, price_max, link)
VALUES ('Seven07 Apartments', '707 S 4th St Champaign, IL 61820', 856, 1750, 'https://www.apartmentfinder.com/Illinois/Champaign-Apartments/Seven07-Apartments-75ckgzx');
INSERT INTO Apartments (apt_id, apt_name, apt_address, price_min, price_max, link)
VALUES (2, 'Seven07 Apartments', '707 S 4th St Champaign, IL 61820', 856, 1750, 'https://www.apartmentfinder.com/Illinois/Champaign-Apartments/Seven07-Apartments-75ckgzx');

INSERT INTO Apartments (apt_name, apt_address, price_min, price_max, link)
VALUES ('Maywood Apartments', '707 Left St Urbana, IL 61801', 300, 900, 'https://www.apartmentfinder.com/Illinois/Champaign-Apartments/The-Dean-Campustown-Apartments-ttrtct8');
INSERT INTO Apartments (apt_id, apt_name, apt_address, price_min, price_max, link)
VALUES (3, 'Maywood Apartments', '707 Left St Urbana, IL 61801', 300, 900, 'https://www.apartmentfinder.com/Illinois/Champaign-Apartments/The-Dean-Campustown-Apartments-ttrtct8');

INSERT INTO Apartments (apt_name, apt_address, price_min, price_max, link)
VALUES ('Champaign Park', '2106 W White St Champaign, IL 61820', 856, 1750, 'https://www.apartmentfinder.com/Illinois/Champaign-Apartments/Seven07-Apartments-75ckgzx');
INSERT INTO Apartments (apt_id, apt_name, apt_address, price_min, price_max, link)
VALUES (4, 'Champaign Park', '2106 W White St Champaign, IL 61820', 856, 1750, 'https://www.apartmentfinder.com/Illinois/Champaign-Apartments/Seven07-Apartments-75ckgzx');

INSERT INTO Apartments (apt_name, apt_address, price_min, price_max, link)
VALUES ('Capstone Quarters', '708 S 6th St Champaign, IL 61820', 860, 1900, 'https://www.apartmentfinder.com/Illinois/Champaign-Apartments/The-Dean-Campustown-Apartments-ttrtct8');
INSERT INTO Apartments (apt_id, apt_name, apt_address, price_min, price_max, link)
VALUES (5, 'Capstone Quarters', '708 S 6th St Champaign, IL 61820', 860, 1900, 'https://www.apartmentfinder.com/Illinois/Champaign-Apartments/The-Dean-Campustown-Apartments-ttrtct8');

INSERT INTO Apartments (apt_name, apt_address, price_min, price_max, link)
VALUES ('Legacy202', '1234 Sunshine Ct Champaign, IL 61820', 856, 1750, 'https://www.apartmentfinder.com/Illinois/Champaign-Apartments/Seven07-Apartments-75ckgzx');
INSERT INTO Apartments (apt_id, apt_name, apt_address, price_min, price_max, link)
VALUES (6, 'Legacy202', '1234 Sunshine Ct Champaign, IL 61820', 856, 1750, 'https://www.apartmentfinder.com/Illinois/Champaign-Apartments/Seven07-Apartments-75ckgzx');

INSERT INTO Apartments (apt_name, apt_address, price_min, price_max, link)
VALUES ('Cool Apartments', '689 N 1st St Champaign, IL 61820', 435, 54635, 'https://www.apartmentfinder.com/Illinois/Champaign-Apartments/The-Dean-Campustown-Apartments-ttrtct8');
INSERT INTO Apartments (apt_id, apt_name, apt_address, price_min, price_max, link)
VALUES (7, 'Cool Apartments', '689 N 1st St Champaign, IL 61820', 435, 54635, 'https://www.apartmentfinder.com/Illinois/Champaign-Apartments/The-Dean-Campustown-Apartments-ttrtct8');

INSERT INTO Apartments (apt_name, apt_address, price_min, price_max, link)
VALUES ('Luxury Student Housing', '710 S 4th St Champaign, IL 61820', 233, 444, 'https://www.apartmentfinder.com/Illinois/Champaign-Apartments/Seven07-Apartments-75ckgzx');
INSERT INTO Apartments (apt_id, apt_name, apt_address, price_min, price_max, link)
VALUES (8, 'Luxury Student Housing', '710 S 4th St Champaign, IL 61820', 233, 444, 'https://www.apartmentfinder.com/Illinois/Champaign-Apartments/Seven07-Apartments-75ckgzx');

INSERT INTO Apartments (apt_name, apt_address, price_min, price_max, link)
VALUES ('House', '708 S 6th St Champaign, IL 61820', 5, 45, 'https://www.apartmentfinder.com/Illinois/Champaign-Apartments/The-Dean-Campustown-Apartments-ttrtct8');
INSERT INTO Apartments (apt_id, apt_name, apt_address, price_min, price_max, link)
VALUES (9, 'House', '708 S 6th St Champaign, IL 61820', 5, 45, 'https://www.apartmentfinder.com/Illinois/Champaign-Apartments/The-Dean-Campustown-Apartments-ttrtct8');

INSERT INTO Apartments (apt_name, apt_address, price_min, price_max, link)
VALUES ('Fields South', '3301 Fields South St Champaign, IL 61820', 345, 4536, 'https://www.apartmentfinder.com/Illinois/Champaign-Apartments/Seven07-Apartments-75ckgzx');
INSERT INTO Apartments (apt_id, apt_name, apt_address, price_min, price_max, link)
VALUES (10, 'Fields South', '3301 Fields South St Champaign, IL 61820', 345, 4536, 'https://www.apartmentfinder.com/Illinois/Champaign-Apartments/Seven07-Apartments-75ckgzx');

INSERT INTO Apartments (apt_name, apt_address, price_min, price_max, link)
VALUES ('An Apartment', '1600 W Bradley St Champaign, IL 61820', 21, 346346, 'https://www.apartmentfinder.com/Illinois/Champaign-Apartments/The-Dean-Campustown-Apartments-ttrtct8');
INSERT INTO Apartments (apt_id, apt_name, apt_address, price_min, price_max, link)
VALUES (11, 'An Apartment', '1600 W Bradley St Champaign, IL 61820', 21, 346346, 'https://www.apartmentfinder.com/Illinois/Champaign-Apartments/The-Dean-Campustown-Apartments-ttrtct8');

INSERT INTO Apartments (apt_name, apt_address, price_min, price_max, link)
VALUES ('Skyline Tower', '519 E Green St Champaign, IL 61820', 2323, 12345, 'https://www.apartmentfinder.com/Illinois/Champaign-Apartments/Seven07-Apartments-75ckgzx');
INSERT INTO Apartments (apt_id, apt_name, apt_address, price_min, price_max, link)
VALUES (12, 'Skyline Tower', '519 E Green St Champaign, IL 61820', 2323, 12345, 'https://www.apartmentfinder.com/Illinois/Champaign-Apartments/Seven07-Apartments-75ckgzx');

INSERT INTO Apartments (apt_name, apt_address, price_min, price_max, link)
VALUES ('Baytowne Apartments', '1000 Baytowne Dr Champaign, IL 61820', 345, 555, 'https://www.apartmentfinder.com/Illinois/Champaign-Apartments/The-Dean-Campustown-Apartments-ttrtct8');
INSERT INTO Apartments (apt_id, apt_name, apt_address, price_min, price_max, link)
VALUES (13, 'Baytowne Apartments', '1000 Baytowne Dr Champaign, IL 61820', 345, 555, 'https://www.apartmentfinder.com/Illinois/Champaign-Apartments/The-Dean-Campustown-Apartments-ttrtct8');

INSERT INTO Apartments (apt_name, apt_address, price_min, price_max, link)
VALUES ('Fields South', '3301 Fields South St Champaign, IL 61820', 666, 777, 'https://www.apartmentfinder.com/Illinois/Champaign-Apartments/Seven07-Apartments-75ckgzx');
INSERT INTO Apartments (apt_id, apt_name, apt_address, price_min, price_max, link)
VALUES (14, 'Fields South', '3301 Fields South St Champaign, IL 61820', 666, 777, 'https://www.apartmentfinder.com/Illinois/Champaign-Apartments/Seven07-Apartments-75ckgzx');

INSERT INTO Apartments (apt_name, apt_address, price_min, price_max, link)
VALUES ('Westgate Apartments', '1600 W Bradley St Champaign, IL 61820', 555, 654, 'https://www.apartmentfinder.com/Illinois/Champaign-Apartments/The-Dean-Campustown-Apartments-ttrtct8');
INSERT INTO Apartments (apt_id, apt_name, apt_address, price_min, price_max, link)
VALUES (15, 'Westgate Apartments', '1600 W Bradley St Champaign, IL 61820', 555, 654, 'https://www.apartmentfinder.com/Illinois/Champaign-Apartments/The-Dean-Campustown-Apartments-ttrtct8');

INSERT INTO Apartments (apt_name, apt_address, price_min, price_max, link)
VALUES ('112 Green', '112 E Green St Champaign, IL 61820', 123, 234, 'https://www.apartmentfinder.com/Illinois/Champaign-Apartments/Seven07-Apartments-75ckgzx');
INSERT INTO Apartments (apt_id, apt_name, apt_address, price_min, price_max, link)
VALUES (16, '112 Green', '112 E Green St Champaign, IL 61820', 123, 234, 'https://www.apartmentfinder.com/Illinois/Champaign-Apartments/Seven07-Apartments-75ckgzx');

INSERT INTO Apartments (apt_name, apt_address, price_min, price_max, link)
VALUES ('Hunters Pond Apartment Homes', '2717 Hunters Pand Run Champaign, IL 61820', 555, 778, 'https://www.apartmentfinder.com/Illinois/Champaign-Apartments/The-Dean-Campustown-Apartments-ttrtct8');
INSERT INTO Apartments (apt_id, apt_name, apt_address, price_min, price_max, link)
VALUES (17, 'Hunters Pond Apartment Homes', '2717 Hunters Pand Run Champaign, IL 61820', 555, 778, 'https://www.apartmentfinder.com/Illinois/Champaign-Apartments/The-Dean-Campustown-Apartments-ttrtct8');

INSERT INTO Apartments (apt_name, apt_address, price_min, price_max, link)
VALUES ('Fields South', '3301 Fields South St Champaign, IL 61820', 998, 999, 'https://www.apartmentfinder.com/Illinois/Champaign-Apartments/Seven07-Apartments-75ckgzx');
INSERT INTO Apartments (apt_id, apt_name, apt_address, price_min, price_max, link)
VALUES (18, 'Fields South', '3301 Fields South St Champaign, IL 61820', 998, 999, 'https://www.apartmentfinder.com/Illinois/Champaign-Apartments/Seven07-Apartments-75ckgzx');

INSERT INTO Apartments (apt_name, apt_address, price_min, price_max, link)
VALUES ('Westgate Apartments', '1600 W Bradley St Champaign, IL 61820', 21, 346346, 'https://www.apartmentfinder.com/Illinois/Champaign-Apartments/The-Dean-Campustown-Apartments-ttrtct8');
INSERT INTO Apartments (apt_id, apt_name, apt_address, price_min, price_max, link)
VALUES (19, 'Westgate Apartments', '1600 W Bradley St Champaign, IL 61820', 21, 346346, 'https://www.apartmentfinder.com/Illinois/Champaign-Apartments/The-Dean-Campustown-Apartments-ttrtct8');

INSERT INTO Apartments (apt_name, apt_address, price_min, price_max, link)
VALUES ('112 Green', '112 E Green St Champaign, IL 61820', 900, 2314, 'https://www.apartmentfinder.com/Illinois/Champaign-Apartments/Seven07-Apartments-75ckgzx');
INSERT INTO Apartments (apt_id, apt_name, apt_address, price_min, price_max, link)
VALUES (20, '112 Green', '112 E Green St Champaign, IL 61820', 900, 2314, 'https://www.apartmentfinder.com/Illinois/Champaign-Apartments/Seven07-Apartments-75ckgzx');

INSERT INTO AptPics (apt_id, link)
VALUES (1, 'https://image1.apartmentfinder.com/i2/yI_vOGHFLSjSR7fuXTtN6vEcPux3OoeLbY-pKtkIda8/116/seven07-champaign-il-4-br-4-ba---living-room.jpg');
Expand Down Expand Up @@ -211,13 +211,13 @@ INSERT INTO Reviews (apt_id, user_id, date_of_rating, comment, vote)
VALUES (9, 9, '2021-09-12', 'Its not an apartment, its a flat.', 1);

INSERT INTO Reviews (apt_id, user_id, date_of_rating, comment, vote)
VALUES (10, 10, '2021-09-13', 'Be a good person', -1);
VALUES (10, 1, '2021-09-13', 'Be a good person', -1);

INSERT INTO Reviews (apt_id, user_id, date_of_rating, comment, vote)
VALUES (11, 11, '2021-09-14', 'Hello there lizard', 1);
VALUES (11, 2, '2021-09-14', 'Hello there lizard', 1);

INSERT INTO Reviews (apt_id, user_id, date_of_rating, comment, vote)
VALUES (12, 12, '2021-09-15', 'Windows are broken, rent is expensive, door doesnt work. Roof falling in. Bank foreclosing it. ABORT', -1);
VALUES (12, 3, '2021-09-15', 'Windows are broken, rent is expensive, door doesnt work. Roof falling in. Bank foreclosing it. ABORT', -1);



2 changes: 1 addition & 1 deletion src/backend/dataholders/mainpage_get.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ class GetRequestType:


@dataclass
class Params:
class GetRequestParams:
"""Other request parameters"""

num_apts: Union[int, None]
Expand Down
11 changes: 11 additions & 0 deletions src/backend/pages/mainpage.py
Original file line number Diff line number Diff line change
Expand Up @@ -266,3 +266,14 @@ def create_reviews_helper(self, ratings_query: List[Tuple]) -> List[Review]:
vote = True
reviews.append(Review(entry[0], entry[1], entry[2], vote))
return reviews

@use_database
def delete_apartment_review(self, apt_id: int, username: str) -> List[Review]:
"""Delete an apartment reviews"""
self.delete_apartment_review.cursor.execute(
"DELETE FROM Reviews WHERE (apt_id = ? AND user_id = \
(SELECT user_id FROM Users WHERE username = ?))",
(apt_id, username),
)
self.delete_apartment_review.connection.commit()
return self.get_apartments_reviews(apt_id)
Loading

6 comments on commit ef23fbc

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Coverage

Coverage Report
FileStmtsMissCover
app.py960100%
config.py10100%
decorators.py270100%
dataholders
   apt.py90100%
   mainpage_get.py150100%
   review.py70100%
pages
   login.py310100%
   mainpage.py1000100%
TOTAL2860100%

Tests Skipped Failures Errors Time
37 0 💤 0 ❌ 0 🔥 0.670s ⏱️

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Coverage

Coverage Report
FileStmtsMissCover
app.py960100%
config.py10100%
decorators.py270100%
dataholders
   apt.py90100%
   mainpage_get.py150100%
   review.py70100%
pages
   login.py310100%
   mainpage.py1000100%
TOTAL2860100%

Tests Skipped Failures Errors Time
37 0 💤 0 ❌ 0 🔥 0.730s ⏱️

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Coverage

Coverage Report
FileStmtsMissCover
app.py960100%
config.py10100%
decorators.py270100%
dataholders
   apt.py90100%
   mainpage_get.py150100%
   review.py70100%
pages
   login.py310100%
   mainpage.py1000100%
TOTAL2860100%

Tests Skipped Failures Errors Time
37 0 💤 0 ❌ 0 🔥 0.726s ⏱️

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Coverage

Coverage Report
FileStmtsMissCover
app.py960100%
config.py10100%
decorators.py270100%
dataholders
   apt.py90100%
   mainpage_get.py150100%
   review.py70100%
pages
   login.py310100%
   mainpage.py1000100%
TOTAL2860100%

Tests Skipped Failures Errors Time
37 0 💤 0 ❌ 0 🔥 0.626s ⏱️

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Coverage

Coverage Report
FileStmtsMissCover
app.py960100%
config.py10100%
decorators.py270100%
dataholders
   apt.py90100%
   mainpage_get.py150100%
   review.py70100%
pages
   login.py310100%
   mainpage.py1000100%
TOTAL2860100%

Tests Skipped Failures Errors Time
37 0 💤 0 ❌ 0 🔥 0.600s ⏱️

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Coverage

Coverage Report
FileStmtsMissCover
app.py960100%
config.py10100%
decorators.py270100%
dataholders
   apt.py90100%
   mainpage_get.py150100%
   review.py70100%
pages
   login.py310100%
   mainpage.py1000100%
TOTAL2860100%

Tests Skipped Failures Errors Time
37 0 💤 0 ❌ 0 🔥 0.716s ⏱️

Please sign in to comment.