def setup_class(self) -> None: #pylint: disable=W0201 appInfo = AppInfo() settingsFilenameOrig = os.path.join( appInfo.path, "misc/setup/situationboard_default.conf") settingsFilename = os.path.join(appInfo.path, ".temp/situationboard.conf") shutil.copy(settingsFilenameOrig, settingsFilename) self.settings = Settings(settingsFilename, appInfo.path) section = ActionSendMessagePowerAlarm.PLUGIN_TYPE + Plugin.NAME_SEPARATOR + "send_poweralarm" self.settings.setString(section, "api_key", "NO_API_KEY") self.settings.setString(section, "api_group_nodetails", "NODETAILS") self.settings.setString(section, "api_group_reduced", "REDUCED") self.settings.setString(section, "api_group_full", "FULL") self.settings.setString(section, "api_group_tablet", "TABLET") self.settings.setString(section, "api_group_binary", "BINARY") self.settings.setString(section, "api_group_admin", "ADMIN") self.settings.setBoolean(section, "send_invalid", True) self.settings.setBoolean(section, "admin_send_setting", True) self.settings.setBoolean(section, "admin_send_unhandled", True) self.settings.setBoolean(section, "admin_send_invalid", False) self.settings.setString(section, "alarm_message", "TEST_ALARM") self.action = ActionSendMessagePowerAlarm("", self.settings, test=True)
def setup_class(self) -> None: #pylint: disable=W0201 self.appInfo = AppInfo() settingsFilenameOrig = os.path.join(self.appInfo.path, "misc/setup/situationboard_default.conf") settingsFilename = os.path.join(self.appInfo.path, ".temp/situationboard.conf") databaseFilename = os.path.join(self.appInfo.path, ".temp/situationboard.sqlite") shutil.copy(settingsFilenameOrig, settingsFilename) self.database = Database(databaseFilename, reset = True) settings = Settings(settingsFilename, self.appInfo.path) settings.setFrontendHeader("header") settings.setFrontendNews("news") settings.setBoolean(Settings.SECTION_BACKEND, "web_api", True) displayPowerManager = DisplayPowerManager(settings) self.webSocket = WebSocket(self.appInfo, settings, self.database) pluginManager = PluginManager(settings, self.database, self.webSocket, displayPowerManager) self.webSocket.init(pluginManager) self.appClient = self.webSocket.app_test_client() self.socketClient = self.webSocket.socket_test_client(self.appClient)
def test_handle_event(self) -> None: #pylint: disable=W0201 appInfo = AppInfo() settingsFilenameOrig = os.path.join( appInfo.path, "misc/setup/situationboard_default.conf") settingsFilename = os.path.join(appInfo.path, ".temp/situationboard.conf") shutil.copy(settingsFilenameOrig, settingsFilename) settings = Settings(settingsFilename, appInfo.path) action = ActionUpdateSettings("", settings) # init and check initial settings settings.setFrontendHeader(Test_ActionUpdateSettings.INITIAL_HEADER) settings.setFrontendNews(Test_ActionUpdateSettings.INITIAL_NEWS) assert (settings.getFrontendHeader() == Test_ActionUpdateSettings.INITIAL_HEADER) assert (settings.getFrontendNews() == Test_ActionUpdateSettings.INITIAL_NEWS) # check that updating header setting succeeds settingEvent = SettingEvent() settingEvent.key = "header" settingEvent.value = Test_ActionUpdateSettings.UPDATED_HEADER settingEvent.flags = SettingEvent.FLAGS_VALID action.handleEvent(settingEvent) assert (settings.getFrontendHeader() == Test_ActionUpdateSettings.UPDATED_HEADER) # check that updating news setting succeeds settingEvent = SettingEvent() settingEvent.key = "news" settingEvent.value = Test_ActionUpdateSettings.UPDATED_NEWS settingEvent.flags = SettingEvent.FLAGS_VALID action.handleEvent(settingEvent) assert (settings.getFrontendNews() == Test_ActionUpdateSettings.UPDATED_NEWS)
def setup_class(self) -> None: #pylint: disable=W0201 appInfo = AppInfo() settingsFilenameOrig = os.path.join( appInfo.path, "misc/setup/situationboard_default.conf") settingsFilename = os.path.join(appInfo.path, ".temp/situationboard.conf") shutil.copy(settingsFilenameOrig, settingsFilename) s = Settings(settingsFilename, appInfo.path) self.p = MessageParserSMS("", s) self.defaultSender = "112" self.alarmSender = "+49112" # alarm sender set in config self.settingSender = "123" self.defaultTimestamp = datetime.datetime.now().strftime( AlarmEvent.TIMESTAMP_FORMAT) self.eid = 1302
def test_handle_event(self) -> None: #pylint: disable=W0201 appInfo = AppInfo() settingsFilenameOrig = os.path.join( appInfo.path, "misc/setup/situationboard_default.conf") settingsFilename = os.path.join(appInfo.path, ".temp/situationboard.conf") databaseFilename = os.path.join(appInfo.path, ".temp/situationboard.sqlite") shutil.copy(settingsFilenameOrig, settingsFilename) settings = Settings(settingsFilename, appInfo.path) maxLastEvents = 10 displayPowerManager = DisplayPowerManager(settings) db = Database(databaseFilename, reset=True) webSocket = WebSocket(appInfo, settings, db) pluginManager = PluginManager(settings, db, webSocket, displayPowerManager) webSocket.init(pluginManager) # check that creating a database works and yields an empty database assert (db.getEventCount(textOnly=False) == 0) assert (db.getEventCount(textOnly=True) == 0) assert (db.getEvent(1302) is None) assert (len(db.getEvents(textOnly=False)) == 0) assert (len(db.getEvents(textOnly=True)) == 0) assert (len(db.getLastEvents(maxLastEvents, textOnly=False)) == 0) assert (len(db.getLastEvents(maxLastEvents, textOnly=True)) == 0) # check for valid stats assert (db.getEventStats(DatabaseTimespan.TOTAL, textOnly=False) == 0) assert (db.getEventStats(DatabaseTimespan.YEAR, textOnly=False) == 0) assert (db.getEventStats(DatabaseTimespan.MONTH, textOnly=False) == 0) assert (db.getEventStats(DatabaseTimespan.TODAY, textOnly=False) == 0) assert (db.getEventStats(DatabaseTimespan.TOTAL, textOnly=True) == 0) assert (db.getEventStats(DatabaseTimespan.YEAR, textOnly=True) == 0) assert (db.getEventStats(DatabaseTimespan.MONTH, textOnly=True) == 0) assert (db.getEventStats(DatabaseTimespan.TODAY, textOnly=True) == 0) action = ActionUpdateDatabase("", settings, db, webSocket) # check that inserting an alarm event succeeds newEvent = self.__createEvent() action.handleEvent(newEvent) assert (not newEvent.noID) assert (db.getEventCount(textOnly=False) == 1) assert (db.getEventCount(textOnly=True) == 1) assert (len(db.getEvents(textOnly=False)) == 1) assert (len(db.getEvents(textOnly=True)) == 1) assert (len(db.getLastEvents(maxLastEvents, textOnly=False)) == 1) assert (len(db.getLastEvents(maxLastEvents, textOnly=True)) == 1) newEventID = newEvent.eventID assert (db.getEvent(newEventID) is not None) # check for valid stats assert (db.getEventStats(DatabaseTimespan.TOTAL, textOnly=False) == 1) assert (db.getEventStats(DatabaseTimespan.YEAR, textOnly=False) == 1) assert (db.getEventStats(DatabaseTimespan.MONTH, textOnly=False) == 1) assert (db.getEventStats(DatabaseTimespan.TODAY, textOnly=False) == 1) assert (db.getEventStats(DatabaseTimespan.TOTAL, textOnly=True) == 1) assert (db.getEventStats(DatabaseTimespan.YEAR, textOnly=True) == 1) assert (db.getEventStats(DatabaseTimespan.MONTH, textOnly=True) == 1) assert (db.getEventStats(DatabaseTimespan.TODAY, textOnly=True) == 1) # check that updating an alarm event succeeds self.__updateEvent(newEvent) action.handleEvent(newEvent) assert (newEvent.eventID == newEventID) assert (db.getEventCount(textOnly=False) == 1) assert (db.getEventCount(textOnly=True) == 1) assert (len(db.getEvents(textOnly=False)) == 1) assert (len(db.getEvents(textOnly=True)) == 1) assert (len(db.getLastEvents(maxLastEvents, textOnly=False)) == 1) assert (len(db.getLastEvents(maxLastEvents, textOnly=True)) == 1) retrievedEvent = db.getEvent(newEventID) assert (retrievedEvent is not None) assert (retrievedEvent.comment == Test_ActionUpdateDatabase.UPDATED_COMMENT) # check for valid stats assert (db.getEventStats(DatabaseTimespan.TOTAL, textOnly=False) == 1) assert (db.getEventStats(DatabaseTimespan.YEAR, textOnly=False) == 1) assert (db.getEventStats(DatabaseTimespan.MONTH, textOnly=False) == 1) assert (db.getEventStats(DatabaseTimespan.TODAY, textOnly=False) == 1) assert (db.getEventStats(DatabaseTimespan.TOTAL, textOnly=True) == 1) assert (db.getEventStats(DatabaseTimespan.YEAR, textOnly=True) == 1) assert (db.getEventStats(DatabaseTimespan.MONTH, textOnly=True) == 1) assert (db.getEventStats(DatabaseTimespan.TODAY, textOnly=True) == 1) db.commitAndClose()
def test_settings(self) -> None: appInfo = AppInfo() settingsFilenameOrig = os.path.join(appInfo.path, "misc/setup/situationboard_default.conf") settingsFilename = os.path.join(appInfo.path, ".temp/situationboard.conf") shutil.copy(settingsFilenameOrig, settingsFilename) s = Settings(settingsFilename, appInfo.path) frontendHeaderTest = "Frontend\n\"Complicated\"\tHeader\\=Test=1234" assert(s.getFrontendHeader() != frontendHeaderTest) s.setFrontendHeader(frontendHeaderTest) assert(s.getFrontendHeader() == frontendHeaderTest) frontendNewsTest = "Frontend\n\"Complicated\"\tNews\\=Test=1234" assert(s.getFrontendNews() != frontendNewsTest) s.setFrontendNews(frontendNewsTest) assert(s.getFrontendNews() == frontendNewsTest) test_string = "test_string" test_boolean = True test_int = 112 test_float = 1.12 s.setString("test", "test_string", test_string) s.setBoolean("test", "test_boolean", test_boolean) s.setInt("test", "test_int", test_int) s.setFloat("test", "test_float", test_float) s.store() sr = Settings(settingsFilename, appInfo.path) assert(sr.getFrontendHeader() == frontendHeaderTest) assert(sr.getFrontendNews() == frontendNewsTest) assert(sr.getString("test", "test_string", "") == test_string) assert(sr.getBoolean("test", "test_boolean", not test_boolean) == test_boolean) assert(sr.getInt("test", "test_int", 0) == test_int) assert(sr.getFloat("test", "test_float", 0.0) == test_float) defaultSources = ["dummy"] defaultActions = ["search_location", "update_database", "update_settings", "update_frontend" , "update_calendar"] defaultLanguage = "de" assert(sr.getBackendSources() == defaultSources) # test getList and correct default sources assert(sr.getBackendActions() == defaultActions) # test getList and correct default actions assert(sr.getFrontendLanguage() == defaultLanguage) # test getOption and correct default language
def run(self, argv: List[str]) -> None: """This is the main entry point of the backend application.""" defaultConfigPath = os.path.join( self.appInfo.path, SituationBoard.DEFAULT_CONFIG_FILENAME) defaultConfigPath = os.getenv("SB_CONFIG", defaultConfigPath) defaultDatabasePath = os.path.join( self.appInfo.path, SituationBoard.DEFAULT_DATABASE_FILENAME) defaultDatabasePath = os.getenv("SB_DATABASE", defaultDatabasePath) parser = argparse.ArgumentParser( description=f"{self.appInfo.name} v{self.appInfo.version}", add_help=False) igroup = parser.add_argument_group("Important Commands and Parameters") mmutex = igroup.add_mutually_exclusive_group() mmutex.add_argument("-s", "--server", help="start backend server (default)", default=True, action='store_true') mmutex.add_argument("-i", "--import", help="import data from CSV", default=None, dest='importFile') mmutex.add_argument("-e", "--export", help="export data to CSV", default=None, dest='exportFile') mmutex.add_argument("-n", "--version", help="show version number and exit", default=False, action='store_true') mmutex.add_argument("-h", "--help", help="show this help message and exit", action='help') ogroup = parser.add_argument_group("Other Parameters and Options") ogroup.add_argument("-c", "--config", help="alternate path to config file", default=defaultConfigPath, dest='configPath') ogroup.add_argument("-d", "--database", help="alternate path to database file", default=defaultDatabasePath, dest='databasePath') ogroup.add_argument("-r", "--reset", help="reset database before import", default=False, action='store_true') ogroup.add_argument("-v", "--verbose", help="force debug output", default=False, action='store_true') # args = parser.parse_args(argv) args = parser.parse_args() # Check command line parameters if (args.reset is True) and (args.importFile is None): parser.error("reset is only allowed for the import command") sys.exit(1) # Show version number and exit (if requested) if args.version: print(f"{self.appInfo.name} {self.appInfo.version}") sys.exit(0) # Print application header if args.importFile is not None: self.print("Starting import from CSV...") elif args.exportFile is not None: self.print("Starting export to CSV...") else: self.clrPrint( f"Starting {self.appInfo.name} backend v{self.appInfo.version} (PID {self.appInfo.pid})" ) # Load configuration and database settings = Settings(args.configPath, self.appInfo.path, args.verbose) database = Database(args.databasePath, args.reset) self.lateInit(settings) # Handle CSV import/export (if required) if args.importFile is not None: csvImporter = CSVImporter(database) result = csvImporter.importEvents(args.importFile) sys.exit(result) elif args.exportFile is not None: csvExporter = CSVExporter(database) result = csvExporter.exportEvents(args.exportFile) sys.exit(result) # Start SituationBoard backend service backendService = SituationBoardBackend(self.appInfo, settings, database) backendService.run()
class Test_ActionSendMessagePowerAlarm: EVENT = "EVENT" EVENT_DETAILS = "E_DETAILS" LOCATION = "LOCATION" LOCATION_DETAILS = "L_DETAILS" COMMENT = "COMMENT" RAW_CONTENT = "RAW_CONTENT" LOCATION_LATITUDE = 13.02 LOCATION_LONGITUDE = 21.10 SETTING_KEY = "KEY" SETTING_VALUE = "VALUE" def setup_class(self) -> None: #pylint: disable=W0201 appInfo = AppInfo() settingsFilenameOrig = os.path.join( appInfo.path, "misc/setup/situationboard_default.conf") settingsFilename = os.path.join(appInfo.path, ".temp/situationboard.conf") shutil.copy(settingsFilenameOrig, settingsFilename) self.settings = Settings(settingsFilename, appInfo.path) section = ActionSendMessagePowerAlarm.PLUGIN_TYPE + Plugin.NAME_SEPARATOR + "send_poweralarm" self.settings.setString(section, "api_key", "NO_API_KEY") self.settings.setString(section, "api_group_nodetails", "NODETAILS") self.settings.setString(section, "api_group_reduced", "REDUCED") self.settings.setString(section, "api_group_full", "FULL") self.settings.setString(section, "api_group_tablet", "TABLET") self.settings.setString(section, "api_group_binary", "BINARY") self.settings.setString(section, "api_group_admin", "ADMIN") self.settings.setBoolean(section, "send_invalid", True) self.settings.setBoolean(section, "admin_send_setting", True) self.settings.setBoolean(section, "admin_send_unhandled", True) self.settings.setBoolean(section, "admin_send_invalid", False) self.settings.setString(section, "alarm_message", "TEST_ALARM") self.action = ActionSendMessagePowerAlarm("", self.settings, test=True) def test_send_alarm_event_valid(self) -> None: alarmEvent = self.__createAlarmEvent(flags=AlarmEvent.FLAGS_VALID) msg = self.action.sendAlarmEvent( alarmEvent, ActionSendMessagePowerAlarm.API_GROUP_NODETAILS) assert (not msg.isEmpty()) self.__checkMetadata(msg, location=False) self.__notContainsInfo(msg, Test_ActionSendMessagePowerAlarm.EVENT) self.__notContainsInfo(msg, Test_ActionSendMessagePowerAlarm.LOCATION) self.__notContainsInfo(msg, Test_ActionSendMessagePowerAlarm.EVENT_DETAILS) self.__notContainsInfo( msg, Test_ActionSendMessagePowerAlarm.LOCATION_DETAILS) self.__notContainsInfo(msg, Test_ActionSendMessagePowerAlarm.RAW_CONTENT) msg = self.action.sendAlarmEvent( alarmEvent, ActionSendMessagePowerAlarm.API_GROUP_REDUCED) assert (not msg.isEmpty()) self.__checkMetadata(msg, location=False) self.__containsInfo(msg, Test_ActionSendMessagePowerAlarm.EVENT) self.__containsInfo(msg, Test_ActionSendMessagePowerAlarm.LOCATION) self.__containsInfo(msg, Test_ActionSendMessagePowerAlarm.EVENT_DETAILS) self.__notContainsInfo( msg, Test_ActionSendMessagePowerAlarm.LOCATION_DETAILS) self.__notContainsInfo(msg, Test_ActionSendMessagePowerAlarm.RAW_CONTENT) msg = self.action.sendAlarmEvent( alarmEvent, ActionSendMessagePowerAlarm.API_GROUP_FULL) assert (not msg.isEmpty()) self.__checkMetadata(msg, location=True) self.__containsInfo(msg, Test_ActionSendMessagePowerAlarm.EVENT) self.__containsInfo(msg, Test_ActionSendMessagePowerAlarm.LOCATION) self.__containsInfo(msg, Test_ActionSendMessagePowerAlarm.EVENT_DETAILS) self.__containsInfo(msg, Test_ActionSendMessagePowerAlarm.LOCATION_DETAILS) self.__notContainsInfo(msg, Test_ActionSendMessagePowerAlarm.RAW_CONTENT) msg = self.action.sendAlarmEvent( alarmEvent, ActionSendMessagePowerAlarm.API_GROUP_TABLET) assert (not msg.isEmpty()) self.__checkMetadata(msg, location=True) self.__containsInfo(msg, Test_ActionSendMessagePowerAlarm.EVENT) self.__containsInfo(msg, Test_ActionSendMessagePowerAlarm.LOCATION) self.__containsInfo(msg, Test_ActionSendMessagePowerAlarm.EVENT_DETAILS) self.__containsInfo(msg, Test_ActionSendMessagePowerAlarm.LOCATION_DETAILS) self.__notContainsInfo(msg, Test_ActionSendMessagePowerAlarm.RAW_CONTENT) msg = self.action.sendAlarmEvent( alarmEvent, ActionSendMessagePowerAlarm.API_GROUP_BINARY) assert (msg.isEmpty()) msg = self.action.sendAlarmEvent( alarmEvent, ActionSendMessagePowerAlarm.API_GROUP_ADMIN) assert (msg.isEmpty()) def test_send_alarm_event_invalid(self) -> None: alarmEvent = self.__createAlarmEvent(flags=AlarmEvent.FLAGS_INVALID) msg = self.action.sendAlarmEvent( alarmEvent, ActionSendMessagePowerAlarm.API_GROUP_NODETAILS) assert (not msg.isEmpty()) self.__checkMetadata(msg, location=False) self.__notContainsInfo(msg, Test_ActionSendMessagePowerAlarm.EVENT) self.__notContainsInfo(msg, Test_ActionSendMessagePowerAlarm.LOCATION) self.__notContainsInfo(msg, Test_ActionSendMessagePowerAlarm.EVENT_DETAILS) self.__notContainsInfo( msg, Test_ActionSendMessagePowerAlarm.LOCATION_DETAILS) self.__notContainsInfo(msg, Test_ActionSendMessagePowerAlarm.RAW_CONTENT) msg = self.action.sendAlarmEvent( alarmEvent, ActionSendMessagePowerAlarm.API_GROUP_REDUCED) assert (not msg.isEmpty()) self.__checkMetadata(msg, location=False) self.__notContainsInfo(msg, Test_ActionSendMessagePowerAlarm.EVENT) self.__notContainsInfo(msg, Test_ActionSendMessagePowerAlarm.LOCATION) self.__notContainsInfo(msg, Test_ActionSendMessagePowerAlarm.EVENT_DETAILS) self.__notContainsInfo( msg, Test_ActionSendMessagePowerAlarm.LOCATION_DETAILS) self.__notContainsInfo(msg, Test_ActionSendMessagePowerAlarm.RAW_CONTENT) msg = self.action.sendAlarmEvent( alarmEvent, ActionSendMessagePowerAlarm.API_GROUP_FULL) assert (not msg.isEmpty()) self.__checkMetadata(msg, location=False) self.__notContainsInfo(msg, Test_ActionSendMessagePowerAlarm.EVENT) self.__notContainsInfo(msg, Test_ActionSendMessagePowerAlarm.LOCATION) self.__notContainsInfo(msg, Test_ActionSendMessagePowerAlarm.EVENT_DETAILS) self.__notContainsInfo( msg, Test_ActionSendMessagePowerAlarm.LOCATION_DETAILS) self.__containsInfo(msg, Test_ActionSendMessagePowerAlarm.RAW_CONTENT) msg = self.action.sendAlarmEvent( alarmEvent, ActionSendMessagePowerAlarm.API_GROUP_TABLET) assert (not msg.isEmpty()) self.__checkMetadata(msg, location=False) self.__notContainsInfo(msg, Test_ActionSendMessagePowerAlarm.EVENT) self.__notContainsInfo(msg, Test_ActionSendMessagePowerAlarm.LOCATION) self.__notContainsInfo(msg, Test_ActionSendMessagePowerAlarm.EVENT_DETAILS) self.__notContainsInfo( msg, Test_ActionSendMessagePowerAlarm.LOCATION_DETAILS) self.__containsInfo(msg, Test_ActionSendMessagePowerAlarm.RAW_CONTENT) msg = self.action.sendAlarmEvent( alarmEvent, ActionSendMessagePowerAlarm.API_GROUP_BINARY) assert (msg.isEmpty()) msg = self.action.sendAlarmEvent( alarmEvent, ActionSendMessagePowerAlarm.API_GROUP_ADMIN) assert (msg.isEmpty()) def test_send_alarm_event_binary(self) -> None: alarmEvent = self.__createAlarmEvent(flags=AlarmEvent.FLAGS_BINARY) msg = self.action.sendAlarmEvent( alarmEvent, ActionSendMessagePowerAlarm.API_GROUP_NODETAILS) assert (msg.isEmpty()) msg = self.action.sendAlarmEvent( alarmEvent, ActionSendMessagePowerAlarm.API_GROUP_REDUCED) assert (msg.isEmpty()) msg = self.action.sendAlarmEvent( alarmEvent, ActionSendMessagePowerAlarm.API_GROUP_FULL) assert (msg.isEmpty()) msg = self.action.sendAlarmEvent( alarmEvent, ActionSendMessagePowerAlarm.API_GROUP_TABLET) assert (msg.isEmpty()) msg = self.action.sendAlarmEvent( alarmEvent, ActionSendMessagePowerAlarm.API_GROUP_BINARY) assert (not msg.isEmpty()) msg = self.action.sendAlarmEvent( alarmEvent, ActionSendMessagePowerAlarm.API_GROUP_ADMIN) assert (msg.isEmpty()) def test_send_setting_event_valid(self) -> None: settingEvent = self.__createSettingEvent( flags=SettingEvent.FLAGS_VALID) msg = self.action.sendSettingEvent( settingEvent, ActionSendMessagePowerAlarm.API_GROUP_NODETAILS) assert (msg.isEmpty()) msg = self.action.sendSettingEvent( settingEvent, ActionSendMessagePowerAlarm.API_GROUP_REDUCED) assert (msg.isEmpty()) msg = self.action.sendSettingEvent( settingEvent, ActionSendMessagePowerAlarm.API_GROUP_FULL) assert (msg.isEmpty()) msg = self.action.sendSettingEvent( settingEvent, ActionSendMessagePowerAlarm.API_GROUP_TABLET) assert (msg.isEmpty()) msg = self.action.sendSettingEvent( settingEvent, ActionSendMessagePowerAlarm.API_GROUP_BINARY) assert (msg.isEmpty()) msg = self.action.sendSettingEvent( settingEvent, ActionSendMessagePowerAlarm.API_GROUP_ADMIN) assert (not msg.isEmpty()) def test_send_setting_event_invalid(self) -> None: settingEvent = self.__createSettingEvent( flags=SettingEvent.FLAGS_INVALID) msg = self.action.sendSettingEvent( settingEvent, ActionSendMessagePowerAlarm.API_GROUP_NODETAILS) assert (msg.isEmpty()) msg = self.action.sendSettingEvent( settingEvent, ActionSendMessagePowerAlarm.API_GROUP_REDUCED) assert (msg.isEmpty()) msg = self.action.sendSettingEvent( settingEvent, ActionSendMessagePowerAlarm.API_GROUP_FULL) assert (msg.isEmpty()) msg = self.action.sendSettingEvent( settingEvent, ActionSendMessagePowerAlarm.API_GROUP_TABLET) assert (msg.isEmpty()) msg = self.action.sendSettingEvent( settingEvent, ActionSendMessagePowerAlarm.API_GROUP_BINARY) assert (msg.isEmpty()) msg = self.action.sendSettingEvent( settingEvent, ActionSendMessagePowerAlarm.API_GROUP_ADMIN) assert (not msg.isEmpty()) def test_send_unhandled_event_ignored_sender(self) -> None: unhandledEvent = UnhandledEvent( cause=UnhandledEvent.CAUSE_IGNORED_SENDER) msg = self.action.sendUnhandledEvent( unhandledEvent, ActionSendMessagePowerAlarm.API_GROUP_NODETAILS) assert (msg.isEmpty()) msg = self.action.sendUnhandledEvent( unhandledEvent, ActionSendMessagePowerAlarm.API_GROUP_REDUCED) assert (msg.isEmpty()) msg = self.action.sendUnhandledEvent( unhandledEvent, ActionSendMessagePowerAlarm.API_GROUP_FULL) assert (msg.isEmpty()) msg = self.action.sendUnhandledEvent( unhandledEvent, ActionSendMessagePowerAlarm.API_GROUP_TABLET) assert (msg.isEmpty()) msg = self.action.sendUnhandledEvent( unhandledEvent, ActionSendMessagePowerAlarm.API_GROUP_BINARY) assert (msg.isEmpty()) msg = self.action.sendUnhandledEvent( unhandledEvent, ActionSendMessagePowerAlarm.API_GROUP_ADMIN) assert (not msg.isEmpty()) def test_send_unhandled_event_unparsable_message(self) -> None: unhandledEvent = UnhandledEvent( cause=UnhandledEvent.CAUSE_UNPARSABLE_MESSAGE) msg = self.action.sendUnhandledEvent( unhandledEvent, ActionSendMessagePowerAlarm.API_GROUP_NODETAILS) assert (msg.isEmpty()) msg = self.action.sendUnhandledEvent( unhandledEvent, ActionSendMessagePowerAlarm.API_GROUP_REDUCED) assert (msg.isEmpty()) msg = self.action.sendUnhandledEvent( unhandledEvent, ActionSendMessagePowerAlarm.API_GROUP_FULL) assert (msg.isEmpty()) msg = self.action.sendUnhandledEvent( unhandledEvent, ActionSendMessagePowerAlarm.API_GROUP_TABLET) assert (msg.isEmpty()) msg = self.action.sendUnhandledEvent( unhandledEvent, ActionSendMessagePowerAlarm.API_GROUP_BINARY) assert (msg.isEmpty()) msg = self.action.sendUnhandledEvent( unhandledEvent, ActionSendMessagePowerAlarm.API_GROUP_ADMIN) assert (not msg.isEmpty()) def __createSettingEvent(self, flags: str) -> SettingEvent: settingEvent = SettingEvent() settingEvent.key = Test_ActionSendMessagePowerAlarm.SETTING_KEY settingEvent.value = Test_ActionSendMessagePowerAlarm.SETTING_VALUE settingEvent.flags = flags return settingEvent def __createAlarmEvent(self, flags: str) -> AlarmEvent: alarmEvent = AlarmEvent() alarmEvent.event = Test_ActionSendMessagePowerAlarm.EVENT alarmEvent.eventDetails = Test_ActionSendMessagePowerAlarm.EVENT_DETAILS alarmEvent.location = Test_ActionSendMessagePowerAlarm.LOCATION alarmEvent.locationDetails = Test_ActionSendMessagePowerAlarm.LOCATION_DETAILS alarmEvent.comment = Test_ActionSendMessagePowerAlarm.COMMENT alarmEvent.raw = Test_ActionSendMessagePowerAlarm.RAW_CONTENT alarmEvent.locationLatitude = Test_ActionSendMessagePowerAlarm.LOCATION_LATITUDE alarmEvent.locationLongitude = Test_ActionSendMessagePowerAlarm.LOCATION_LONGITUDE alarmEvent.flags = flags return alarmEvent def __checkMetadata(self, message: _PowerAlarmMessage, location: bool = False) -> None: if location: assert (message.hasLocation()) else: assert (not message.hasLocation()) def __containsInfo(self, message: _PowerAlarmMessage, info: str) -> None: assert ((info in message.text) or (info in message.details)) def __notContainsInfo(self, message: _PowerAlarmMessage, info: str) -> None: assert ((not info in message.text) and (not info in message.details))
def get_settings(): appInfo = AppInfo() settingsFilenameOrig = os.path.join(appInfo.path, "misc/setup/situationboard_default.conf") settingsFilename = os.path.join(appInfo.path, ".temp/situationboard.conf") shutil.copy(settingsFilenameOrig, settingsFilename) return Settings(settingsFilename, appInfo.path)