fix: don't send emails to VMs that were requested but not created
ci/woodpecker/push/woodpecker Pipeline failed Details
ci/woodpecker/pr/woodpecker Pipeline failed Details

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.
Hostea dashboard 2022-09-04 14:31:28 +05:30
parent 3019d9d739
commit 2298e4e75c
Signed by: realaravinth
GPG Key ID: AD9F0F08E855ED88
2 changed files with 45 additions and 4 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():
for paid_instance in InstanceCreated.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)
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 = "test_dont_send_invoices_to_not_created_vms"
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")
)