#!/usr/bin/python3 import time from flask import url_for from .util import live_server_setup, extract_UUID_from_client, extract_api_key_from_UI, wait_for_all_checks def set_response_with_ldjson(): test_return_data = """ Some initial text

Which is across multiple lines


So let's see what happens.
Some text thats the same
Some text that will change
""" with open("test-datastore/endpoint-content.txt", "w") as f: f.write(test_return_data) return None def set_response_without_ldjson(): test_return_data = """ Some initial text

Which is across multiple lines


So let's see what happens.
Some text thats the same
Some text that will change
""" with open("test-datastore/endpoint-content.txt", "w") as f: f.write(test_return_data) return None def test_setup(client, live_server): live_server_setup(live_server) # actually only really used by the distll.io importer, but could be handy too def test_check_ldjson_price_autodetect(client, live_server): set_response_with_ldjson() # Add our URL to the import page test_url = url_for('test_endpoint', _external=True) res = client.post( url_for("import_page"), data={"urls": test_url}, follow_redirects=True ) assert b"1 Imported" in res.data wait_for_all_checks(client) # Should get a notice that it's available res = client.get(url_for("index")) assert b'ldjson-price-track-offer' in res.data # Accept it uuid = extract_UUID_from_client(client) client.get(url_for('price_data_follower.accept', uuid=uuid, follow_redirects=True)) wait_for_all_checks(client) # Trigger a check client.get(url_for("form_watch_checknow"), follow_redirects=True) wait_for_all_checks(client) # Offer should be gone res = client.get(url_for("index")) assert b'Embedded price data' not in res.data assert b'tracking-ldjson-price-data' in res.data # and last snapshop (via API) should be just the price api_key = extract_api_key_from_UI(client) res = client.get( url_for("watchsinglehistory", uuid=uuid, timestamp='latest'), headers={'x-api-key': api_key}, ) # Should see this (dont know where the whitespace came from) assert b'"highPrice": 8099900' in res.data # And not this cause its not the ld-json assert b"So let's see what happens" not in res.data client.get(url_for("form_delete", uuid="all"), follow_redirects=True) ########################################################################################## # And we shouldnt see the offer set_response_without_ldjson() # Add our URL to the import page test_url = url_for('test_endpoint', _external=True) res = client.post( url_for("import_page"), data={"urls": test_url}, follow_redirects=True ) assert b"1 Imported" in res.data wait_for_all_checks(client) res = client.get(url_for("index")) assert b'ldjson-price-track-offer' not in res.data ########################################################################################## client.get(url_for("form_delete", uuid="all"), follow_redirects=True) def _test_runner_check_bad_format_ignored(live_server, client, has_ldjson_price_data): test_url = url_for('test_endpoint', _external=True) res = client.post( url_for("import_page"), data={"urls": test_url}, follow_redirects=True ) assert b"1 Imported" in res.data wait_for_all_checks(client) for k,v in client.application.config.get('DATASTORE').data['watching'].items(): assert v.get('last_error') == False assert v.get('has_ldjson_price_data') == has_ldjson_price_data ########################################################################################## client.get(url_for("form_delete", uuid="all"), follow_redirects=True) def test_bad_ldjson_is_correctly_ignored(client, live_server): #live_server_setup(live_server) test_return_data = """
Some extra stuff
""" with open("test-datastore/endpoint-content.txt", "w") as f: f.write(test_return_data) _test_runner_check_bad_format_ignored(live_server=live_server, client=client, has_ldjson_price_data=True) test_return_data = """
Some extra stuff
""" with open("test-datastore/endpoint-content.txt", "w") as f: f.write(test_return_data) _test_runner_check_bad_format_ignored(live_server=live_server, client=client, has_ldjson_price_data=False)