def test_manage_host_events_with_wrong_row(self):
        """Manage Host Events With Wrong Row"""

        under_test = SpyQWidget()
        under_test.initialize()

        # Hint item in spy list widget, 0 item in host list widget
        self.assertEqual(1, under_test.spy_list_widget.count())
        self.assertEqual(0, under_test.host_list_widget.count())

        # Filling database
        host_test = Host()
        host_test.create(
            'spy1', {
                '_id': 'spy1',
                'ls_downtimed': False,
                'ls_acknowledged': False,
                'active_checks_enabled': True,
                'passive_checks_enabled': True,
                '_overall_state_id': 4,
                'ls_state': 'DOWN'
            }, 'hostname')
        data_manager.update_database('host', [host_test])

        # Spy this host
        under_test.spy_list_widget.add_spy_host(host_test.item_id)

        # Host have been added in list widget, 0 item in host list widget
        self.assertEqual(1, under_test.spy_list_widget.count())
        self.assertEqual(host_test.item_id,
                         under_test.spy_list_widget.item(0).host)
        self.assertEqual(0, under_test.host_list_widget.count())

        # Manage problems
        under_test.manage_host_events(-1)

        # Host list equal to 0 with row equal to -1
        self.assertEqual(0, under_test.host_list_widget.count())
    def test_manage_host_events_with_valid_rows(self):
        """Manage Host Events With Valid Rows"""

        under_test = SpyQWidget()
        under_test.initialize()

        # Filling "host" database
        host_test = Host()
        host_test.create(
            'spy1', {
                '_id': 'spy1',
                'ls_downtimed': False,
                'ls_acknowledged': False,
                'active_checks_enabled': True,
                'passive_checks_enabled': True,
                '_overall_state_id': 4,
                'ls_state': 'DOWN'
            }, 'hostname')
        data_manager.update_database('host', [host_test])

        # Spy this host and set current row
        under_test.spy_list_widget.add_spy_host(host_test.item_id)
        under_test.spy_list_widget.setCurrentRow(0)

        # "(new !)" is added to new spy host
        self.assertEqual(
            'Host Hostname, current state: DOWN (new !)',
            under_test.spy_list_widget.item(0).data(Qt.DisplayRole))

        # Manage problems with a valid row
        under_test.manage_host_events(under_test.spy_list_widget.currentRow())

        # Host list equal to 1, No services are attached to host
        self.assertEqual(1, under_test.host_list_widget.count())
        self.assertEqual(
            'Hostname is DOWN. No services.',
            under_test.host_list_widget.item(0).data(Qt.DisplayRole))
        # "(new !)" is removed
        self.assertEqual(
            'Host Hostname, current state: DOWN ',
            under_test.spy_list_widget.item(0).data(Qt.DisplayRole))

        # Fill "services" database attached to host
        service = Service()
        service.create(
            '_id1', {
                'host': 'spy1',
                'ls_state': 'CRITICAL',
                'ls_acknowledged': False,
                'ls_downtimed': False,
                'ls_output': 'Output of service 1',
                'ls_last_check': 1234567890,
                'passive_checks_enabled': True,
                'active_checks_enabled': False
            }, 'service_name')
        service_2 = Service()
        service_2.create(
            '_id2', {
                'host': 'spy1',
                'ls_state': 'OK',
                'ls_acknowledged': False,
                'ls_downtimed': False,
                'ls_output': 'Output of service 2',
                'ls_last_check': 1234567890,
                'passive_checks_enabled': True,
                'active_checks_enabled': False
            }, 'service2_name')
        data_manager.update_database('service', [service, service_2])

        # Manage problems again
        under_test.manage_host_events(under_test.spy_list_widget.currentRow())

        # Host list equal to 1, cause one service is CRITICAL
        self.assertEqual(1, under_test.host_list_widget.count())
        self.assertEqual(
            'Service Service_Name is CRITICAL',
            under_test.host_list_widget.item(0).data(Qt.DisplayRole))

        # If CRITICAL service is removed, text change
        data_manager.remove_item('service', '_id1')

        # Manage problems again
        under_test.manage_host_events(under_test.spy_list_widget.currentRow())

        # Host list equal to 1, cause one service is CRITICAL
        self.assertEqual(1, under_test.host_list_widget.count())
        self.assertEqual(
            'Hostname is DOWN. Services of host seems managed.',
            under_test.host_list_widget.item(0).data(Qt.DisplayRole))