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