Files
slic/tests/test_utils_elog.py
T
tligui_y d4cb33564d
Run CI Tests / test (push) Successful in 1m43s
Update tests/test_utils_elog.py
2025-08-14 10:46:28 +02:00

145 lines
4.1 KiB
Python

import os
import sys
import tempfile
import requests
import elog
import pytest
from getpass import getuser, getpass
from pathlib import Path
from slic.utils.elog import Elog, get_default_elog_instance
from unittest.mock import patch
from bs4 import BeautifulSoup
def get_test_elog():
return Elog("http://localhost:8080/demo", user="robot", password="testpassword")
def test_get_default_elog_instance_with_direct_password_and_real_check():
url = "http://localhost:8080/demo"
user = "robot"
password = "testpassword"
try:
elog_instance, returned_user = get_default_elog_instance(url, user=user, password=password)
except Exception as e:
pytest.fail(f"elog.open() raised an unexpected exception: {e}")
assert returned_user == user
assert hasattr(elog_instance, "post")
@patch("slic.utils.elog.getpass")
@patch("slic.utils.elog.Path.home")
def test_get_default_elog_instance_asks_password_and_opens(mock_home, mock_getpass):
mock_home.return_value = Path("/does/not/exist") # Fausse home → lecture échoue
mock_getpass.return_value = "testpassword"
url = "http://localhost:8080/demo"
user = "robot"
try:
elog_instance, returned_user = get_default_elog_instance(url, user=user)
except Exception as e:
pytest.fail(f"elog.open() raised an unexpected exception: {e}")
assert returned_user == user
assert hasattr(elog_instance, "post")
@patch("slic.utils.elog.getpass")
@patch("slic.utils.elog.getuser")
@patch("slic.utils.elog.Path.home")
def test_get_default_elog_with_path_home(mock_home, mock_getuser, mock_getpass):
fake_user = "robot"
fake_pw = "testpassword"
mock_getuser.return_value = fake_user
mock_getpass.return_value = fake_pw # fallback safety
tmp_home = Path("/tmp/fake_home_for_robot")
tmp_home.mkdir(parents=True, exist_ok=True)
pw_file = tmp_home / ".elog_psi"
pw_file.write_text(fake_pw)
mock_home.return_value = tmp_home
url = "http://localhost:8080/demo"
try:
try:
elog_instance, returned_user = get_default_elog_instance(url)
except Exception as e:
pytest.fail(f"elog.open() raised an unexpected exception: {e}")
assert returned_user == fake_user
assert hasattr(elog_instance, "post")
finally:
pw_file.unlink(missing_ok=True)
tmp_home.rmdir()
def test_get_default_elog_instance_with_wrong_password():
url = "http://localhost:8080/demo"
user = "robot"
wrong_password = "wrongpassword"
lb, returned_user = get_default_elog_instance(url, user=user, password=wrong_password)
assert returned_user == user
with pytest.raises(elog.LogbookAuthenticationError):
lb.get_message_ids(timeout=5)
def test_post():
elog = get_test_elog()
title = "AUTHOR_OVERRIDE_TEST"
text = "This is a message"
author = "robot"
elog.post(text, attributes = {"Author": author})
url = "http://localhost:8080/demo"
response = requests.get(url)
print("Texte bruuuut :", response.content)
soup = BeautifulSoup(response.content, 'html.parser')
content = soup.get_text()
print("Texte brut :", content)
assert 'This\xa0is\xa0a\xa0message' in content, "Message not found"
assert author in content, f"Author not found"
@patch("slic.utils.elog.Screenshot")
def test_screenshot(mock_screenshot_class):
with tempfile.NamedTemporaryFile(delete=False, suffix=".png") as tmp:
fake_path = tmp.name
tmp.write(b"fake image data")
mock_instance = mock_screenshot_class.return_value
mock_instance.shoot.return_value = [fake_path]
elog = get_test_elog()
test_msg = "SCREENSHOT_INTEGRATION_TEST_MSG_456"
elog.screenshot(message=test_msg)
url = "http://localhost:8080/demo"
response = requests.get(url)
print("Texte bruuuut :", response.content)
soup = BeautifulSoup(response.content, 'html.parser')
content = soup.get_text()
print("Texte brut :", content)
filename = os.path.basename(fake_path)
assert test_msg in content, "Message not found"
assert filename in content, f"Attachment '{filename}' not found in post HTML"
os.remove(fake_path)