Newer
Older
from email import message_from_file, policy
from os import listdir, remove
from os.path import abspath, dirname, exists, isfile, join
import caosdb as db
from caosadvancedtools.serverside.helper import (NameCollector, get_data,
get_file_via_download,
init_data_model,
parse_arguments, send_mail)
from caosdb import RecordType, configure_connection, get_config
from caosdb.connection.mockup import MockUpResponse, MockUpServerConnection
def get_data_example():
return abspath(join(dirname(__file__), "sss_helper_example_data.json"))
def setup_module():
connection = configure_connection(url="unittests", username="testuser",
password_method="plain",
password="testpassword", timeout=200,
implementation=MockUpServerConnection)
entities = '<Response><RecordType name="Test" id="1234"/></Response>'
connection._delegate_connection.resources.append(
lambda **kwargs: MockUpResponse(200, {}, entities))
def teardown_module():
for m in get_tmp_mails():
remove(m)
def get_tmp_mails():
tmpmail = "/tmp/mail"
if not exists(tmpmail):
return []
mails = [join(tmpmail, f) for f in listdir(tmpmail) if isfile(join(tmpmail,
f))]
return mails
def test_parse_arguments():
args = parse_arguments(["--auth-token", "1234ABCD", "test.json"])
assert args.filename == "test.json"
assert args.auth_token == "1234ABCD"
def test_get_data():
data = get_data(filename=get_data_example())
# default={"test": "bla"})
assert data["box"] == 2345
data = get_data(filename=get_data_example(),
default={"test": "bla", "comment": "no comment"})
assert data["box"] == 2345
assert data["test"] == "bla"
assert data["comment"] == "this is a comment"
def test_init_data_model():
rt = RecordType(name="Test")
assert rt.id is None
init_data_model([rt])
assert rt.id == 1234
@mark.skipif("Misc" not in get_config() or
"sendmail" not in get_config()["Misc"],
reason="sendmail client not defined")
def test_send_mail():
assert len(get_tmp_mails()) == 0
send_mail("me@example.com", "you@example.com", "the subject", "hello!")
mails = get_tmp_mails()
assert len(mails) == 1
with open(mails[0], "r") as f:
msg = message_from_file(f, policy=policy.SMTP)
assert msg["From"] == "me@example.com"
assert msg["To"] == "you@example.com"
assert msg["Subject"] == "the subject"
assert msg.get_content() == "hello!\n"
def test_send_mail_error():
with raises(subprocess.CalledProcessError):
send_mail("me@example.com", "you@example.com", "the subject", "hello!",
send_mail_bin="/bin/cat")
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
def test_get_file_via_download():
class DummyFile():
size = 5
id = 5
tmp = DummyFile()
tmp.size = 0
assert isinstance(get_file_via_download(tmp), str)
# TODO test whether something ends up in the logger
class Inconsistent(DummyFile):
def download(*args, **kwargs):
raise db.ConsistencyError()
with raises(db.ConsistencyError):
get_file_via_download(Inconsistent())
# TODO test whether something ends up in the logger
class NotThere(DummyFile):
def download(*args, **kwargs):
raise db.CaosDBException()
with raises(db.CaosDBException):
get_file_via_download(Inconsistent())
def test_get_unique_savename():
nc = NameCollector()
assert nc.get_unique_savename("ha") == "ha"
assert nc.get_unique_savename("ho") == "ho"
assert nc.get_unique_savename("ho") == "ho_2"
assert nc.get_unique_savename("ha") == "ha_2"
assert nc.get_unique_savename("ha") == "ha_3"
assert nc.get_unique_savename("hi") == "hi"
# check reset
nc = NameCollector()
assert nc.get_unique_savename("ha") == "ha"