fix: don't send emails to VMs that were requested but not created

SUMMARY
    dash.models.Instance is created upon request and
    infrastructure.models.InstanceCreated when the instance is created.
    Using data from InstanceCreated to send invoices should solve this
    issue.
wip-gitea
Hostea dashboard 2022-09-04 14:31:28 +05:30
parent 25db390e4d
commit 3ebc518e1f
Signed by untrusted user who does not match committer: realaravinth
GPG Key ID: AD9F0F08E855ED88
2 changed files with 46 additions and 5 deletions

View File

@ -22,6 +22,7 @@ from oauth2_provider.generators import generate_client_id, generate_client_secre
from accounts.utils import gen_secret
from dash.models import Instance
from infrastructure.models import InstanceCreated
from billing.utils import generate_invoice, payment_fullfilled
Application = get_application_model()
@ -33,10 +34,12 @@ class Command(BaseCommand):
def handle(self, *args, **options):
instances = Instance.objects.all()
if instances:
for instance in Instance.objects.all():
self.stdout.write(f"Found instance: {instance}")
if not payment_fullfilled(instance=instance):
self.stdout.write(f"Payment not fulfilled for instance: {instance}")
payment = generate_invoice(instance=instance)
for paid_instance in InstanceCreated.objects.all():
self.stdout.write(f"Found instance: {paid_instance.instance}")
if not payment_fullfilled(instance=paid_instance.instance):
self.stdout.write(
f"Payment not fulfilled for instance: {paid_instance.instance}"
)
payment = generate_invoice(instance=paid_instance.instance)
else:
self.stdout.write("No instances available")

View File

@ -148,6 +148,44 @@ class GenerateInvoiceCommand(TestCase):
register_util(t=self, username=self.username)
create_configurations(t=self)
@override_settings(
HOSTEA=infra_custom_config(
test_name="test_dont_send_invoices_to_not_created_vms"
)
)
def test_dont_send_invoices_to_not_created_vms(self):
c = Client()
login_util(self, c, "accounts.home")
instance_name = "tnoinvonocrevm"
payload = {"name": instance_name, "configuration": self.instance_config[0].name}
resp = c.post(reverse("dash.instances.new"), payload)
self.assertEqual(resp.status_code, 302)
self.assertEqual(
resp.headers["location"],
reverse("billing.invoice.generate", args=(instance_name,)),
)
stdout = StringIO()
stderr = StringIO()
instance = Instance.objects.get(name=instance_name)
self.assertEqual(payment_fullfilled(instance=instance), False)
prev_len = len(mail.outbox)
# username exists
call_command(
"generate_invoice",
stdout=stdout,
stderr=stderr,
)
out = stdout.getvalue()
print(out)
self.assertEqual(instance_name not in out, True)
@override_settings(
HOSTEA=infra_custom_config(test_name="test_generate_invoice_cmd")
)