test: Fix selenium tests.

This commit is contained in:
tecnovert 2023-11-09 22:28:01 +02:00
parent 05e6edd5df
commit 22cd3cf9f1
No known key found for this signature in database
GPG key ID: 8ED6D8750C4E3F93
10 changed files with 119 additions and 75 deletions

View file

@ -6137,7 +6137,7 @@ class BasicSwap(BaseApp):
if 'chart_api_key' in data:
new_value = data['chart_api_key']
ensure(isinstance(new_value, bool), 'New chart_api_key value not a string')
ensure(isinstance(new_value, str), 'New chart_api_key value not a string')
ensure(len(new_value) <= 128, 'New chart_api_key value too long')
if all(c in string.hexdigits for c in new_value):
if settings_copy.get('chart_api_key', '') != new_value:
@ -6196,7 +6196,10 @@ class BasicSwap(BaseApp):
remotedaemonurls.add(url.strip())
if set(settings_cc.get('remote_daemon_urls', [])) != remotedaemonurls:
settings_cc['remote_daemon_urls'] = list(remotedaemonurls)
if len(remotedaemonurls) == 0 and 'remote_daemon_urls' in settings_cc:
del settings_cc['remote_daemon_urls']
else:
settings_cc['remote_daemon_urls'] = list(remotedaemonurls)
settings_changed = True
suggest_reboot = True

View file

@ -11,7 +11,7 @@
</svg>
</div>
<div class="flex-1 p-1">
<h3 class="font-medium text-sm text-green-900">{{ m[1] }}</h3></div>
<h3 class="infomsg font-medium text-sm text-green-900">{{ m[1] }}</h3></div>
</div>
</div>
<div class="w-auto p-2">
@ -45,7 +45,7 @@
</div>
</div>
<div class="w-auto p-2">
<button type="button" class="ml-auto bg-red-100 text-red-500 rounded-lg focus:ring-0 focus:ring-red-400 p-1.5 hover:bg-red-200 inline-flex h-8 w-8 focus:outline-none" data-dismiss-target="#err_messages_{{ err_messages[0][0] }}" aria-label="Close">
<button type="button" class="ml-auto bg-red-100 text-red-500 rounded-lg focus:ring-0 focus:ring-red-400 p-1.5 hover:bg-red-200 inline-flex h-8 w-8 focus:outline-none" data-dismiss-target="#err_messages_{{ err_messages[0][0] }}" aria-label="Close">
<span class="sr-only">Close</span>
<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" d="M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z" clip-rule="evenodd"></path>
@ -57,4 +57,4 @@
</div>
</section>
{% endif %}
<!-- todo messages colors better for darkmode -->
<!-- todo messages colors better for darkmode -->

View file

@ -48,7 +48,7 @@
<div class="text-sm font-medium text-center text-gray-500 border-b border-gray-200 dark:text-gray-400 dark:border-gray-700">
<ul class="flex flex-wrap -mb-px" id="myTab" data-tabs-toggle="#settingstab" role="tablist">
<li class="mr-2" role="presentation">
<a class="inline-block p-4 border-b-2 border-transparent rounded-t-lg hover:text-gray-600 hover:border-gray-300 dark:hover:text-gray-300" id="profile-tab" data-tabs-target="#coins" role="tab" aria-controls="coins" aria-selected={% if active_tab == 'default' %}"true"{% else %}"false"{% endif %}>Coins</a>
<a class="inline-block p-4 border-b-2 border-transparent rounded-t-lg hover:text-gray-600 hover:border-gray-300 dark:hover:text-gray-300" id="coins-tab" data-tabs-target="#coins" role="tab" aria-controls="coins" aria-selected={% if active_tab == 'default' %}"true"{% else %}"false"{% endif %}>Coins</a>
</li>
<li class="mr-2" role="presentation">
<a class="inline-block p-4 border-b-2 border-transparent rounded-t-lg hover:text-gray-600 hover:border-gray-300 dark:hover:text-gray-300" id="general-tab" data-tabs-target="#general" role="tab" aria-controls="general" aria-selected={% if active_tab == 'general' %}"true"{% else %}"false"{% endif %}>General</a>

View file

@ -293,7 +293,7 @@ def main():
received_offers = read_json_api(args.port, 'offers', {'active': 'active', 'include_sent': False, 'coin_from': coin_from_data['id'], 'coin_to': coin_to_data['id']})
print('received_offers', received_offers)
TODO - adjust rates based on extisting offers
TODO - adjust rates based on existing offers
"""
rates = read_json_api('rates', {'coin_from': coin_from_data['id'], 'coin_to': coin_to_data['id']})

View file

@ -0,0 +1,2 @@
python tests/basicswap/extended/test_xmr_persistent.py
python tests/basicswap/selenium/test_wallets.py

View file

@ -5,35 +5,22 @@
# Distributed under the MIT software license, see the accompanying
# file LICENSE or http://www.opensource.org/licenses/mit-license.php.
"""
cd /tmp
wget -4 https://chromedriver.storage.googleapis.com/114.0.5735.90/chromedriver_linux64.zip
7z x chromedriver_linux64.zip
sudo mv chromedriver /opt/chromedriver114
python tests/basicswap/extended/test_xmr_persistent.py
python tests/basicswap/selenium/test_offer.py
"""
import json
import time
from urllib.request import urlopen
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from util import get_driver
def test_html():
def test_offer(driver):
node1_url = 'http://localhost:12701'
node2_url = 'http://localhost:12702'
driver = webdriver.Chrome(service=Service('/opt/chromedriver114'))
driver.get(node1_url + '/newoffer')
time.sleep(1)
@ -99,10 +86,16 @@ def test_html():
assert (offer4_json['coin_from'] == 'Particl')
assert (offer4_json['coin_to'] == 'Monero')
driver.close()
print('Test Passed!')
print('Done.')
def run_tests():
driver = get_driver()
try:
test_offer(driver)
finally:
driver.close()
if __name__ == '__main__':
test_html()
run_tests()

View file

@ -1,27 +1,25 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright (c) 2022 tecnovert
# Copyright (c) 2022-2023 tecnovert
# Distributed under the MIT software license, see the accompanying
# file LICENSE or http://www.opensource.org/licenses/mit-license.php.
import json
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support.select import Select
from selenium.webdriver.support import expected_conditions as EC
from util import get_driver
def test_html():
def test_settings(driver):
base_url = 'http://localhost:12701'
node2_url = 'http://localhost:12702'
driver = webdriver.Chrome(service=Service('/opt/chromedriver96'))
url = base_url + '/settings'
driver.get(url)
driver.find_element(By.ID, 'general-tab').click()
@ -48,8 +46,8 @@ def test_html():
btn_apply_general.click()
time.sleep(1)
settings_path = '/tmp/test_persistent/client0/basicswap.json'
with open(settings_path) as fs:
settings_path_0 = '/tmp/test_persistent/client0/basicswap.json'
with open(settings_path_0) as fs:
settings = json.load(fs)
assert (settings['debug'] is False)
@ -65,14 +63,14 @@ def test_html():
difficult_text = '`~!@#$%^&*()-_=+[{}]\\|;:\'",<>./? '
el = driver.find_element(By.NAME, 'chartapikey')
el.clear()
el.send_keys(difficult_text)
btn_apply_chart = wait.until(EC.element_to_be_clickable((By.NAME, 'apply_chart')))
btn_apply_chart.click()
time.sleep(1)
settings_path = '/tmp/test_persistent/client0/basicswap.json'
with open(settings_path) as fs:
with open(settings_path_0) as fs:
settings = json.load(fs)
assert (settings['show_chart'] is False)
@ -90,16 +88,55 @@ def test_html():
el = driver.find_element(By.NAME, 'chartapikey')
assert el.get_property('value') == hex_text
settings_path = '/tmp/test_persistent/client0/basicswap.json'
with open(settings_path) as fs:
with open(settings_path_0) as fs:
settings = json.load(fs)
assert (settings.get('chart_api_key') == hex_text)
driver.close()
# Apply XMR settings with blank nodes list
driver.find_element(By.ID, 'coins-tab').click()
btn_apply_monero = wait.until(EC.element_to_be_clickable((By.NAME, 'apply_monero')))
el = driver.find_element(By.NAME, 'remotedaemonurls_monero')
el.clear()
btn_apply_monero.click()
time.sleep(1)
print('Done.')
with open(settings_path_0) as fs:
settings = json.load(fs)
assert ('remote_daemon_urls' not in settings['chainclients']['monero'])
btn_apply_monero = wait.until(EC.element_to_be_clickable((By.NAME, 'apply_monero')))
el = driver.find_element(By.NAME, 'remotedaemonurls_monero')
el.clear()
el.send_keys('node.xmr.to:18081\nnode1.xmr.to:18082')
btn_apply_monero.click()
time.sleep(1)
with open(settings_path_0) as fs:
settings = json.load(fs)
remotedaemonurls = settings['chainclients']['monero']['remote_daemon_urls']
assert (len(remotedaemonurls) == 2)
btn_apply_monero = wait.until(EC.element_to_be_clickable((By.NAME, 'apply_monero')))
el = driver.find_element(By.NAME, 'remotedaemonurls_monero')
el.clear()
btn_apply_monero.click()
time.sleep(1)
with open(settings_path_0) as fs:
settings = json.load(fs)
assert ('remote_daemon_urls' not in settings['chainclients']['monero'])
print('Test Passed!')
def run_tests():
driver = get_driver()
try:
test_settings(driver)
finally:
driver.close()
if __name__ == '__main__':
test_html()
run_tests()

View file

@ -1,7 +1,7 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright (c) 2022 tecnovert
# Copyright (c) 2022-2023 tecnovert
# Distributed under the MIT software license, see the accompanying
# file LICENSE or http://www.opensource.org/licenses/mit-license.php.
@ -11,11 +11,10 @@ from tests.basicswap.util import (
read_json_api,
)
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from util import get_driver
def test_html(driver):
def test_swap_dir(driver):
node_1_port = 12701
node_2_port = 12702
node1_url = f'http://localhost:{node_1_port}'
@ -58,12 +57,16 @@ def test_html(driver):
raise ValueError('TODO')
print('Done.')
print('Test Passed!')
def run_tests():
driver = get_driver()
try:
test_swap_dir(driver)
finally:
driver.close()
if __name__ == '__main__':
driver = webdriver.Chrome(service=Service('/opt/chromedriver96'))
try:
test_html(driver)
finally:
driver.close()
run_tests()

View file

@ -5,32 +5,18 @@
# Distributed under the MIT software license, see the accompanying
# file LICENSE or http://www.opensource.org/licenses/mit-license.php.
"""
cd /tmp
wget -4 https://chromedriver.storage.googleapis.com/114.0.5735.90/chromedriver_linux64.zip
7z x chromedriver_linux64.zip
sudo mv chromedriver /opt/chromedriver114
python tests/basicswap/extended/test_xmr_persistent.py
python tests/basicswap/selenium/test_wallets.py
"""
import json
import time
from urllib.request import urlopen
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from util import get_driver
def test_html():
def test_wallets(driver):
base_url = 'http://localhost:12701'
node2_url = 'http://localhost:12702'
driver = webdriver.Chrome(service=Service('/opt/chromedriver114'))
# Check json coins data
coins = json.loads(urlopen(base_url + '/json/coins').read())
part_coin = [f for f in coins if f['ticker'] == 'PART'][0]
@ -40,13 +26,13 @@ def test_html():
# Check 404 pages
url = base_url + '/unknown'
driver.get(url)
p1 = driver.find_element(By.TAG_NAME, 'p')
assert ('404' in p1.text)
p1 = driver.find_element(By.TAG_NAME, 'body')
assert ('Error 404' in p1.text)
url = base_url + '/static/nothing.png'
driver.get(url)
p1 = driver.find_element(By.TAG_NAME, 'p')
assert ('404' in p1.text)
p1 = driver.find_element(By.TAG_NAME, 'body')
assert ('Error 404' in p1.text)
url = base_url + '/wallet'
driver.get(url)
@ -81,15 +67,21 @@ def test_html():
driver.find_element(By.NAME, f'withdraw_{part_id}').click()
driver.switch_to.alert.accept()
time.sleep(1)
elements = driver.find_elements(By.CLASS_NAME, "infomsg")
elements = driver.find_elements(By.CLASS_NAME, 'infomsg')
assert (len(elements) == 1)
e = elements[0]
assert ('Withdrew 10 rtPART (plain to plain) to address' in e.text)
driver.close()
print('Test Passed!')
print('Done.')
def run_tests():
driver = get_driver()
try:
test_wallets(driver)
finally:
driver.close()
if __name__ == '__main__':
test_html()
run_tests()

View file

@ -0,0 +1,14 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright (c) 2023 tecnovert
# Distributed under the MIT software license, see the accompanying
# file LICENSE or http://www.opensource.org/licenses/mit-license.php.
from selenium.webdriver import Firefox
def get_driver():
# driver = Chrome() # 2023-11: Hangs here
driver = Firefox()
return driver