# vim: set fileencoding=utf-8 import unittest from unittest.mock import Mock from bemani.common import GameConstants from bemani.data.mysql.game import GameData from bemani.tests.helpers import FakeCursor class TestGameData(unittest.TestCase): def test_put_time_sensitive_settings(self) -> None: game = GameData(Mock(), None) # Verify that we catch incorrect input order with self.assertRaises(Exception) as context: game.put_time_sensitive_settings( GameConstants.BISHI_BASHI, 1, "work", {"start_time": 12345, "end_time": 12340}, ) self.assertTrue("Start time is greater than end time!" in str(context.exception)) # Verify that we catch events spanning no time with self.assertRaises(Exception) as context: game.put_time_sensitive_settings( GameConstants.BISHI_BASHI, 1, "work", {"start_time": 12345, "end_time": 12345}, ) self.assertTrue("This setting spans zero seconds!" in str(context.exception)) # Verify that we ignore finding ourselves before updating game.execute = Mock(return_value=FakeCursor([{"start_time": 12345, "end_time": 12346}])) # type: ignore game.put_time_sensitive_settings( GameConstants.BISHI_BASHI, 1, "work", {"start_time": 12345, "end_time": 12346}, ) # Verify that we catch events overlapping other events in the DB game.execute = Mock(return_value=FakeCursor([{"start_time": 12345, "end_time": 12350}])) # type: ignore with self.assertRaises(Exception) as context: game.put_time_sensitive_settings( GameConstants.BISHI_BASHI, 1, "work", {"start_time": 12347, "end_time": 12355}, ) self.assertTrue( "This event overlaps an existing one with start time 12345 and end time 12350" in str(context.exception) )