wulkanowy-web/backend/test.py

422 lines
15 KiB
Python
Raw Normal View History

Completely new backend and reworked frontend by Marioneq (#93) * Rewrited Frontend by Marioneq * Rewrited Backend by Marioneq * Delete old backend and update workflows * Deleting files on Marioneq command * Deleting files on Marioneq command * Deleting files on Marioneq command * Corrections with Marioneq command * Rename Appbar.vue to AppBar.vue * Try to fix backend workflow * Try to fix backend workflow 2 * Try to fix backend workflow 3 * Try to fix python workflow part 4 * Update python version * Update requirements.txt * Fix frontend * Simple backend test * Hotfix for backend workflow * Update dependencies * Revert "Update dependencies" This reverts commit 6b610ff6e398052bf2a98e47c0984c83e46db8a4. * Add few test * Update test.py * Update backend * Add /notes test. * Add /grades test * Update backend * Add more tests * Update the tests to make them easier to configure * Update code format * Color workflow test * Update requirements * Updated backend test * Test workflow reaction * Temporary add workflow reaction * Try update test logic * Delete postgres image * Update docker file * Print response code in backend test * Add color to workflow * Test workflow colors * Add colorama to requirements.txt * Test color * Fix all colors * Colors * FINALLY FIX THE COLORS * Add extended support for if * Hotflix for backend test * Delete many if from backend test * Updating backend test * Update backend test * Changes requested by Pengwius * Changes requested by MRmlik12 * Changes requested by MRmlik12 part 2 * Fix rules * Change api.ts requested by MRmlik12 * Update Account Manager * Fix Panel * Changes requested by MRmlik12 part 3 * Fix - Changes requested by MRmlik12 part 3 * Update login.py * Fix login.py * Fix login.py part 2 * Fix SelectStudent.vue * Update package-lock.json * Update main.py * Update variables name * Fix changes requested by MarcinK50 * Add invalid url error Co-authored-by: Marioneq 4958 <mq4958@gmail.com> Co-authored-by: Marioneq Marioneqowski <marioneq4958@gmail.com>
2022-05-22 21:00:45 +02:00
from errno import errorcode
from fastapi.testclient import TestClient
from main import app
import pytest
import json
import requests
client = TestClient(app)
class fg:
lightgreen = "\x1B[38;5;46m"
orange = "\x1B[38;5;208m"
red = "\x1B[38;5;160m"
rs = "\033[0m"
# Ustawienia dla wszystkich testów
nick = "jan@fakelog.cf"
password = "jan123"
host = "fakelog.cf"
backuphost = "fakelog.tk"
symbol = "powiatwulkanowy"
ssl = "false"
# Ustawienia tygodni dla testów
week_grades = "16"
# Ustawienia id dla testów
id_mobile_deleted = 1234
# Ustawienia dla test_login_incorrect i test_symbol_incorrect
nick_invalid = "jan@fakelog.cf"
password_invalid = "Jan321"
symbol_invalid = "warszawa"
def status_check(status_check_code, status_check_json):
if status_check_code == 200:
status_check_response = print("\n" + fg.lightgreen + "OK " + str(status_check_code) + fg.rs)
elif status_check_code == 111:
status_check_response = print("\n" + fg.red + "Connection refused " + str(status_check_code) + fg.rs)
elif status_check_code == 307:
status_check_response = print("\n" + fg.orange + "Temporary redirect " + str(status_check_code) + fg.rs)
elif status_check_code == 308:
status_check_response = print("\n" + fg.orange + "Permanent redirect " + str(status_check_code) + fg.rs)
elif status_check_code == 310:
status_check_response = print("\n" + fg.red + "Too many redirects " + str(status_check_code) + fg.rs)
elif status_check_code == 400:
status_check_response = print("\n" + fg.red + "Bad Request " + str(status_check_code) + fg.rs)
try:
print(json.dumps(status_check_json, indent=4))
except:
print(status_check_json)
elif status_check_code == 401:
status_check_response = print("\n" + fg.red + "Unauthorized " + str(status_check_code) + fg.rs)
elif status_check_code == 403:
status_check_response = print("\n" + fg.red + "Forbidden " + str(status_check_code) + fg.rs)
elif status_check_code == 404:
status_check_response = print("\n" + fg.orange + "Not Found " + str(status_check_code) + fg.rs)
elif status_check_code == 405:
status_check_response = print("\n" + fg.orange + "Method Not Allowed " + str(status_check_code) + fg.rs)
try:
print(json.dumps(status_check_json, indent=4))
except:
print(status_check_json)
elif status_check_code == 408:
status_check_response = print("\n" + fg.orange + "Request Timeout " + str(status_check_code) + fg.rs)
elif status_check_code == 422:
status_check_response = print("\n" + fg.red + "Unprocessable Entity " + str(status_check_code) + fg.rs)
try:
print(json.dumps(status_check_json, indent=4))
except:
print(status_check_json)
elif status_check_code == 429:
status_check_response = print("\n" + fg.red + "Too Many Requests " + str(status_check_code) + fg.rs)
elif status_check_code == 500:
status_check_response = print("\n" + fg.red + "Internal Server Error " + str(status_check_code) + fg.rs)
elif status_check_code == 502:
status_check_response = print("\n" + fg.orange + "Bad Gateway " + str(status_check_code) + fg.rs)
elif status_check_code == 503:
status_check_response = print("\n" + fg.orange + "Service Unavailable " + str(status_check_code) + fg.rs)
elif status_check_code == 504:
status_check_response = print("\n" + fg.orange + "Gateway Timeout " + str(status_check_code) + fg.rs)
elif status_check_code == 505:
status_check_response = print("\n" + fg.orange + "HTTP Version Not Supported " + str(status_check_code) + fg.rs)
elif status_check_code == 521:
status_check_response = print("\n" + fg.red + "Web server is down " + str(status_check_code) + fg.rs)
elif status_check_code == 522:
status_check_response = print("\n" + fg.red + "Connection timed out " + str(status_check_code) + fg.rs)
elif status_check_code == 525:
status_check_response = print("\n" + fg.red + "SSL Handshake Failed " + str(status_check_code) + fg.rs)
elif status_check_code == 526:
status_check_response = print("\n" + fg.red + "Invalid SSL Certificate " + str(status_check_code) + fg.rs)
try:
return status_check_response, status_check_json
except:
return status_check_response
def test_check_connection():
if ssl == "true":
check = requests.get(
"https://fakelog.cf",
)
elif ssl == "false":
check = requests.get(
"http://fakelog.cf",
)
status_check(check.status_code, check.json)
if check.status_code == 503 or check.status_code == 521 or check.status_code == 522 or check.status_code == 525 or check.status_code == 526 or check.status_code == 429 or check.status_code == 408 or check.status_code == 500 or check.status_code == 502 or check.status_code == 504 or check.status_code == 111:
global host
host = backuphost
print(fg.orange + "Main host unavailable. Changed to backup host" + fg.rs)
def test_login_correct():
global cookies, headars, student, school_id, errorcode
login = client.post(
"/login",
headers={"Content-Type": "application/json"},
json={
"username": nick,
"password": password,
"host": host,
"symbol": symbol,
"ssl": ssl,
},
)
cookies = login.json()["vulcan_cookies"]
headars = login.json()["students"][0]["headers"]
student = login.json()["students"][0]["cookies"]
school_id = login.json()["students"][0]["school_id"]
# print(login.json())
if login.status_code == 200:
print("\n" + fg.lightgreen + "OK " + str(login.status_code) + fg.rs)
assert login.json()["symbol"] == "powiatwulkanowy"
try:
assert login.json()["host"] == "fakelog.cf"
except:
assert login.json()["host"] == "fakelog.tk"
if not cookies:
errorcode = 1
print("\nCookies output: ")
print(login.json()["vulcan_cookies"])
pytest.fail("No VULCAN cookies detected")
elif not headars:
errorcode = 2
print("\nHeaders output: ")
print(login.json()["students"][0]["headers"])
pytest.fail("No headers detected")
elif not student:
errorcode = 3
print("\nStudent output: ")
print(login.json()["students"][0]["cookies"])
pytest.fail("No student cookies detected")
elif not school_id:
errorcode = 4
print("\nSchool ID output: ")
print(login.json()["students"][0]["school_id"])
pytest.fail("No school ID detected")
def test_login_incorrect():
if errorcode == 1:
pytest.skip("Skipped due to no cookies detected")
elif errorcode == 2:
pytest.skip("Skipped due to no headers detected")
elif errorcode == 3:
pytest.skip("Skipped due to no student cookies detected")
elif errorcode == 4:
pytest.skip("Skipped due to no school ID detected")
response = client.post(
"/login",
headers={"Content-Type": "application/json"},
json={
"username": nick_invalid,
"password": password_invalid,
"host": host,
"symbol": symbol,
"ssl": ssl,
"json": {},
"headers": headars,
},
)
status_check(response.status_code, response.json())
assert response.json() == {'detail': 'Username or password is incorrect'}
def test_symbol_incorrect():
if errorcode == 1:
pytest.skip("Skipped due to no cookies detected")
elif errorcode == 2:
pytest.skip("Skipped due to no headers detected")
elif errorcode == 3:
pytest.skip("Skipped due to no student cookies detected")
elif errorcode == 4:
pytest.skip("Skipped due to no school ID detected")
response = client.post(
"/login",
headers={"Content-Type": "application/json"},
json={
"username": nick,
"password": password,
"host": host,
"symbol": symbol_invalid,
"ssl": ssl,
"json": {},
"headers": headars,
},
)
status_check(response.status_code, response.json())
assert response.json() == {"detail": "Symbol is incorrect"}
def test_notes():
if errorcode == 1:
pytest.skip("Skipped due to no cookies detected")
elif errorcode == 2:
pytest.skip("Skipped due to no headers detected")
elif errorcode == 3:
pytest.skip("Skipped due to no student cookies detected")
elif errorcode == 4:
pytest.skip("Skipped due to no school ID detected")
response = client.post(
"/uonetplus-uczen/notes",
headers={"Content-Type": "application/json"},
json={
"vulcan_cookies": cookies,
"student": student,
"school_id": school_id,
"host": host,
"symbol": symbol,
"ssl": ssl,
"json": {},
"headers": headars,
},
)
status_check(response.status_code, response.json())
assert response.json()["notes"][0]["teacher"] == "Karolina Kowalska [AN]"
assert response.json()["notes"][1]["content"] == "+ 20p za udział w Konkursie Języka Angielskiego"
#print(response.json())
def test_grades():
if errorcode == 1:
pytest.skip("Skipped due to no cookies detected")
elif errorcode == 2:
pytest.skip("Skipped due to no headers detected")
elif errorcode == 3:
pytest.skip("Skipped due to no student cookies detected")
elif errorcode == 4:
pytest.skip("Skipped due to no school ID detected")
response = client.post(
"/uonetplus-uczen/grades",
headers={"Content-Type": "application/json"},
json={
"vulcan_cookies": cookies,
"student": student,
"school_id": school_id,
"host": host,
"symbol": symbol,
"ssl": ssl,
"json": {"okres": week_grades},
"headers": headars,
},
)
status_check(response.status_code, response.json())
assert response.json()["subjects"][0]["grades"][0]["teacher"] == "Karolina Kowalska"
assert response.json()["subjects"][0]["grades"][0]["symbol"] == "Akt"
# print(response.json())
# assert response.json()['grades'][3]['grade'] == '4'
def test_school_info():
if errorcode == 1:
pytest.skip("Skipped due to no cookies detected")
elif errorcode == 2:
pytest.skip("Skipped due to no headers detected")
elif errorcode == 3:
pytest.skip("Skipped due to no student cookies detected")
elif errorcode == 4:
pytest.skip("Skipped due to no school ID detected")
response = client.post(
"/uonetplus-uczen/school-info",
headers={"Content-Type": "application/json"},
json={
"vulcan_cookies": cookies,
"student": student,
"school_id": school_id,
"host": host,
"symbol": symbol,
"ssl": ssl,
"json": {},
"headers": headars,
},
)
status_check(response.status_code, response.json())
assert (
response.json()["school"]["name"]
== "Publiczna szkoła Wulkanowego nr 1 w fakelog.cf"
)
assert response.json()["teachers"][0]["name"] == "Karolina Kowalska [AN]"
# print(response.json())
def test_conference():
if errorcode == 1:
pytest.skip("Skipped due to no cookies detected")
elif errorcode == 2:
pytest.skip("Skipped due to no headers detected")
elif errorcode == 3:
pytest.skip("Skipped due to no student cookies detected")
elif errorcode == 4:
pytest.skip("Skipped due to no school ID detected")
response = client.post(
"/uonetplus-uczen/conferences",
headers={"Content-Type": "application/json"},
json={
"vulcan_cookies": cookies,
"student": student,
"school_id": school_id,
"host": host,
"symbol": symbol,
"ssl": ssl,
"json": {},
"headers": headars,
},
)
status_check(response.status_code, response.json())
assert (
response.json()[0]["subject"]
== "Podsumowanie I semestru - średnia klasy, oceny, frekwencja, zachowanie."
)
assert response.json()[1]["date"] == "06.09.2019 16:30"
# print(response.json())
def test_mobile_access_registed():
if errorcode == 1:
pytest.skip("Skipped due to no cookies detected")
elif errorcode == 2:
pytest.skip("Skipped due to no headers detected")
elif errorcode == 3:
pytest.skip("Skipped due to no student cookies detected")
elif errorcode == 4:
pytest.skip("Skipped due to no school ID detected")
response = client.post(
"/uonetplus-uczen/mobile-access/get-registered-devices",
headers={"Content-Type": "application/json"},
json={
"vulcan_cookies": cookies,
"student": student,
"school_id": school_id,
"host": host,
"symbol": symbol,
"ssl": ssl,
"json": {},
"headers": headars,
},
)
status_check(response.status_code, response.json())
assert (
response.json()[0]["name"]
== "To Be Filled By O.E.M.#To Be Filled By O.E.M. (Windows 8.1)"
)
assert response.json()[1]["id"] == 1234
# print(response.json())
def test_mobile_access_register():
if errorcode == 1:
pytest.skip("Skipped due to no cookies detected")
elif errorcode == 2:
pytest.skip("Skipped due to no headers detected")
elif errorcode == 3:
pytest.skip("Skipped due to no student cookies detected")
elif errorcode == 4:
pytest.skip("Skipped due to no school ID detected")
response = client.post(
"/uonetplus-uczen/mobile-access/register-device",
headers={"Content-Type": "application/json"},
json={
"vulcan_cookies": cookies,
"student": student,
"school_id": school_id,
"host": host,
"symbol": symbol,
"ssl": ssl,
},
)
status_check(response.status_code, response.json())
assert response.json()["pin"] == "999999"
assert response.json()["qr_code_image"]
# print(response.json())
def test_mobile_access_delete_registed():
if errorcode == 1:
pytest.skip("Skipped due to no cookies detected")
elif errorcode == 2:
pytest.skip("Skipped due to no headers detected")
elif errorcode == 3:
pytest.skip("Skipped due to no student cookies detected")
elif errorcode == 4:
pytest.skip("Skipped due to no school ID detected")
response = client.post(
"/uonetplus-uczen/mobile-access/delete-registered-device",
headers={"Content-Type": "application/json"},
json={
"vulcan_cookies": cookies,
"student": student,
"school_id": school_id,
"host": host,
"symbol": symbol,
"ssl": ssl,
"json": {"id": id_mobile_deleted},
"headers": headars,
},
)
status_check(response.status_code, response.json())
# Nowa metoda testowania
# if response.status_code == 404:
# print(response.json())
# else:
# print("Test")
assert response.json()["success"] == True
# print(response.json())