277 lines
9.3 KiB
Python
277 lines
9.3 KiB
Python
import json
|
|
import os
|
|
|
|
from browser_env import ScriptBrowserEnv
|
|
from browser_env.env_config import *
|
|
from evaluation_harness.helper_functions import (
|
|
get_query_text,
|
|
get_query_text_lowercase,
|
|
reddit_get_latest_comment_content_by_username,
|
|
reddit_get_parent_comment_username_of_latest_comment_by_username,
|
|
shopping_get_num_reviews,
|
|
shopping_get_order_product_option,
|
|
shopping_get_order_product_quantity,
|
|
shopping_get_product_attributes,
|
|
shopping_get_product_price,
|
|
shopping_get_rating_as_percentage,
|
|
shopping_get_sku_latest_review_rating,
|
|
shopping_get_sku_latest_review_text,
|
|
shopping_get_sku_latest_review_title,
|
|
shopping_get_sku_product_page_url,
|
|
)
|
|
|
|
HEADLESS = True
|
|
config_file_folder = "tests/test_evaluation_harness/configs"
|
|
|
|
|
|
def test_shopping_get_attributes(
|
|
script_browser_env: ScriptBrowserEnv,
|
|
) -> None:
|
|
env = script_browser_env
|
|
config_file = f"{config_file_folder}/config_shopping_attr.json.tmp"
|
|
|
|
with open(config_file, "w") as f:
|
|
json.dump({"storage_state": ".auth/shopping_state.json"}, f)
|
|
env.reset(options={"config_file": config_file})
|
|
env.page.goto(f"{SHOPPING}/nec-np4100-6200-lumen-xga-dlp-projector.html")
|
|
manufacturer = shopping_get_product_attributes(
|
|
env.page, "manufacturer |OR| brand name"
|
|
)
|
|
|
|
env.reset(options={"config_file": config_file})
|
|
env.page.goto(
|
|
f"{SHOPPING}/lg-50nano80upa-50-nanocell-4k-nano80-series-smart-ultra-hd-tv-with-an-lg-sn6y-3-1-channel-dts-virtual-high-resolution-soundbar-and-subwoofer-2021.html"
|
|
)
|
|
brand_name = shopping_get_product_attributes(
|
|
env.page, "manufacturer |OR| brand name"
|
|
)
|
|
|
|
# remove tmp config file
|
|
os.remove(config_file)
|
|
assert "NEC Displays" in manufacturer
|
|
assert "LG" in brand_name
|
|
|
|
|
|
def test_get_query_text(
|
|
script_browser_env: ScriptBrowserEnv,
|
|
) -> None:
|
|
env = script_browser_env
|
|
config_file = f"{config_file_folder}/config_shopping_query.json.tmp"
|
|
|
|
with open(config_file, "w") as f:
|
|
json.dump({"storage_state": ".auth/shopping_state.json"}, f)
|
|
env.reset(options={"config_file": config_file})
|
|
env.page.goto(
|
|
f"{SHOPPING}/la-guapa-virtual-projection-keyboard-laser-projection-bluetooth-wireless-keyboard-for-smart-phone-pc-tablet-laptop-wireless-laser-projection-keyboard-silver.html"
|
|
)
|
|
query_text = get_query_text(
|
|
env.page, "#maincontent > div.page-title-wrapper.product > h1 > span"
|
|
)
|
|
assert "Projection Keyboard" in query_text
|
|
|
|
query_text_lower = get_query_text_lowercase(
|
|
env.page, "#maincontent > div.page-title-wrapper.product > h1 > span"
|
|
)
|
|
assert "projection keyboard" in query_text_lower
|
|
|
|
# remove tmp config file
|
|
os.remove(config_file)
|
|
|
|
|
|
def test_get_product_price(
|
|
script_browser_env: ScriptBrowserEnv,
|
|
) -> None:
|
|
env = script_browser_env
|
|
config_file = f"{config_file_folder}/config_shopping_price.json.tmp"
|
|
|
|
with open(config_file, "w") as f:
|
|
json.dump({"storage_state": ".auth/shopping_state.json"}, f)
|
|
env.reset(options={"config_file": config_file})
|
|
env.page.goto(
|
|
f"{SHOPPING}/la-guapa-virtual-projection-keyboard-laser-projection-bluetooth-wireless-keyboard-for-smart-phone-pc-tablet-laptop-wireless-laser-projection-keyboard-silver.html"
|
|
)
|
|
product_price = shopping_get_product_price(env.page)
|
|
assert product_price == 26.99
|
|
|
|
env.page.goto(f"{SHOPPING}")
|
|
product_price = shopping_get_product_price(env.page)
|
|
assert product_price == 0
|
|
|
|
# remove tmp config file
|
|
os.remove(config_file)
|
|
|
|
|
|
def test_get_num_reviews(
|
|
script_browser_env: ScriptBrowserEnv,
|
|
) -> None:
|
|
env = script_browser_env
|
|
config_file = f"{config_file_folder}/config_shopping_num_reviews.json.tmp"
|
|
|
|
with open(config_file, "w") as f:
|
|
json.dump({"storage_state": ".auth/shopping_state.json"}, f)
|
|
env.reset(options={"config_file": config_file})
|
|
env.page.goto(
|
|
f"{SHOPPING}/la-guapa-virtual-projection-keyboard-laser-projection-bluetooth-wireless-keyboard-for-smart-phone-pc-tablet-laptop-wireless-laser-projection-keyboard-silver.html"
|
|
)
|
|
product_reviews = shopping_get_num_reviews(env.page)
|
|
assert product_reviews == 12
|
|
# remove tmp config file
|
|
os.remove(config_file)
|
|
|
|
|
|
def test_get_product_rating(
|
|
script_browser_env: ScriptBrowserEnv,
|
|
) -> None:
|
|
env = script_browser_env
|
|
config_file = (
|
|
f"{config_file_folder}/config_shopping_rating_percentage.json.tmp"
|
|
)
|
|
|
|
with open(config_file, "w") as f:
|
|
json.dump({"storage_state": ".auth/shopping_state.json"}, f)
|
|
env.reset(options={"config_file": config_file})
|
|
env.page.goto(
|
|
f"{SHOPPING}/v8-energy-healthy-energy-drink-steady-energy-from-black-and-green-tea-pomegranate-blueberry-8-ounce-can-pack-of-24.html"
|
|
)
|
|
product_rating = shopping_get_rating_as_percentage(env.page)
|
|
assert product_rating == 57
|
|
|
|
env.page.goto(f"{SHOPPING}/catalogsearch/advanced/")
|
|
product_rating = shopping_get_rating_as_percentage(env.page)
|
|
assert product_rating == 0
|
|
# remove tmp config file
|
|
os.remove(config_file)
|
|
|
|
|
|
def test_shopping_get_sku_product_page_url(
|
|
script_browser_env: ScriptBrowserEnv,
|
|
) -> None:
|
|
true_url = f"{SHOPPING}/xbox-wireless-controller-phantom-white-special-edition.html"
|
|
url = shopping_get_sku_product_page_url("B07P3L5GMW")
|
|
|
|
assert url == true_url
|
|
|
|
|
|
# NOTE: These fail if the B07N4Q7P67 reviews are modified and are hence just useful as a sanity check.
|
|
def test_shopping_get_sku_latest_review_text(
|
|
script_browser_env: ScriptBrowserEnv,
|
|
) -> None:
|
|
true_text = "Good quality"
|
|
text = shopping_get_sku_latest_review_text("B07N4Q7P67")
|
|
|
|
assert text == true_text, f"Expected: {true_text}\nGot: {text}"
|
|
|
|
|
|
def test_shopping_get_sku_latest_review_title(
|
|
script_browser_env: ScriptBrowserEnv,
|
|
) -> None:
|
|
true_title = "Fits Nintendo switch"
|
|
title = shopping_get_sku_latest_review_title("B07N4Q7P67")
|
|
|
|
assert title == true_title, f"Expected: {true_title}\nGot: {title}"
|
|
|
|
|
|
def test_shopping_get_sku_latest_review_text(
|
|
script_browser_env: ScriptBrowserEnv,
|
|
) -> None:
|
|
true_text = "Good quality"
|
|
text = shopping_get_sku_latest_review_text("B07N4Q7P67")
|
|
|
|
assert text == true_text, f"Expected: {true_text}\nGot: {text}"
|
|
|
|
|
|
def test_shopping_get_sku_latest_review_rating(
|
|
script_browser_env: ScriptBrowserEnv,
|
|
) -> None:
|
|
true_rating = "100"
|
|
rating = shopping_get_sku_latest_review_rating("B07N4Q7P67")
|
|
|
|
assert rating == true_rating, f"Expected: {true_rating}\nGot: {rating}"
|
|
|
|
|
|
def test_shopping_get_order_product_quantity(
|
|
script_browser_env: ScriptBrowserEnv,
|
|
) -> None:
|
|
env = script_browser_env
|
|
config_file = f"{config_file_folder}/config_test_shopping_get_order_product_quantity.json.tmp"
|
|
|
|
with open(config_file, "w") as f:
|
|
json.dump({"storage_state": ".auth/shopping_state.json"}, f)
|
|
env.reset(options={"config_file": config_file})
|
|
env.page.goto(f"{SHOPPING}/sales/order/view/order_id/170/")
|
|
|
|
quantity = shopping_get_order_product_quantity(env.page, "B087QSCXGT")
|
|
assert quantity == 1
|
|
|
|
quantity = shopping_get_order_product_quantity(env.page, "B08JLHHCM6")
|
|
assert quantity == 1
|
|
|
|
quantity = shopping_get_order_product_quantity(env.page, "B09LQTV3RX")
|
|
assert quantity == 1
|
|
|
|
# remove tmp config file
|
|
os.remove(config_file)
|
|
|
|
|
|
def test_shopping_get_order_product_option(
|
|
script_browser_env: ScriptBrowserEnv,
|
|
) -> None:
|
|
env = script_browser_env
|
|
config_file = f"{config_file_folder}/config_test_shopping_get_order_product_option.json.tmp"
|
|
|
|
with open(config_file, "w") as f:
|
|
json.dump({"storage_state": ".auth/shopping_state.json"}, f)
|
|
env.reset(options={"config_file": config_file})
|
|
env.page.goto(f"{SHOPPING}/sales/order/view/order_id/170/")
|
|
|
|
option = shopping_get_order_product_option(env.page, "B09LQTV3RX", "Color")
|
|
assert option == "Blue"
|
|
|
|
option = shopping_get_order_product_option(env.page, "B09LQTV3RX", "Size")
|
|
assert option == "Large"
|
|
|
|
# remove tmp config file
|
|
os.remove(config_file)
|
|
|
|
|
|
def test_reddit_get_latest_comment_content_by_username(
|
|
script_browser_env: ScriptBrowserEnv,
|
|
) -> None:
|
|
env = script_browser_env
|
|
config_file = f"{config_file_folder}/config_test_reddit_get_post_comment_tree.json.tmp"
|
|
|
|
with open(config_file, "w") as f:
|
|
json.dump({"storage_state": ".auth/reddit_state.json"}, f)
|
|
env.reset(options={"config_file": config_file})
|
|
env.page.goto(f"{REDDIT}/f/AskReddit/116809")
|
|
|
|
comment_content = reddit_get_latest_comment_content_by_username(
|
|
env.page, "DavosLostFingers"
|
|
)
|
|
assert comment_content == "Constantly on their phone"
|
|
|
|
# remove tmp config file
|
|
os.remove(config_file)
|
|
|
|
|
|
def test_reddit_get_parent_comment_username_of_latest_comment_by_username(
|
|
script_browser_env: ScriptBrowserEnv,
|
|
) -> None:
|
|
env = script_browser_env
|
|
config_file = f"{config_file_folder}/config_test_reddit_get_parent_comment_tree.json.tmp"
|
|
|
|
with open(config_file, "w") as f:
|
|
json.dump({"storage_state": ".auth/reddit_state.json"}, f)
|
|
env.reset(options={"config_file": config_file})
|
|
env.page.goto(f"{REDDIT}/f/memes/127590")
|
|
|
|
comment_content = (
|
|
reddit_get_parent_comment_username_of_latest_comment_by_username(
|
|
env.page, "Veryhawtwoman"
|
|
)
|
|
)
|
|
assert comment_content == "Da_Bro_Main"
|
|
|
|
# remove tmp config file
|
|
os.remove(config_file)
|