Example #1
0
    def test_get_costs_without_empty_and_full_hours(self):
        current_cost_service_without_discount_hours = CurrentCostDatabaseReader(
            self.pool)
        yield from self.message_handler.save({
            'date':
            datetime(2015, 5, 28, 12, 0, 0),
            'watt':
            1000,
            'minutes':
            60,
            'nb_data':
            120,
            'temperature':
            20.2
        })
        yield from self.message_handler.save({
            'date':
            datetime(2015, 5, 28, 7, 0, 0),
            'watt':
            1000,
            'minutes':
            60,
            'nb_data':
            120,
            'temperature':
            20.2
        })

        data = yield from current_cost_service_without_discount_hours.get_costs(
            since=datetime(2015, 5, 28, tzinfo=get_localzone()))

        self.assertEqual(1, len(data))
        self.assertEqual((datetime(2015, 5, 28), (Decimal(2.0), Decimal(0.0))),
                         data[0])
    def test_get_costs_without_empty_and_full_hours(self):
        current_cost_service_without_discount_hours = CurrentCostDatabaseReader(self.pool)
        yield from self.message_handler.save({'date': datetime(2015, 5, 28, 12, 0, 0), 'watt': 1000, 'minutes': 60, 'nb_data': 120, 'temperature': 20.2})
        yield from self.message_handler.save({'date': datetime(2015, 5, 28, 7, 0, 0), 'watt': 1000, 'minutes': 60, 'nb_data': 120, 'temperature': 20.2})

        data = yield from current_cost_service_without_discount_hours.get_costs(since=datetime(2015, 5, 28, tzinfo=get_localzone()))

        self.assertEqual(1, len(data))
        self.assertEqual((datetime(2015, 5, 28), (Decimal(2.0), Decimal(0.0))), data[0])
Example #3
0
    def setUp(self):
        self.pool = yield from aiomysql.create_pool(host='127.0.0.1',
                                                    port=3306,
                                                    user='******',
                                                    password='******',
                                                    db='test',
                                                    loop=self.loop)

        self.message_handler = MysqlCurrentCostMessageHandler(self.pool)
        self.current_cost_service = CurrentCostDatabaseReader(
            self.pool, time(8, 0), time(22, 0))
        current_cost_mysql_service.now = lambda: datetime(
            2015, 6, 1, 12, 0, 0, tzinfo=get_localzone())
        with (yield from self.pool) as conn:
            cur = yield from conn.cursor()
            yield from cur.execute("truncate current_cost")
    def setUp(self):
        self.pool = yield from aiomysql.create_pool(host='127.0.0.1', port=3306,
                                                    user='******', password='******', db='test',
                                                    loop=self.loop)

        self.message_handler = MysqlCurrentCostMessageHandler(self.pool)
        self.current_cost_service = CurrentCostDatabaseReader(self.pool, time(8, 0), time(22, 0))
        current_cost_mysql_service.now = lambda: datetime(2015, 6, 1, 12, 0, 0, tzinfo=get_localzone())
        with (yield from self.pool) as conn:
            cur = yield from conn.cursor()
            yield from cur.execute("truncate current_cost")
class GetCurrentCostData(TestCase):
    @asyncio.coroutine
    def setUp(self):
        self.pool = yield from aiomysql.create_pool(host='127.0.0.1', port=3306,
                                                    user='******', password='******', db='test',
                                                    loop=self.loop)

        self.message_handler = MysqlCurrentCostMessageHandler(self.pool)
        self.current_cost_service = CurrentCostDatabaseReader(self.pool, time(8, 0), time(22, 0))
        current_cost_mysql_service.now = lambda: datetime(2015, 6, 1, 12, 0, 0, tzinfo=get_localzone())
        with (yield from self.pool) as conn:
            cur = yield from conn.cursor()
            yield from cur.execute("truncate current_cost")

    @asyncio.coroutine
    def tearDown(self):
        self.pool.close()
        yield from self.pool.wait_closed()

    @asyncio.coroutine
    def test_get_history_three_days(self):
        yield from self.message_handler.save({'date': datetime(2015, 5, 28, 12, 0, 0), 'watt': 1000, 'minutes': 60, 'nb_data': 120, 'temperature': 20.2})
        yield from self.message_handler.save({'date': datetime(2015, 5, 29, 10, 10, 0), 'watt': 1000, 'minutes': 120, 'nb_data': 120, 'temperature': 20.2})
        yield from self.message_handler.save({'date': datetime(2015, 5, 29, 12, 10, 0), 'watt': 1000, 'minutes': 60, 'nb_data': 120, 'temperature': 20.2})
        yield from self.message_handler.save({'date': datetime(2015, 5, 30, 12, 20, 0), 'watt': 1000, 'minutes': 180, 'nb_data': 120, 'temperature': 20.2})

        data = yield from self.current_cost_service.get_history()

        self.assertEqual(3, len(data))
        self.assertEqual((datetime(2015, 5, 28, 0, 0), Decimal(1)), data[0])
        self.assertEqual((datetime(2015, 5, 29, 0, 0), Decimal(3)), data[1])
        self.assertEqual((datetime(2015, 5, 30, 0, 0), Decimal(3)), data[2])

    @asyncio.coroutine
    def test_get_costs_since_and_only_empty_hours(self):
        yield from self.message_handler.save({'date': datetime(2015, 5, 28, 12, 0, 0), 'watt': 1000, 'minutes': 60, 'nb_data': 120, 'temperature': 20.2})
        yield from self.message_handler.save({'date': datetime(2015, 5, 30, 7, 0, 0), 'watt': 1000, 'minutes': 60, 'nb_data': 120, 'temperature': 20.2})

        data = yield from self.current_cost_service.get_costs(since=datetime(2015, 5, 30, tzinfo=get_localzone()))

        self.assertTupleEqual((datetime(2015, 5, 30), (Decimal(0.0), Decimal(1.0))), data[0])

    @asyncio.coroutine
    def test_get_costs_without_empty_and_full_hours(self):
        current_cost_service_without_discount_hours = CurrentCostDatabaseReader(self.pool)
        yield from self.message_handler.save({'date': datetime(2015, 5, 28, 12, 0, 0), 'watt': 1000, 'minutes': 60, 'nb_data': 120, 'temperature': 20.2})
        yield from self.message_handler.save({'date': datetime(2015, 5, 28, 7, 0, 0), 'watt': 1000, 'minutes': 60, 'nb_data': 120, 'temperature': 20.2})

        data = yield from current_cost_service_without_discount_hours.get_costs(since=datetime(2015, 5, 28, tzinfo=get_localzone()))

        self.assertEqual(1, len(data))
        self.assertEqual((datetime(2015, 5, 28), (Decimal(2.0), Decimal(0.0))), data[0])

    @asyncio.coroutine
    def test_get_costs_full_and_empty_hours(self):
        yield from self.message_handler.save({'date': datetime(2015, 5, 28, 12, 0, 0), 'watt': 1000, 'minutes': 60, 'nb_data': 120, 'temperature': 20.2})
        yield from self.message_handler.save({'date': datetime(2015, 5, 28, 7, 0, 0), 'watt': 1000, 'minutes': 60, 'nb_data': 120, 'temperature': 20.2})
        yield from self.message_handler.save({'date': datetime(2015, 5, 28, 23, 0, 0), 'watt': 1000, 'minutes': 60, 'nb_data': 120, 'temperature': 20.2})

        data = yield from self.current_cost_service.get_costs(since=datetime(2015, 5, 28, 0, 0, tzinfo=get_localzone()))

        self.assertEqual(1, len(data))
        self.assertEqual((datetime(2015, 5, 28), (Decimal(1.0), Decimal(2.0))), data[0])

    @asyncio.coroutine
    def test_get_costs_since_16_days_is_grouped_by_week(self):
        current_cost_mysql_service.now = lambda: datetime(2015, 6, 17, 12, 0, 0)
        for i in range(1, 17):
            yield from self.message_handler.save({'date': datetime(2015, 6, i, 12, 0, 0), 'watt': 1000, 'minutes': 60, 'nb_data': 120, 'temperature': 20.2})

        data = yield from self.current_cost_service.get_costs(since=datetime(2015, 6, 1, 0, 0))

        self.assertEqual(3, len(data))
        self.assertEqual((datetime(2015, 6, 1), (Decimal(6.0), Decimal(0.0))), data[0])
        self.assertEqual((datetime(2015, 6, 7), (Decimal(7.0), Decimal(0.0))), data[1])
        self.assertEqual((datetime(2015, 6, 14), (Decimal(3.0), Decimal(0.0))), data[2])

    @asyncio.coroutine
    def test_get_costs_since_11_weeks_is_grouped_by_month(self):
        current_cost_mysql_service.now = lambda: datetime(2015, 8, 17, 12, 0, 0)
        for i in range(0, 65):
            yield from self.message_handler.save({'date': datetime(2015, 6, 1, 12, 0, 0) + timedelta(days=i), 'watt': 1000, 'minutes': 60, 'nb_data': 120, 'temperature': 20.2})

        data = yield from self.current_cost_service.get_costs(since=datetime(2015, 6, 1, 0, 0))

        self.assertEqual(3, len(data))
        self.assertEqual((datetime(2015, 6, 1), (Decimal(30.0), Decimal(0.0))), data[0])
        self.assertEqual((datetime(2015, 7, 1), (Decimal(31.0), Decimal(0.0))), data[1])
        self.assertEqual((datetime(2015, 8, 1), (Decimal(4.0), Decimal(0.0))), data[2])

    @asyncio.coroutine
    def test_get_costs_since_period__do_not_gather_months_from_different_years(self):
        current_cost_mysql_service.now = lambda: datetime(2015, 8, 17, 12, 0, 0)
        for i in range(0, 427):
            yield from self.message_handler.save({'date': datetime(2014, 7, 1, 12, 0, 0) + timedelta(days=i), 'watt': 1000, 'minutes': 60, 'nb_data': 120, 'temperature': 20.2})

        data = yield from self.current_cost_service.get_costs(since=datetime(2014, 7, 1, 0, 0))

        self.assertEqual(14, len(data))
        self.assertEqual((datetime(2014, 7, 1), (Decimal(31.0), Decimal(0.0))), data[0])
        self.assertEqual((datetime(2014, 8, 1), (Decimal(31.0), Decimal(0.0))), data[1])
        self.assertEqual((datetime(2015, 7, 1), (Decimal(31.0), Decimal(0.0))), data[12])
        self.assertEqual((datetime(2015, 8, 1), (Decimal(31.0), Decimal(0.0))), data[13])
Example #6
0
class GetCurrentCostData(TestCase):
    @asyncio.coroutine
    def setUp(self):
        self.pool = yield from aiomysql.create_pool(host='127.0.0.1',
                                                    port=3306,
                                                    user='******',
                                                    password='******',
                                                    db='test',
                                                    loop=self.loop)

        self.message_handler = MysqlCurrentCostMessageHandler(self.pool)
        self.current_cost_service = CurrentCostDatabaseReader(
            self.pool, time(8, 0), time(22, 0))
        current_cost_mysql_service.now = lambda: datetime(
            2015, 6, 1, 12, 0, 0, tzinfo=get_localzone())
        with (yield from self.pool) as conn:
            cur = yield from conn.cursor()
            yield from cur.execute("truncate current_cost")

    @asyncio.coroutine
    def tearDown(self):
        self.pool.close()
        yield from self.pool.wait_closed()

    @asyncio.coroutine
    def test_get_history_three_days(self):
        yield from self.message_handler.save({
            'date':
            datetime(2015, 5, 28, 12, 0, 0),
            'watt':
            1000,
            'minutes':
            60,
            'nb_data':
            120,
            'temperature':
            20.2
        })
        yield from self.message_handler.save({
            'date':
            datetime(2015, 5, 29, 10, 10, 0),
            'watt':
            1000,
            'minutes':
            120,
            'nb_data':
            120,
            'temperature':
            20.2
        })
        yield from self.message_handler.save({
            'date':
            datetime(2015, 5, 29, 12, 10, 0),
            'watt':
            1000,
            'minutes':
            60,
            'nb_data':
            120,
            'temperature':
            20.2
        })
        yield from self.message_handler.save({
            'date':
            datetime(2015, 5, 30, 12, 20, 0),
            'watt':
            1000,
            'minutes':
            180,
            'nb_data':
            120,
            'temperature':
            20.2
        })

        data = yield from self.current_cost_service.get_history()

        self.assertEqual(3, len(data))
        self.assertEqual((datetime(2015, 5, 28, 0, 0), Decimal(1)), data[0])
        self.assertEqual((datetime(2015, 5, 29, 0, 0), Decimal(3)), data[1])
        self.assertEqual((datetime(2015, 5, 30, 0, 0), Decimal(3)), data[2])

    @asyncio.coroutine
    def test_get_costs_since_and_only_empty_hours(self):
        yield from self.message_handler.save({
            'date':
            datetime(2015, 5, 28, 12, 0, 0),
            'watt':
            1000,
            'minutes':
            60,
            'nb_data':
            120,
            'temperature':
            20.2
        })
        yield from self.message_handler.save({
            'date':
            datetime(2015, 5, 30, 7, 0, 0),
            'watt':
            1000,
            'minutes':
            60,
            'nb_data':
            120,
            'temperature':
            20.2
        })

        data = yield from self.current_cost_service.get_costs(
            since=datetime(2015, 5, 30, tzinfo=get_localzone()))

        self.assertTupleEqual(
            (datetime(2015, 5, 30), (Decimal(0.0), Decimal(1.0))), data[0])

    @asyncio.coroutine
    def test_get_costs_without_empty_and_full_hours(self):
        current_cost_service_without_discount_hours = CurrentCostDatabaseReader(
            self.pool)
        yield from self.message_handler.save({
            'date':
            datetime(2015, 5, 28, 12, 0, 0),
            'watt':
            1000,
            'minutes':
            60,
            'nb_data':
            120,
            'temperature':
            20.2
        })
        yield from self.message_handler.save({
            'date':
            datetime(2015, 5, 28, 7, 0, 0),
            'watt':
            1000,
            'minutes':
            60,
            'nb_data':
            120,
            'temperature':
            20.2
        })

        data = yield from current_cost_service_without_discount_hours.get_costs(
            since=datetime(2015, 5, 28, tzinfo=get_localzone()))

        self.assertEqual(1, len(data))
        self.assertEqual((datetime(2015, 5, 28), (Decimal(2.0), Decimal(0.0))),
                         data[0])

    @asyncio.coroutine
    def test_get_costs_full_and_empty_hours(self):
        yield from self.message_handler.save({
            'date':
            datetime(2015, 5, 28, 12, 0, 0),
            'watt':
            1000,
            'minutes':
            60,
            'nb_data':
            120,
            'temperature':
            20.2
        })
        yield from self.message_handler.save({
            'date':
            datetime(2015, 5, 28, 7, 0, 0),
            'watt':
            1000,
            'minutes':
            60,
            'nb_data':
            120,
            'temperature':
            20.2
        })
        yield from self.message_handler.save({
            'date':
            datetime(2015, 5, 28, 23, 0, 0),
            'watt':
            1000,
            'minutes':
            60,
            'nb_data':
            120,
            'temperature':
            20.2
        })

        data = yield from self.current_cost_service.get_costs(
            since=datetime(2015, 5, 28, 0, 0, tzinfo=get_localzone()))

        self.assertEqual(1, len(data))
        self.assertEqual((datetime(2015, 5, 28), (Decimal(1.0), Decimal(2.0))),
                         data[0])

    @asyncio.coroutine
    def test_get_costs_since_16_days_is_grouped_by_week(self):
        current_cost_mysql_service.now = lambda: datetime(
            2015, 6, 17, 12, 0, 0)
        for i in range(1, 17):
            yield from self.message_handler.save({
                'date':
                datetime(2015, 6, i, 12, 0, 0),
                'watt':
                1000,
                'minutes':
                60,
                'nb_data':
                120,
                'temperature':
                20.2
            })

        data = yield from self.current_cost_service.get_costs(
            since=datetime(2015, 6, 1, 0, 0))

        self.assertEqual(3, len(data))
        self.assertEqual((datetime(2015, 6, 1), (Decimal(6.0), Decimal(0.0))),
                         data[0])
        self.assertEqual((datetime(2015, 6, 7), (Decimal(7.0), Decimal(0.0))),
                         data[1])
        self.assertEqual((datetime(2015, 6, 14), (Decimal(3.0), Decimal(0.0))),
                         data[2])

    @asyncio.coroutine
    def test_get_costs_since_11_weeks_is_grouped_by_month(self):
        current_cost_mysql_service.now = lambda: datetime(
            2015, 8, 17, 12, 0, 0)
        for i in range(0, 65):
            yield from self.message_handler.save({
                'date':
                datetime(2015, 6, 1, 12, 0, 0) + timedelta(days=i),
                'watt':
                1000,
                'minutes':
                60,
                'nb_data':
                120,
                'temperature':
                20.2
            })

        data = yield from self.current_cost_service.get_costs(
            since=datetime(2015, 6, 1, 0, 0))

        self.assertEqual(3, len(data))
        self.assertEqual((datetime(2015, 6, 1), (Decimal(30.0), Decimal(0.0))),
                         data[0])
        self.assertEqual((datetime(2015, 7, 1), (Decimal(31.0), Decimal(0.0))),
                         data[1])
        self.assertEqual((datetime(2015, 8, 1), (Decimal(4.0), Decimal(0.0))),
                         data[2])

    @asyncio.coroutine
    def test_get_costs_since_period__do_not_gather_months_from_different_years(
            self):
        current_cost_mysql_service.now = lambda: datetime(
            2015, 8, 17, 12, 0, 0)
        for i in range(0, 427):
            yield from self.message_handler.save({
                'date':
                datetime(2014, 7, 1, 12, 0, 0) + timedelta(days=i),
                'watt':
                1000,
                'minutes':
                60,
                'nb_data':
                120,
                'temperature':
                20.2
            })

        data = yield from self.current_cost_service.get_costs(
            since=datetime(2014, 7, 1, 0, 0))

        self.assertEqual(14, len(data))
        self.assertEqual((datetime(2014, 7, 1), (Decimal(31.0), Decimal(0.0))),
                         data[0])
        self.assertEqual((datetime(2014, 8, 1), (Decimal(31.0), Decimal(0.0))),
                         data[1])
        self.assertEqual((datetime(2015, 7, 1), (Decimal(31.0), Decimal(0.0))),
                         data[12])
        self.assertEqual((datetime(2015, 8, 1), (Decimal(31.0), Decimal(0.0))),
                         data[13])