forked from openlp/openlp
321 lines
10 KiB
Python
321 lines
10 KiB
Python
|
# -*- coding: utf-8 -*-
|
||
|
|
||
|
##########################################################################
|
||
|
# OpenLP - Open Source Lyrics Projection #
|
||
|
# ---------------------------------------------------------------------- #
|
||
|
# Copyright (c) 2008-2022 OpenLP Developers #
|
||
|
# ---------------------------------------------------------------------- #
|
||
|
# This program is free software: you can redistribute it and/or modify #
|
||
|
# it under the terms of the GNU General Public License as published by #
|
||
|
# the Free Software Foundation, either version 3 of the License, or #
|
||
|
# (at your option) any later version. #
|
||
|
# #
|
||
|
# This program is distributed in the hope that it will be useful, #
|
||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
|
||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
|
||
|
# GNU General Public License for more details. #
|
||
|
# #
|
||
|
# You should have received a copy of the GNU General Public License #
|
||
|
# along with this program. If not, see <https://www.gnu.org/licenses/>. #
|
||
|
##########################################################################
|
||
|
"""
|
||
|
Test ProjectorDB.get_projectors()
|
||
|
"""
|
||
|
|
||
|
import logging
|
||
|
import openlp.core.projectors.db
|
||
|
|
||
|
from openlp.core.projectors.constants import PJLINK_PORT
|
||
|
|
||
|
from tests.resources.projector.data import TEST1_DATA, TEST2_DATA, TEST3_DATA
|
||
|
|
||
|
test_module = openlp.core.projectors.db.__name__
|
||
|
Projector = openlp.core.projectors.db.Projector
|
||
|
|
||
|
|
||
|
def test_invalid_projector(projectordb, caplog):
|
||
|
"""
|
||
|
Test get_projector with no Projector() instance and no options
|
||
|
"""
|
||
|
# GIVEN: Test setup
|
||
|
caplog.set_level(logging.DEBUG)
|
||
|
logs = [(test_module, logging.WARNING, 'get_projector(): No valid query found - cancelled')]
|
||
|
|
||
|
# WHEN: Called
|
||
|
caplog.clear()
|
||
|
t_chk = projectordb.get_projector()
|
||
|
|
||
|
# THEN: Only log entries found and return is None
|
||
|
assert caplog.record_tuples == logs, 'Invalid log entries'
|
||
|
assert t_chk is None, 'Should have returned None'
|
||
|
|
||
|
|
||
|
def test_invald_key(projectordb, caplog):
|
||
|
"""
|
||
|
Test returning None if not one of the main keys
|
||
|
"""
|
||
|
# GIVEN: Test setup
|
||
|
caplog.set_level(logging.DEBUG)
|
||
|
logs = [(test_module, logging.WARNING, 'get_projector(): No valid query found - cancelled')]
|
||
|
|
||
|
# WHEN: Called
|
||
|
caplog.clear()
|
||
|
t_chk = projectordb.get_projector(pin='')
|
||
|
|
||
|
# THEN: Logs and one returned item
|
||
|
assert caplog.record_tuples == logs, 'Invalid log entries'
|
||
|
assert t_chk is None, 'Should have returned None'
|
||
|
|
||
|
|
||
|
def test_by_id(projectordb, caplog):
|
||
|
"""
|
||
|
Test returning one entry by ID
|
||
|
"""
|
||
|
# GIVEN: Test setup
|
||
|
caplog.set_level(logging.DEBUG)
|
||
|
logs = [(test_module, logging.DEBUG, 'Filter by ID')]
|
||
|
t_p2 = Projector(**TEST2_DATA)
|
||
|
|
||
|
# WHEN: Called
|
||
|
caplog.clear()
|
||
|
t_chk = projectordb.get_projector(id=2)
|
||
|
|
||
|
# THEN: Logs and one returned item
|
||
|
assert caplog.record_tuples == logs, 'Invalid log entries'
|
||
|
assert len(t_chk) == 1, 'More than one record returned'
|
||
|
assert t_p2 == t_chk[0], 'DB record != t_chk'
|
||
|
|
||
|
|
||
|
def test_by_name(projectordb, caplog):
|
||
|
"""
|
||
|
Test returning one entry by name
|
||
|
"""
|
||
|
# GIVEN: Test setup
|
||
|
caplog.set_level(logging.DEBUG)
|
||
|
logs = [(test_module, logging.DEBUG, 'Filter by Name')]
|
||
|
t_p2 = Projector(**TEST2_DATA)
|
||
|
|
||
|
# WHEN: Called
|
||
|
caplog.clear()
|
||
|
t_chk = projectordb.get_projector(name=t_p2.name)
|
||
|
|
||
|
# THEN: Logs and one returned item
|
||
|
assert caplog.record_tuples == logs, 'Invalid log entries'
|
||
|
assert len(t_chk) == 1, 'More than one record returned'
|
||
|
assert t_p2 == t_chk[0], 'DB record != t_chk'
|
||
|
|
||
|
|
||
|
def test_by_ip_single(projectordb, caplog):
|
||
|
"""
|
||
|
Test returning one entry by IP
|
||
|
"""
|
||
|
# GIVEN: Test setup
|
||
|
caplog.set_level(logging.DEBUG)
|
||
|
logs = [(test_module, logging.DEBUG, 'Filter by IP')]
|
||
|
t_p2 = Projector(**TEST2_DATA)
|
||
|
|
||
|
# WHEN: Called
|
||
|
caplog.clear()
|
||
|
t_chk = projectordb.get_projector(ip=t_p2.ip)
|
||
|
|
||
|
# THEN: Logs and one returned item
|
||
|
assert caplog.record_tuples == logs, 'Invalid log entries'
|
||
|
assert len(t_chk) == 1, 'More than one record returned'
|
||
|
assert t_p2 == t_chk[0], 'DB record != t_chk'
|
||
|
|
||
|
|
||
|
def test_by_ip_multiple(projectordb, caplog):
|
||
|
"""
|
||
|
Test returning multiple entries by IP
|
||
|
"""
|
||
|
# GIVEN: Test setup
|
||
|
caplog.set_level(logging.DEBUG)
|
||
|
logs = [(test_module, logging.DEBUG, 'Filter by IP')]
|
||
|
t_p2 = Projector(**TEST2_DATA)
|
||
|
t_p2.id = None
|
||
|
t_p2.port = PJLINK_PORT
|
||
|
projectordb.add_projector(projector=t_p2)
|
||
|
t_p2chk = Projector(**TEST2_DATA)
|
||
|
|
||
|
# WHEN: Called
|
||
|
caplog.clear()
|
||
|
t_chk = projectordb.get_projector(ip=t_p2.ip)
|
||
|
|
||
|
# THEN: Logs and one returned item
|
||
|
assert caplog.record_tuples == logs, 'Invalid log entries'
|
||
|
assert len(t_chk) == 2, 'Should have returned 2 records'
|
||
|
assert t_p2.name == t_chk[0].name and t_p2.name == t_chk[1].name, 'DB records names do not match'
|
||
|
assert t_p2.ip == t_chk[0].ip and t_p2.ip == t_chk[1].ip, 'DB records IP addresses do not match'
|
||
|
assert t_p2.name == t_chk[0].name and t_p2.name == t_chk[1].name, 'DB records names do not match'
|
||
|
assert t_p2chk.port == t_chk[0].port and t_p2.port == t_chk[1].port, 'DB records ports do not match'
|
||
|
|
||
|
|
||
|
def test_by_port_single(projectordb, caplog):
|
||
|
"""
|
||
|
Test returning one entry by Port
|
||
|
"""
|
||
|
# GIVEN: Test setup
|
||
|
caplog.set_level(logging.DEBUG)
|
||
|
logs = [(test_module, logging.DEBUG, 'Filter by Port')]
|
||
|
t_p2 = Projector(**TEST2_DATA)
|
||
|
|
||
|
# WHEN: Called
|
||
|
caplog.clear()
|
||
|
t_chk = projectordb.get_projector(port=t_p2.port)
|
||
|
|
||
|
# THEN: Logs and one returned item
|
||
|
assert caplog.record_tuples == logs, 'Invalid log entries'
|
||
|
assert len(t_chk) == 1, 'More than one record returned'
|
||
|
assert t_p2 == t_chk[0], 'DB record != t_chk'
|
||
|
|
||
|
|
||
|
def test_by_port_multiple(projectordb_mtdb, caplog):
|
||
|
"""
|
||
|
Test returning one entry by Port
|
||
|
"""
|
||
|
# GIVEN: Test setup
|
||
|
caplog.set_level(logging.DEBUG)
|
||
|
logs = [(test_module, logging.DEBUG, 'Filter by Port')]
|
||
|
|
||
|
t_p1 = Projector(**TEST1_DATA)
|
||
|
t_p1.port = PJLINK_PORT
|
||
|
projectordb_mtdb.add_projector(t_p1)
|
||
|
t_p2 = Projector(**TEST2_DATA)
|
||
|
t_p2.port = PJLINK_PORT
|
||
|
projectordb_mtdb.add_projector(t_p2)
|
||
|
t_p3 = Projector(**TEST3_DATA)
|
||
|
t_p3.port = PJLINK_PORT
|
||
|
projectordb_mtdb.add_projector(t_p3)
|
||
|
|
||
|
# WHEN: Called
|
||
|
caplog.clear()
|
||
|
t_chk = projectordb_mtdb.get_projector(port=PJLINK_PORT)
|
||
|
|
||
|
# THEN: Logs and one returned item
|
||
|
assert caplog.record_tuples == logs, 'Invalid log entries'
|
||
|
assert len(t_chk) == 3, 'Should have returned 3 records'
|
||
|
assert t_chk[0].ip == TEST1_DATA['ip'], 'DB record 1 IP does not match'
|
||
|
assert t_chk[1].ip == TEST2_DATA['ip'], 'DB record 2 IP does not match'
|
||
|
assert t_chk[2].ip == TEST3_DATA['ip'], 'DB record 3 IP does not match'
|
||
|
|
||
|
|
||
|
def test_by_ip_port(projectordb, caplog):
|
||
|
"""
|
||
|
Test returning one entry by IP and Port
|
||
|
"""
|
||
|
# GIVEN: Test setup
|
||
|
caplog.set_level(logging.DEBUG)
|
||
|
logs = [(test_module, logging.DEBUG, 'Filter by IP Port')]
|
||
|
t_p2 = Projector(**TEST2_DATA)
|
||
|
|
||
|
# WHEN: Called
|
||
|
caplog.clear()
|
||
|
t_chk = projectordb.get_projector(port=t_p2.port, ip=t_p2.ip)
|
||
|
|
||
|
# THEN: Logs and one returned item
|
||
|
assert caplog.record_tuples == logs, 'Invalid log entries'
|
||
|
assert len(t_chk) == 1, 'More than one record returned'
|
||
|
assert t_p2 == t_chk[0], 'DB record != t_chk'
|
||
|
|
||
|
|
||
|
def test_by_projector_id(projectordb, caplog):
|
||
|
"""
|
||
|
Test returning one entry by projector.id
|
||
|
"""
|
||
|
# GIVEN: Test setup
|
||
|
caplog.set_level(logging.DEBUG)
|
||
|
logs = [(test_module, logging.DEBUG, 'Filter by ID')]
|
||
|
t_p2 = Projector(**TEST2_DATA)
|
||
|
|
||
|
# WHEN: Called
|
||
|
caplog.clear()
|
||
|
t_chk = projectordb.get_projector(projector=t_p2)
|
||
|
|
||
|
# THEN: Logs and one returned item
|
||
|
assert caplog.record_tuples == logs, 'Invalid log entries'
|
||
|
assert len(t_chk) == 1, 'More than one record returned'
|
||
|
assert t_p2 == t_chk[0], 'DB record != t_chk'
|
||
|
|
||
|
|
||
|
def test_by_projector_name(projectordb, caplog):
|
||
|
"""
|
||
|
Test returning one entry by projector.name
|
||
|
"""
|
||
|
# GIVEN: Test setup
|
||
|
caplog.set_level(logging.DEBUG)
|
||
|
logs = [(test_module, logging.DEBUG, 'Filter by Name')]
|
||
|
t_p2 = Projector(**TEST2_DATA)
|
||
|
t_p2.id = None
|
||
|
|
||
|
# WHEN: Called
|
||
|
caplog.clear()
|
||
|
t_chk = projectordb.get_projector(projector=t_p2)
|
||
|
|
||
|
# THEN: Logs and one returned item
|
||
|
assert caplog.record_tuples == logs, 'Invalid log entries'
|
||
|
assert len(t_chk) == 1, 'More than one record returned'
|
||
|
assert t_p2 == t_chk[0], 'DB record != t_chk'
|
||
|
|
||
|
|
||
|
def test_by_projector_ip(projectordb, caplog):
|
||
|
"""
|
||
|
Test returning one entry by projector.ip
|
||
|
"""
|
||
|
# GIVEN: Test setup
|
||
|
caplog.set_level(logging.DEBUG)
|
||
|
logs = [(test_module, logging.DEBUG, 'Filter by IP')]
|
||
|
t_p2 = Projector(**TEST2_DATA)
|
||
|
t_p2.id = t_p2.name = t_p2.port = None
|
||
|
t_p2chk = Projector(**TEST2_DATA)
|
||
|
|
||
|
# WHEN: Called
|
||
|
caplog.clear()
|
||
|
t_chk = projectordb.get_projector(projector=t_p2)
|
||
|
|
||
|
# THEN: Logs and one returned item
|
||
|
assert caplog.record_tuples == logs, 'Invalid log entries'
|
||
|
assert len(t_chk) == 1, 'More than one record returned'
|
||
|
assert t_p2chk == t_chk[0], 'DB record != t_chk'
|
||
|
|
||
|
|
||
|
def test_by_projector_port(projectordb, caplog):
|
||
|
"""
|
||
|
Test returning one entry by projector.port
|
||
|
"""
|
||
|
# GIVEN: Test setup
|
||
|
caplog.set_level(logging.DEBUG)
|
||
|
logs = [(test_module, logging.DEBUG, 'Filter by Port')]
|
||
|
t_p2 = Projector(**TEST2_DATA)
|
||
|
t_p2.id = t_p2.name = t_p2.ip = None
|
||
|
t_p2chk = Projector(**TEST2_DATA)
|
||
|
|
||
|
# WHEN: Called
|
||
|
caplog.clear()
|
||
|
t_chk = projectordb.get_projector(projector=t_p2)
|
||
|
|
||
|
# THEN: Logs and one returned item
|
||
|
assert caplog.record_tuples == logs, 'Invalid log entries'
|
||
|
assert len(t_chk) == 1, 'More than one record returned'
|
||
|
assert t_p2chk == t_chk[0], 'DB record != t_chk'
|
||
|
|
||
|
|
||
|
def test_by_projector_ip_port(projectordb, caplog):
|
||
|
"""
|
||
|
Test returning one entry by projector.port
|
||
|
"""
|
||
|
# GIVEN: Test setup
|
||
|
caplog.set_level(logging.DEBUG)
|
||
|
logs = [(test_module, logging.DEBUG, 'Filter by IP Port')]
|
||
|
t_p2 = Projector(**TEST2_DATA)
|
||
|
t_p2.id = t_p2.name = None
|
||
|
t_p2chk = Projector(**TEST2_DATA)
|
||
|
|
||
|
# WHEN: Called
|
||
|
caplog.clear()
|
||
|
t_chk = projectordb.get_projector(projector=t_p2)
|
||
|
|
||
|
# THEN: Logs and one returned item
|
||
|
assert caplog.record_tuples == logs, 'Invalid log entries'
|
||
|
assert len(t_chk) == 1, 'More than one record returned'
|
||
|
assert t_p2chk == t_chk[0], 'DB record != t_chk'
|