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])
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])
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])