50 lines
1.6 KiB
Python
50 lines
1.6 KiB
Python
from bs4 import BeautifulSoup
|
|
import backup.exceptions
|
|
import inspect
|
|
import pytest
|
|
from backup.exceptions import GoogleCredGenerateError, KnownError, KnownTransient, SimulatedError, GoogleDrivePermissionDenied, InvalidConfigurationValue, LogicError, ProtocolError, NoBackup, NotUploadable, PleaseWait, UploadFailed
|
|
from .conftest import ReaderHelper
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_verify_coverage(ui_server, reader: ReaderHelper):
|
|
# Get the list of exception codes
|
|
ignore = [
|
|
KnownError,
|
|
KnownTransient,
|
|
SimulatedError,
|
|
GoogleDrivePermissionDenied,
|
|
InvalidConfigurationValue,
|
|
LogicError,
|
|
NoBackup,
|
|
NotUploadable,
|
|
PleaseWait,
|
|
ProtocolError,
|
|
UploadFailed,
|
|
GoogleCredGenerateError,
|
|
]
|
|
codes = {}
|
|
for name, obj in inspect.getmembers(backup.exceptions):
|
|
if inspect.isclass(obj) and (KnownError in obj.__bases__) and obj not in ignore:
|
|
codes[obj().code()] = obj
|
|
|
|
# Get the list of ui dialogs
|
|
document = await reader.get("", json=False)
|
|
page = BeautifulSoup(document, 'html.parser')
|
|
|
|
dialogs = {}
|
|
for div in page.find_all("div"):
|
|
cls = div.get("class")
|
|
if cls is None:
|
|
continue
|
|
if "error_card" in cls:
|
|
for specific_class in cls:
|
|
if specific_class in dialogs:
|
|
dialogs[specific_class] = dialogs[specific_class] + 1
|
|
else:
|
|
dialogs[specific_class] = 1
|
|
|
|
# Make sure exactly one dialog has the class
|
|
for code in codes.keys():
|
|
assert dialogs[code] == 1
|