104 lines
3.5 KiB
Python
104 lines
3.5 KiB
Python
from atst.domain.csp.reports import MockReportingProvider, prepare_azure_reporting_data
|
|
from tests.factories import PortfolioFactory
|
|
from decimal import Decimal
|
|
import pendulum
|
|
|
|
|
|
def test_get_environment_monthly_totals():
|
|
environment = {
|
|
"name": "Test Environment",
|
|
"spending": {
|
|
"this_month": {"JEDI_CLIN_1": 100, "JEDI_CLIN_2": 100},
|
|
"last_month": {"JEDI_CLIN_1": 200, "JEDI_CLIN_2": 200},
|
|
"total": {"JEDI_CLIN_1": 1000, "JEDI_CLIN_2": 1000},
|
|
},
|
|
}
|
|
totals = MockReportingProvider._get_environment_monthly_totals(environment)
|
|
assert totals == {
|
|
"name": "Test Environment",
|
|
"this_month": 200,
|
|
"last_month": 400,
|
|
"total": 2000,
|
|
}
|
|
|
|
|
|
def test_get_application_monthly_totals():
|
|
portfolio = PortfolioFactory.create(
|
|
applications=[
|
|
{"name": "Test Application", "environments": [{"name": "Z"}, {"name": "A"}]}
|
|
],
|
|
)
|
|
application = {
|
|
"name": "Test Application",
|
|
"environments": [
|
|
{
|
|
"name": "Z",
|
|
"spending": {
|
|
"this_month": {"JEDI_CLIN_1": 50, "JEDI_CLIN_2": 50},
|
|
"last_month": {"JEDI_CLIN_1": 150, "JEDI_CLIN_2": 150},
|
|
"total": {"JEDI_CLIN_1": 250, "JEDI_CLIN_2": 250},
|
|
},
|
|
},
|
|
{
|
|
"name": "A",
|
|
"spending": {
|
|
"this_month": {"JEDI_CLIN_1": 100, "JEDI_CLIN_2": 100},
|
|
"last_month": {"JEDI_CLIN_1": 200, "JEDI_CLIN_2": 200},
|
|
"total": {"JEDI_CLIN_1": 1000, "JEDI_CLIN_2": 1000},
|
|
},
|
|
},
|
|
],
|
|
}
|
|
|
|
totals = MockReportingProvider._get_application_monthly_totals(
|
|
portfolio, application
|
|
)
|
|
assert totals["name"] == "Test Application"
|
|
assert totals["this_month"] == 300
|
|
assert totals["last_month"] == 700
|
|
assert totals["total"] == 2500
|
|
assert [env["name"] for env in totals["environments"]] == ["A", "Z"]
|
|
|
|
|
|
class TestPrepareAzureData:
|
|
start_of_month = pendulum.today(tz="utc").start_of("month").replace(tzinfo=None)
|
|
next_month = start_of_month.add(months=1).to_atom_string()
|
|
this_month = start_of_month.to_atom_string()
|
|
last_month = start_of_month.subtract(months=1).to_atom_string()
|
|
two_months_ago = last_month = start_of_month.subtract(months=2).to_atom_string()
|
|
|
|
def test_estimated_and_invoiced(self):
|
|
rows = [
|
|
[150.0, self.two_months_ago, "", "USD"],
|
|
[100.0, self.last_month, "e0500a4qhw", "USD"],
|
|
[50.0, self.this_month, "", "USD"],
|
|
[50.0, self.next_month, "", "USD"],
|
|
]
|
|
output = prepare_azure_reporting_data(rows)
|
|
|
|
assert output.get("invoiced") == Decimal(250.0)
|
|
assert output.get("estimated") == Decimal(100.0)
|
|
|
|
def test_just_estimated(self):
|
|
rows = [
|
|
[100.0, self.this_month, "", "USD"],
|
|
]
|
|
output = prepare_azure_reporting_data(rows)
|
|
|
|
assert output.get("invoiced") == Decimal(0.0)
|
|
assert output.get("estimated") == Decimal(100.0)
|
|
|
|
def test_just_invoiced(self):
|
|
rows = [
|
|
[100.0, self.last_month, "", "USD"],
|
|
]
|
|
output = prepare_azure_reporting_data(rows)
|
|
|
|
assert output.get("invoiced") == Decimal(100.0)
|
|
assert output.get("estimated") == Decimal(0.0)
|
|
|
|
def test_no_rows(self):
|
|
output = prepare_azure_reporting_data([])
|
|
assert output.get("invoiced") == Decimal(0.0)
|
|
assert output.get("estimated") == Decimal(0.0)
|