def test_check_notification(client, live_server):
    live_server_setup(live_server)
    set_original_response()
    time.sleep(3)
    res = client.get(url_for('settings_page'))
    assert (default_notification_body.encode() in res.data)
    assert (default_notification_title.encode() in res.data)
    env_base_url = os.getenv('BASE_URL', '').strip()
    if len(env_base_url):
        logging.debug('>>> BASE_URL enabled, looking for %s', env_base_url)
        res = client.get(url_for('settings_page'))
        assert (bytes(env_base_url.encode('utf-8')) in res.data)
    else:
        logging.debug('>>> SKIPPING BASE_URL check')
    test_url = url_for('test_endpoint', _external=True)
    res = client.post(url_for('api_watch_add'), data={'url': test_url, 'tag': ''}, follow_redirects=True)
    assert (b'Watch added' in res.data)
    time.sleep(3)
    url = url_for('test_notification_endpoint', _external=True)
    notification_url = url.replace('http', 'json')
    print(('>>>> Notification URL: ' + notification_url))
    res = client.post(url_for('edit_page', uuid='first'), data={'notification_urls': notification_url, 'notification_title': 'New ChangeDetection.io Notification - {watch_url}', 'notification_body': 'BASE URL: {base_url}\nWatch URL: {watch_url}\nWatch UUID: {watch_uuid}\nWatch title: {watch_title}\nWatch tag: {watch_tag}\nPreview: {preview_url}\nDiff URL: {diff_url}\nSnapshot: {current_snapshot}\nDiff: {diff}\nDiff Full: {diff_full}\n:-)', 'notification_format': 'Text', 'url': test_url, 'tag': 'my tag', 'title': 'my title', 'headers': '', 'fetch_backend': 'html_requests', 'trigger_check': 'y'}, follow_redirects=True)
    assert (b'Updated watch.' in res.data)
    assert (b'Test notification queued' in res.data)
    res = client.get(url_for('edit_page', uuid='first'))
    assert (bytes(notification_url.encode('utf-8')) in res.data)
    assert (bytes('New ChangeDetection.io Notification'.encode('utf-8')) in res.data)
    time.sleep(3)
    notification_submission = None
    with open('test-datastore/notification.txt', 'r') as f:
        notification_submission = f.read()
    assert (test_url in notification_submission)
    os.unlink('test-datastore/notification.txt')
    set_modified_response()
    client.get(url_for('api_watch_checknow'), follow_redirects=True)
    time.sleep(3)
    res = client.get(url_for('index'))
    assert (bytes('just now'.encode('utf-8')) in res.data)
    notification_submission = None
    with open('test-datastore/notification.txt', 'r') as f:
        notification_submission = f.read()
    assert (test_url in notification_submission)
    assert ('Diff Full: Some initial text' in notification_submission)
    assert ('Diff: (changed) Which is across multiple lines' in notification_submission)
    assert ('(-> into) which has this one new line' in notification_submission)
    if env_base_url:
        logging.debug('>>> BASE_URL checking in notification: %s', env_base_url)
        assert (env_base_url in notification_submission)
    else:
        logging.debug('>>> Skipping BASE_URL check')
    with open('test-datastore/endpoint-content.txt', 'w') as f:
        f.write(';jasdhflkjadshf kjhsdfkjl ahslkjf haslkjd hfaklsj hf\njl;asdhfkasj stuff we will detect\n')
    res = client.post(url_for('settings_page'), data={'notification_title': 'New ChangeDetection.io Notification - {watch_url}', 'notification_urls': 'json://foobar.com', 'minutes_between_check': 180, 'fetch_backend': 'html_requests'}, follow_redirects=True)
    assert (b'Settings updated.' in res.data)
    assert (b'Test notification queued' not in res.data)
    client.get(url_for('api_watch_checknow'), follow_redirects=True)
    time.sleep(3)
    res = client.get(url_for('index'))
    assert (bytes('just now'.encode('utf-8')) in res.data)
    with open('test-datastore/notification.txt', 'r') as f:
        notification_submission = f.read()
        print('Notification submission was:', notification_submission)
        assert ("b'" not in notification_submission)
        assert re.search('Watch UUID: [0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}', notification_submission, re.IGNORECASE)
        assert ('Watch title: my title' in notification_submission)
        assert ('Watch tag: my tag' in notification_submission)
        assert ('diff/' in notification_submission)
        assert ('preview/' in notification_submission)
        assert (':-)' in notification_submission)
        assert ('New ChangeDetection.io Notification - {}'.format(test_url) in notification_submission)
        assert ('stuff we will detect' in notification_submission)
    os.unlink('test-datastore/notification.txt')
    client.get(url_for('api_watch_checknow'), follow_redirects=True)
    time.sleep(3)
    client.get(url_for('api_watch_checknow'), follow_redirects=True)
    time.sleep(3)
    client.get(url_for('api_watch_checknow'), follow_redirects=True)
    time.sleep(3)
    assert (os.path.exists('test-datastore/notification.txt') == False)
    res = client.post(url_for('settings_page'), data={'notification_title': 'New ChangeDetection.io Notification - {watch_url}', 'notification_body': 'Rubbish: {rubbish}\n', 'notification_format': 'Text', 'notification_urls': 'json://foobar.com', 'minutes_between_check': 180, 'fetch_backend': 'html_requests'}, follow_redirects=True)
    assert (bytes('is not a valid token'.encode('utf-8')) in res.data)
    res = client.post(url_for('edit_page', uuid='first'), data={'notification_urls': notification_url, 'notification_title': '', 'notification_body': '', 'notification_format': 'Text', 'url': test_url, 'tag': 'my tag', 'title': 'my title', 'headers': '', 'fetch_backend': 'html_requests', 'trigger_check': 'y'}, follow_redirects=True)
    assert (b'Notification Body and Title is required when a Notification URL is used' in res.data)
def test_check_notification(client, live_server):
    live_server_setup(live_server)
    set_original_response()
    time.sleep(3)
    res = client.get(url_for('settings_page'))
    assert (default_notification_body.encode() in res.data)
    assert (default_notification_title.encode() in res.data)
    env_base_url = os.getenv('BASE_URL', ).strip()
    if len(env_base_url):
        logging.debug('>>> BASE_URL enabled, looking for %s', env_base_url)
        res = client.get(url_for('settings_page'))
        assert (bytes(env_base_url.encode('utf-8')) in res.data)
    else:
        logging.debug('>>> SKIPPING BASE_URL check')
    test_url = url_for('test_endpoint', _external=True)
    res = client.post(url_for('api_watch_add'), data={'url': test_url, 'tag': }, follow_redirects=True)
    assert (b'Watch added' in res.data)
    time.sleep(3)
    url = url_for('test_notification_endpoint', _external=True)
    notification_url = url.replace('http', 'json')
    print(('>>>> Notification URL: ' + notification_url))
    res = client.post(url_for('edit_page', uuid='first'), data={'notification_urls': notification_url, 'notification_title': 'New ChangeDetection.io Notification - {watch_url}', 'notification_body': 'BASE URL: {base_url}\nWatch URL: {watch_url}\nWatch UUID: {watch_uuid}\nWatch title: {watch_title}\nWatch tag: {watch_tag}\nPreview: {preview_url}\nDiff URL: {diff_url}\nSnapshot: {current_snapshot}\nDiff: {diff}\nDiff Full: {diff_full}\n:-)', 'notification_format': 'Text', 'url': test_url, 'tag': 'my tag', 'title': 'my title', 'headers': , 'fetch_backend': 'html_requests', 'trigger_check': 'y'}, follow_redirects=True)
    assert (b'Updated watch.' in res.data)
    assert (b'Test notification queued' in res.data)
    res = client.get(url_for('edit_page', uuid='first'))
    assert (bytes(notification_url.encode('utf-8')) in res.data)
    assert (bytes('New ChangeDetection.io Notification'.encode('utf-8')) in res.data)
    time.sleep(3)
    notification_submission = None
    with open('test-datastore/notification.txt', 'r') as f:
        notification_submission = f.read()
    assert (test_url in notification_submission)
    os.unlink('test-datastore/notification.txt')
    set_modified_response()
    client.get(url_for('api_watch_checknow'), follow_redirects=True)
    time.sleep(3)
    res = client.get(url_for('index'))
    assert (bytes('just now'.encode('utf-8')) in res.data)
    notification_submission = None
    with open('test-datastore/notification.txt', 'r') as f:
        notification_submission = f.read()
    assert (test_url in notification_submission)
    assert ('Diff Full: Some initial text' in notification_submission)
    assert ('Diff: (changed) Which is across multiple lines' in notification_submission)
    assert ('(-> into) which has this one new line' in notification_submission)
    if env_base_url:
        logging.debug('>>> BASE_URL checking in notification: %s', env_base_url)
        assert (env_base_url in notification_submission)
    else:
        logging.debug('>>> Skipping BASE_URL check')
    with open('test-datastore/endpoint-content.txt', 'w') as f:
        f.write(';jasdhflkjadshf kjhsdfkjl ahslkjf haslkjd hfaklsj hf\njl;asdhfkasj stuff we will detect\n')
    res = client.post(url_for('settings_page'), data={'notification_title': 'New ChangeDetection.io Notification - {watch_url}', 'notification_urls': 'json://foobar.com', 'minutes_between_check': 180, 'fetch_backend': 'html_requests'}, follow_redirects=True)
    assert (b'Settings updated.' in res.data)
    assert (b'Test notification queued' not in res.data)
    client.get(url_for('api_watch_checknow'), follow_redirects=True)
    time.sleep(3)
    res = client.get(url_for('index'))
    assert (bytes('just now'.encode('utf-8')) in res.data)
    with open('test-datastore/notification.txt', 'r') as f:
        notification_submission = f.read()
        print('Notification submission was:', notification_submission)
        assert ("b'" not in notification_submission)
        assert re.search('Watch UUID: [0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}', notification_submission, re.IGNORECASE)
        assert ('Watch title: my title' in notification_submission)
        assert ('Watch tag: my tag' in notification_submission)
        assert ('diff/' in notification_submission)
        assert ('preview/' in notification_submission)
        assert (':-)' in notification_submission)
        assert ('New ChangeDetection.io Notification - {}'.format(test_url) in notification_submission)
        assert ('stuff we will detect' in notification_submission)
    os.unlink('test-datastore/notification.txt')
    client.get(url_for('api_watch_checknow'), follow_redirects=True)
    time.sleep(3)
    client.get(url_for('api_watch_checknow'), follow_redirects=True)
    time.sleep(3)
    client.get(url_for('api_watch_checknow'), follow_redirects=True)
    time.sleep(3)
    assert (os.path.exists('test-datastore/notification.txt') == False)
    res = client.post(url_for('settings_page'), data={'notification_title': 'New ChangeDetection.io Notification - {watch_url}', 'notification_body': 'Rubbish: {rubbish}\n', 'notification_format': 'Text', 'notification_urls': 'json://foobar.com', 'minutes_between_check': 180, 'fetch_backend': 'html_requests'}, follow_redirects=True)
    assert (bytes('is not a valid token'.encode('utf-8')) in res.data)
    res = client.post(url_for('edit_page', uuid='first'), data={'notification_urls': notification_url, 'notification_title': , 'notification_body': , 'notification_format': 'Text', 'url': test_url, 'tag': 'my tag', 'title': 'my title', 'headers': , 'fetch_backend': 'html_requests', 'trigger_check': 'y'}, follow_redirects=True)
    assert (b'Notification Body and Title is required when a Notification URL is used' in res.data)