Model/model_data/tests/test_utils.py
2023-07-20 12:24:34 +01:00

67 lines
2.4 KiB
Python

import logging
from io import StringIO
from unittest.mock import patch
from model_data.utils import is_percentage_or_number, correct_spelling
from utils.logger import setup_logger
class TestLogger:
def test_setup_logger_default(self):
log_stream = StringIO()
handler = logging.StreamHandler(log_stream)
logger = setup_logger()
logger.addHandler(handler)
# log something
logger.info("Hello World!")
log_stream.seek(0)
# assert that log was written
assert log_stream.read() == "Hello World!\n"
# remove the handler after use
logger.removeHandler(handler)
@patch('logging.FileHandler')
def test_setup_logger_file(self, mock_file_handler):
# setup the logger
logger = setup_logger(log_file='test.log', overwrite_handler=True)
# assert FileHandler was called correctly
mock_file_handler.assert_called_once_with('test.log')
# clean up after use
for handler in logger.handlers[:]:
handler.close()
logger.removeHandler(handler)
def test_setup_logger_loglevel(self):
log_stream = StringIO()
handler = logging.StreamHandler(log_stream)
logger = setup_logger(level=logging.DEBUG)
logger.addHandler(handler)
# log something
logger.debug("Hello World!")
log_stream.seek(0)
# assert that log was written
assert log_stream.read() == "Hello World!\n"
# remove the handler after use
logger.removeHandler(handler)
def test_is_percentage_or_number(self):
assert is_percentage_or_number("88")
assert is_percentage_or_number("88%")
assert not is_percentage_or_number("abc")
assert not is_percentage_or_number("")
assert not is_percentage_or_number("88.0") # only integer numbers or percentages
assert is_percentage_or_number("101%") # numbers over 100 allowed
assert not is_percentage_or_number("-1") # negative numbers not allowed
def test_correct_spelling(self):
assert correct_spelling("speling") == "spelling"
assert correct_spelling("88") == "88" # numbers are left unchanged
assert correct_spelling("corerct") == "correct"
assert correct_spelling("excllent") == "excellent"
assert correct_spelling("") == "" # empty string should return an empty string
assert correct_spelling("88%") == "88%" # percentages are left unchanged