mercredi 13 février 2019

How to write tests for two Order Models

I'm a complete novice to testing, been reading documentation still can't understand how to write specific tests for my models.

Essentially the code is currently filling data given the OrderItem's net_price, quantity and tax value - this is all working accordingly in the "Model".

But how do I write tests that do the same thing / test cases?

class Order(models.Model):
order_number = models.IntegerField(default="1", unique=True)
sub_total = models.DecimalField(max_digits=6, decimal_places=2, default="0.00")
tax = models.DecimalField(max_digits=6, decimal_places=2, default="20.00")
total_gross = models.DecimalField(max_digits=6, decimal_places=2, default="0.00")
last_updated = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)


def calculate_totals(self): ## Addresses point 1
    items = OrderItem.objects.filter(order_number_fk=self)
    sub_total = 0
    for item in items:
        sub_total += item.net_total
    self.sub_total = sub_total

    self.total_gross = self.sub_total * (1+(self.tax/100))

    self.save()



def __str__(self):
    return str(self.order_number)

class OrderItem(models.Model):
order_number_fk = models.ForeignKey(Order, on_delete=models.CASCADE, verbose_name='Order Number')
order_number_fk.tax = models.IntegerField(unique=True)
net_price = models.DecimalField(max_digits=6, decimal_places=2, default="0.00")
quantity = models.IntegerField(
    default=1,
    validators=[MaxValueValidator(100), MinValueValidator(1)]
 )
net_total = models.DecimalField(max_digits=6, decimal_places=2, default="0.00")
total = models.DecimalField(max_digits=6, decimal_places=2, default="0.00")
created = models.DateTimeField(auto_now_add=True)
last_updated = models.DateTimeField(auto_now=True)

def __str__(self):
    return str(self.order_number_fk)

def save(self, *args, **kwargs):
    self.net_total = self.net_price * self.quantity
    self.total = self.net_total * (1+(self.order_number_fk.tax/100))
    super().save(*args, **kwargs)

    self.order_number_fk.calculate_totals()

Aucun commentaire:

Enregistrer un commentaire