wulkanowy-web/backend/test.py
Patryk 9a61b7d812
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

421 lines
15 KiB
Python

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())