コード例 #1
0
class LogicGetTest(unittest.TestCase):
    def setUp(self):
        self.since = Mock()
        self.until = Mock()
        state_mock = Mock()
        state_mock.get_electric_meters.return_value = {}
        self.db_mock = Mock()
        self.plugin_loader_mock = Mock()
        data_per_hour = 3600
        self.logic = Logic(state_mock, self.db_mock, self.plugin_loader_mock,
                           data_per_hour)

        self.meter_id = 10
        self.meter = Mock()
        self.meter_dict = {
            'name': 'Name',
            'type': 'TEST_PLUGIN',
            'custom': {
                'key1': 'val1',
                'key2': 100
            }
        }

        state_mock.get_electric_meters.return_value = {
            self.meter_id: self.meter
        }
        state_mock.get_electric_meters_dict.return_value = {
            self.meter_id: self.meter_dict
        }

    def test_get_electric_meters_dict(self):
        # Setup
        test_meter1 = MagicMock()
        test_meter2 = MagicMock()
        self.logic.state.get_electric_meters_dict.return_value = {
            10: test_meter1,
            11: test_meter2
        }

        # Test
        meters = self.logic.get_electric_meters_dict()

        # Assertion
        self.assertIn((10, test_meter1), meters)
        self.assertIn((11, test_meter2), meters)

    def test_get_raw(self):
        self.db_mock.get_raw.return_value = {
            10: [
                {
                    'value': 1,
                    'timestamp': datetime(2020, 10, 30, 12, 00)
                },
                {
                    'value': 1,
                    'timestamp': datetime(2020, 10, 30, 12, 15)
                },
                {
                    'value': 1,
                    'timestamp': datetime(2020, 10, 30, 12, 30)
                },
                {
                    'value': 1,
                    'timestamp': datetime(2020, 10, 30, 12, 45)
                },
                {
                    'value': 2,
                    'timestamp': datetime(2020, 10, 30, 13, 00)
                },
                {
                    'value': 2,
                    'timestamp': datetime(2020, 10, 30, 13, 15)
                },
                {
                    'value': 2,
                    'timestamp': datetime(2020, 10, 30, 13, 30)
                },
                {
                    'value': 2,
                    'timestamp': datetime(2020, 10, 30, 13, 45)
                },
            ]
        }

        # Test
        electric_meter_data = self.logic.get_raw(since=self.since,
                                                 until=self.until)[0]
        raw = electric_meter_data.data

        # Assertion
        self.db_mock.get_raw.assert_called_once_with(since=self.since,
                                                     until=self.until)
        self.assertEqual(self.meter_id, electric_meter_data.id)
        self.assertEqual(self.meter_dict, electric_meter_data.electric_meter)

        self.assertEqual(len(self.db_mock.get_raw()[self.meter_id]), len(raw))
        for idx, data_point in enumerate(raw):
            self.assertEqual(
                self.db_mock.get_raw()[self.meter_id][idx]['value'],
                data_point['value'])
            self.assertEqual(
                self.db_mock.get_raw()[
                    self.meter_id][idx]['timestamp'].replace(microsecond=0),
                data_point['timestamp'].replace(microsecond=0))

    def test_get_day(self):
        self.db_mock.get_day.return_value = {
            10: [{
                'value': hour * 10,
                'timestamp': datetime(2020, 10, hour // 24 + 1, hour % 24, 00)
            } for hour in range(48)]
        }

        # Test
        electric_meter_data = self.logic.get_day(since=self.since,
                                                 until=self.until)[0]
        day = electric_meter_data.data

        # Assertion
        self.db_mock.get_day.assert_called_once_with(since=self.since,
                                                     until=self.until)
        self.assertEqual(self.meter_id, electric_meter_data.id)
        self.assertEqual(self.meter_dict, electric_meter_data.electric_meter)

        self.assertEqual(len(self.db_mock.get_day()[self.meter_id]), len(day))
        for idx, data_point in enumerate(day):
            self.assertEqual(
                self.db_mock.get_day()[self.meter_id][idx]['value'],
                data_point['value'])
            self.assertEqual(
                self.db_mock.get_day()[
                    self.meter_id][idx]['timestamp'].replace(microsecond=0),
                data_point['timestamp'].replace(microsecond=0))

    def test_get_month(self):
        self.db_mock.get_month.return_value = {
            10: [{
                'value':
                day * 10,
                'timestamp':
                datetime(2020, day // 30 + 3, day % 30 + 1, 00, 00)
            } for day in range(60)]
        }

        # Test
        electric_meter_data = self.logic.get_month(since=self.since,
                                                   until=self.until)[0]
        month = electric_meter_data.data

        # Assertion
        self.db_mock.get_month.assert_called_once_with(since=self.since,
                                                       until=self.until)
        self.assertEqual(self.meter_id, electric_meter_data.id)
        self.assertEqual(self.meter_dict, electric_meter_data.electric_meter)

        self.assertEqual(len(self.db_mock.get_month()[self.meter_id]),
                         len(month))
        for idx, data_point in enumerate(month):
            self.assertEqual(
                self.db_mock.get_month()[self.meter_id][idx]['value'],
                data_point['value'])
            self.assertEqual(
                self.db_mock.get_month()[
                    self.meter_id][idx]['timestamp'].replace(microsecond=0),
                data_point['timestamp'].replace(microsecond=0))

    def test_get_year(self):
        self.db_mock.get_year.return_value = {
            10: [{
                'value': month * 10,
                'timestamp': datetime(2020, month + 1, 1, 00, 00)
            } for month in range(12)]
        }

        # Test
        electric_meter_data = self.logic.get_year(since=self.since,
                                                  until=self.until)[0]
        year = electric_meter_data.data

        # Assertion
        self.db_mock.get_year.assert_called_once_with(since=self.since,
                                                      until=self.until)
        self.assertEqual(self.meter_id, electric_meter_data.id)
        self.assertEqual(self.meter_dict, electric_meter_data.electric_meter)

        self.assertEqual(len(self.db_mock.get_year()[self.meter_id]),
                         len(year))
        for idx, data_point in enumerate(year):
            self.assertEqual(
                self.db_mock.get_year()[self.meter_id][idx]['value'],
                data_point['value'])
            self.assertEqual(
                self.db_mock.get_year()[
                    self.meter_id][idx]['timestamp'].replace(microsecond=0),
                data_point['timestamp'].replace(microsecond=0))

    def test_get_years(self):
        self.db_mock.get_years.return_value = {
            10: [{
                'value': year * 10,
                'timestamp': datetime(year + 1, 1, 1, 00, 00)
            } for year in range(3)]
        }

        # Test
        electric_meter_data = self.logic.get_years(since=self.since,
                                                   until=self.until)[0]
        years = electric_meter_data.data

        # Assertion
        self.db_mock.get_years.assert_called_once_with(since=self.since,
                                                       until=self.until)
        self.assertEqual(self.meter_id, electric_meter_data.id)
        self.assertEqual(self.meter_dict, electric_meter_data.electric_meter)

        self.assertEqual(len(self.db_mock.get_years()[self.meter_id]),
                         len(years))
        for idx, data_point in enumerate(years):
            self.assertEqual(
                self.db_mock.get_years()[self.meter_id][idx]['value'],
                data_point['value'])
            self.assertEqual(
                self.db_mock.get_years()[self.meter_id][idx]['timestamp'],
                data_point['timestamp'])