def test_purge_expired_line_items_before_date(self): """Test to remove line items before a provided date.""" bill_table_name = AWS_CUR_TABLE_MAP["bill"] line_item_table_name = AWS_CUR_TABLE_MAP["line_item"] cost_entry_table_name = AWS_CUR_TABLE_MAP["cost_entry"] cleaner = AWSReportDBCleaner(self.schema) with schema_context(self.schema): # Verify that data is not cleared for a cutoff date < billing_period_start first_bill = self.accessor._get_db_obj_query( bill_table_name).first() cutoff_date = first_bill.billing_period_start earlier_cutoff = cutoff_date.replace( day=15) + relativedelta.relativedelta(months=-1) self.assertIsNotNone( self.accessor._get_db_obj_query(bill_table_name).first()) self.assertIsNotNone( self.accessor._get_db_obj_query(line_item_table_name).first()) self.assertIsNotNone( self.accessor._get_db_obj_query(cost_entry_table_name).first()) removed_data = cleaner.purge_expired_line_item(earlier_cutoff) self.assertEqual(len(removed_data), 0) with schema_context(self.schema): self.assertIsNotNone( self.accessor._get_db_obj_query(bill_table_name).first()) self.assertIsNotNone( self.accessor._get_db_obj_query(line_item_table_name).first()) self.assertIsNotNone( self.accessor._get_db_obj_query(cost_entry_table_name).first())
def test_purge_expired_line_items_on_date(self): """Test to remove line items on a provided date.""" bill_table_name = AWS_CUR_TABLE_MAP["bill"] line_item_table_name = AWS_CUR_TABLE_MAP["line_item"] cost_entry_table_name = AWS_CUR_TABLE_MAP["cost_entry"] cleaner = AWSReportDBCleaner(self.schema) with schema_context(self.schema): # Verify that data is cleared for a cutoff date == billing_period_start first_bill = self.accessor._get_db_obj_query( bill_table_name).order_by("-billing_period_start").first() cutoff_date = first_bill.billing_period_start expected_count = ( self.accessor._get_db_obj_query(bill_table_name).filter( billing_period_start__lte=cutoff_date).count()) self.assertIsNotNone( self.accessor._get_db_obj_query(bill_table_name).first()) self.assertIsNotNone( self.accessor._get_db_obj_query(line_item_table_name).first()) self.assertIsNotNone( self.accessor._get_db_obj_query(cost_entry_table_name).first()) removed_data = cleaner.purge_expired_line_item(cutoff_date) self.assertEqual(len(removed_data), expected_count) self.assertIn( first_bill.payer_account_id, [entry.get("account_payer_id") for entry in removed_data]) self.assertIn( str(first_bill.billing_period_start), [entry.get("billing_period_start") for entry in removed_data])
def test_purge_expired_line_items_on_date_simulate(self): """Test to simulate removing report data on a provided date.""" bill_table_name = AWS_CUR_TABLE_MAP["bill"] line_item_table_name = AWS_CUR_TABLE_MAP["line_item"] cost_entry_table_name = AWS_CUR_TABLE_MAP["cost_entry"] cleaner = AWSReportDBCleaner(self.schema) # Verify that data is cleared for a cutoff date == billing_period_start with schema_context(self.schema): first_bill = self.accessor._get_db_obj_query( bill_table_name).first() cutoff_date = first_bill.billing_period_start self.assertIsNotNone( self.accessor._get_db_obj_query(bill_table_name).first()) self.assertIsNotNone( self.accessor._get_db_obj_query(line_item_table_name).first()) self.assertIsNotNone( self.accessor._get_db_obj_query(cost_entry_table_name).first()) removed_data = cleaner.purge_expired_line_item(cutoff_date, simulate=True) self.assertEqual(len(removed_data), 1) self.assertEqual(removed_data[0].get("account_payer_id"), first_bill.payer_account_id) self.assertEqual(removed_data[0].get("billing_period_start"), str(first_bill.billing_period_start)) with schema_context(self.schema): self.assertIsNotNone( self.accessor._get_db_obj_query(bill_table_name).first()) self.assertIsNotNone( self.accessor._get_db_obj_query(line_item_table_name).first()) self.assertIsNotNone( self.accessor._get_db_obj_query(cost_entry_table_name).first())
def test_purge_expired_line_items_not_datetime_obj(self): """Test error raised if expired_date is not datetime.datetime.""" cleaner = AWSReportDBCleaner(self.schema) with self.assertRaises(AWSReportDBCleanerError): cleaner.purge_expired_line_item(False)