openflexure-microscope-server/tests/test_capture_manager.py
2020-11-30 13:36:45 +00:00

151 lines
3.5 KiB
Python

import os
from typing import Type
import pytest
from freezegun import freeze_time
from openflexure_microscope.captures.capture_manager import (
BASE_CAPTURE_PATH,
TEMP_CAPTURE_PATH,
CaptureManager,
)
def test_new_manager():
m = CaptureManager()
assert BASE_CAPTURE_PATH
assert TEMP_CAPTURE_PATH
assert m.paths["default"] == BASE_CAPTURE_PATH
assert m.paths["temp"] == TEMP_CAPTURE_PATH
def test_update_settings():
m = CaptureManager()
assert m.paths["default"] == BASE_CAPTURE_PATH
assert m.paths["temp"] == TEMP_CAPTURE_PATH
new_settings = {
"paths": {"default": "BASE_CAPTURE_PATH", "temp": "TEMP_CAPTURE_PATH"}
}
m.update_settings(new_settings)
assert m.paths["default"] == "BASE_CAPTURE_PATH"
assert m.paths["temp"] == "TEMP_CAPTURE_PATH"
assert m.read_settings() == new_settings
def test__new_output():
m = CaptureManager()
out = m._new_output(True, "filename", "subfolder", "fmt")
assert out.file == os.path.join(TEMP_CAPTURE_PATH, "subfolder", "filename.fmt")
def test__new_output_generate_filename():
m = CaptureManager()
out = m._new_output(True, None, "subfolder", "fmt")
# Assert a filename was actually generated
assert out.name != ".fmt"
def test_new_image():
m = CaptureManager()
out = m.new_image()
capture_key = str(out.id)
assert capture_key in m.images.keys()
assert m.images[capture_key] is out
def test_new_video():
m = CaptureManager()
out = m.new_video()
capture_key = str(out.id)
assert capture_key in m.videos.keys()
assert m.videos[capture_key] is out
def test_image_from_id_str():
m = CaptureManager()
out = m.new_image()
capture_key = str(out.id)
assert m.image_from_id(capture_key) is out
def test_image_from_id_int():
m = CaptureManager()
out = m.new_image()
capture_key = int(out.id)
assert m.image_from_id(capture_key) is out
def test_image_from_id_uuid():
m = CaptureManager()
out = m.new_image()
capture_key = out.id
assert m.image_from_id(capture_key) is out
def test_image_from_id_invalid():
m = CaptureManager()
out = m.new_image()
capture_key = object()
with pytest.raises(TypeError):
m.image_from_id(capture_key) is out
def test_video_from_id_str():
m = CaptureManager()
out = m.new_video()
capture_key = str(out.id)
assert m.video_from_id(capture_key) is out
def test_video_from_id_int():
m = CaptureManager()
out = m.new_video()
capture_key = int(out.id)
assert m.video_from_id(capture_key) is out
def test_video_from_id_uuid():
m = CaptureManager()
out = m.new_video()
capture_key = out.id
assert m.video_from_id(capture_key) is out
def test_video_from_id_invalid():
m = CaptureManager()
out = m.new_video()
capture_key = object()
with pytest.raises(TypeError):
m.video_from_id(capture_key) is out
@freeze_time("2020-11-27 12:00:01")
def test_generate_numbered_basename():
m = CaptureManager()
for _ in range(10):
m.new_image()
generated_filenames = [obj.basename for obj in m.images.values()]
# Assert enough names were generated
assert len(generated_filenames) == 10
# Assert all names are unique
len(generated_filenames) > len(set(generated_filenames))
# Assert all filenames are in the expected form
for fname in generated_filenames:
assert fname.startswith("2020-11-27_12-00-01")
def test_context_manager():
with CaptureManager() as m:
m.new_image()
m.new_video()