mirror of
https://github.com/Lynnesbian/FediBooks/
synced 2025-01-30 19:10:04 +00:00
Some initial tests
This commit is contained in:
parent
a9fcda794c
commit
3fa83b3745
5 changed files with 157 additions and 0 deletions
40
test-requirements.txt
Normal file
40
test-requirements.txt
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
asn1crypto==0.24.0
|
||||||
|
atomicwrites==1.3.0
|
||||||
|
attrs==19.1.0
|
||||||
|
bcrypt==3.1.7
|
||||||
|
beautifulsoup4==4.7.1
|
||||||
|
certifi==2019.9.11
|
||||||
|
cffi==1.12.3
|
||||||
|
chardet==3.0.4
|
||||||
|
Click==7.0
|
||||||
|
cryptography==2.7
|
||||||
|
decorator==4.4.0
|
||||||
|
Flask==1.1.1
|
||||||
|
Flask-MySQLdb==0.2.0
|
||||||
|
http-ece==1.1.0
|
||||||
|
idna==2.8
|
||||||
|
importlib-metadata==0.22
|
||||||
|
itsdangerous==1.1.0
|
||||||
|
Jinja2==2.10.1
|
||||||
|
markovify==0.7.1
|
||||||
|
MarkupSafe==1.1.1
|
||||||
|
Mastodon.py==1.4.6
|
||||||
|
more-itertools==7.2.0
|
||||||
|
mysqlclient==1.4.4
|
||||||
|
packaging==19.1
|
||||||
|
pluggy==0.13.0
|
||||||
|
py==1.8.0
|
||||||
|
pycparser==2.19
|
||||||
|
pyparsing==2.4.2
|
||||||
|
pytest==5.1.2
|
||||||
|
python-dateutil==2.8.0
|
||||||
|
python-magic==0.4.15
|
||||||
|
pytz==2019.2
|
||||||
|
requests==2.22.0
|
||||||
|
six==1.12.0
|
||||||
|
soupsieve==1.9.3
|
||||||
|
Unidecode==1.1.1
|
||||||
|
urllib3==1.25.3
|
||||||
|
wcwidth==0.1.7
|
||||||
|
Werkzeug==0.15.6
|
||||||
|
zipp==0.6.0
|
0
tests/__init__.py
Normal file
0
tests/__init__.py
Normal file
28
tests/conftest.py
Normal file
28
tests/conftest.py
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
import json
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from .utils import get_mysql, setup_db, cleanup_db
|
||||||
|
from webui import app
|
||||||
|
|
||||||
|
cfg = json.load(open('config.json'))
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope="function")
|
||||||
|
def database():
|
||||||
|
db = get_mysql()
|
||||||
|
setup_db(db)
|
||||||
|
|
||||||
|
cursor = db.cursor()
|
||||||
|
cursor.execute("SELECT COUNT(*) FROM users")
|
||||||
|
assert cursor.fetchone() == (0,), "Something went wrong!"
|
||||||
|
yield db
|
||||||
|
cleanup_db(db)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope="function")
|
||||||
|
def client():
|
||||||
|
app.config['TESTING'] = True
|
||||||
|
client = app.test_client()
|
||||||
|
|
||||||
|
return client
|
42
tests/test_homepage.py
Normal file
42
tests/test_homepage.py
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
def test_homepage(client):
|
||||||
|
response = client.get("/")
|
||||||
|
assert response.status_code == 200
|
||||||
|
|
||||||
|
|
||||||
|
def test_homepage_logged_in_no_bots(client, database):
|
||||||
|
with client.session_transaction() as session:
|
||||||
|
session["user_id"] = "123"
|
||||||
|
response = client.get("/")
|
||||||
|
assert response.status_code == 200
|
||||||
|
assert b"Hi there! You have 0 bots." in response.data
|
||||||
|
|
||||||
|
|
||||||
|
def test_home_logged_in_has_bots(client, database):
|
||||||
|
cursor = database.cursor()
|
||||||
|
|
||||||
|
# TODO move these lines into a factory
|
||||||
|
cursor.execute("INSERT INTO `users` (email, password) VALUES (%s, %s)", ("user1@localhost", "pass1"))
|
||||||
|
user1_id = cursor.lastrowid
|
||||||
|
cursor.execute("INSERT INTO `users` (email, password) VALUES (%s, %s)", ("user2@localhost", "pass2"))
|
||||||
|
user2_id = cursor.lastrowid
|
||||||
|
|
||||||
|
cursor.execute("INSERT INTO `credentials` (client_id, client_secret, secret) VALUES (%s, %s, %s)", ("123", "123", "123"))
|
||||||
|
fake_credentials = cursor.lastrowid
|
||||||
|
|
||||||
|
cursor.execute("INSERT INTO `bots` (handle, user_id, enabled, credentials_id, push_public_key, push_private_key, push_secret) VALUES (%s, %s, %s, %s, %s, %s, %s)",
|
||||||
|
("handle1", user1_id, False, fake_credentials, "pubkey", "privkey", "pushsecret"))
|
||||||
|
cursor.execute("INSERT INTO `bots` (handle, user_id, enabled, credentials_id, push_public_key, push_private_key, push_secret) VALUES (%s, %s, %s, %s, %s, %s, %s)",
|
||||||
|
("handle2", user2_id, True, fake_credentials, "pubkey", "privkey", "pushsecret"))
|
||||||
|
|
||||||
|
|
||||||
|
with client.session_transaction() as session:
|
||||||
|
session["user_id"] = user1_id
|
||||||
|
response = client.get("/")
|
||||||
|
assert response.status_code == 200
|
||||||
|
assert b"Hi there! You have 1 bot, 0 of which are currently active." in response.data
|
||||||
|
|
||||||
|
cursor.execute("UPDATE `bots` SET enabled = %s WHERE user_id = %s", (True, user1_id))
|
||||||
|
|
||||||
|
response = client.get("/")
|
||||||
|
assert response.status_code == 200
|
||||||
|
assert b"Hi there! You have 1 bot, 1 of which is currently active." in response.data
|
47
tests/utils.py
Normal file
47
tests/utils.py
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
|
||||||
|
import MySQLdb
|
||||||
|
|
||||||
|
SQL_SETUP_PATH = "setup.sql"
|
||||||
|
|
||||||
|
cfg = json.load(open('config.json'))
|
||||||
|
|
||||||
|
|
||||||
|
def get_mysql():
|
||||||
|
return MySQLdb.connect(
|
||||||
|
host=cfg['db_host'],
|
||||||
|
user=cfg['db_user'],
|
||||||
|
passwd=cfg['db_pass'],
|
||||||
|
use_unicode=True,
|
||||||
|
charset="utf8mb4"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def setup_db(db):
|
||||||
|
cursor = db.cursor()
|
||||||
|
|
||||||
|
db_exists = cursor.execute("SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME=%s", (cfg['db_name'],))
|
||||||
|
if db_exists:
|
||||||
|
if not os.environ.get("FEDIBOOKS_TEST_OVERWRITE_DB"):
|
||||||
|
cursor.close()
|
||||||
|
db.close()
|
||||||
|
raise Exception("Database exists, I'm not touching this because tests destroy data!")
|
||||||
|
else:
|
||||||
|
cursor.execute("DROP DATABASE %s" % cfg["db_name"])
|
||||||
|
|
||||||
|
cursor.execute("CREATE DATABASE %s" % cfg["db_name"])
|
||||||
|
|
||||||
|
cursor.execute(open(SQL_SETUP_PATH).read())
|
||||||
|
cursor.close()
|
||||||
|
|
||||||
|
db.autocommit(True)
|
||||||
|
return db
|
||||||
|
|
||||||
|
|
||||||
|
def cleanup_db(db):
|
||||||
|
cursor = db.cursor()
|
||||||
|
|
||||||
|
cursor.execute("DROP DATABASE %s" % cfg["db_name"])
|
||||||
|
cursor.close()
|
||||||
|
db.close()
|
Loading…
Reference in a new issue