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.
Hostea dashboard 2022-09-04 14:31:28 +05:30
parent 6c31555a52
commit e023c25f25
Signed by: realaravinth
GPG Key ID: AD9F0F08E855ED88
3 changed files with 51 additions and 6 deletions

View File

@ -77,7 +77,9 @@ class LoginTest(TestCase):
Tests if login template renders
"""
resp = self.client.get(reverse("accounts.login"))
self.assertEqual(b"A free forge ecosystem for free developers" in resp.content, True)
self.assertEqual(
b"A free forge ecosystem for free developers" in resp.content, True
)
def test_login_works(self):
"""
@ -234,7 +236,9 @@ class RegistrationTest(TestCase):
Tests if register template renders
"""
resp = self.client.get(reverse("accounts.register"))
self.assertEqual(b"A free forge ecosystem for free developers." in resp.content, True)
self.assertEqual(
b"A free forge ecosystem for free developers." in resp.content, True
)
def test_register_works(self):
"""

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