Skip to content

Commit

Permalink
Merge pull request #42 from fracz/specs
Browse files Browse the repository at this point in the history
Specification of the project
  • Loading branch information
fracz authored Jan 17, 2021
2 parents a76e8e3 + 722f869 commit c00d71b
Show file tree
Hide file tree
Showing 2 changed files with 164 additions and 0 deletions.
107 changes: 107 additions & 0 deletions src/test/java/pl/edu/agh/mwo/invoice/InvoiceTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
package pl.edu.agh.mwo.invoice;

import java.math.BigDecimal;

import org.hamcrest.Matchers;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

import pl.edu.agh.mwo.invoice.Invoice;
import pl.edu.agh.mwo.invoice.product.DairyProduct;
import pl.edu.agh.mwo.invoice.product.OtherProduct;
import pl.edu.agh.mwo.invoice.product.Product;
import pl.edu.agh.mwo.invoice.product.TaxFreeProduct;

public class InvoiceTest {
private Invoice invoice;

@Before
public void createEmptyInvoiceForTheTest() {
invoice = new Invoice();
}

@Test
public void testEmptyInvoiceHasEmptySubtotal() {
Assert.assertThat(BigDecimal.ZERO, Matchers.comparesEqualTo(invoice.getSubtotal()));
}

@Test
public void testEmptyInvoiceHasEmptyTaxAmount() {
Assert.assertThat(BigDecimal.ZERO, Matchers.comparesEqualTo(invoice.getTax()));
}

@Test
public void testEmptyInvoiceHasEmptyTotal() {
Assert.assertThat(BigDecimal.ZERO, Matchers.comparesEqualTo(invoice.getTotal()));
}

@Test
public void testInvoiceHasTheSameSubtotalAndTotalIfTaxIsZero() {
Product taxFreeProduct = new TaxFreeProduct("Warzywa", new BigDecimal("199.99"));
invoice.addProduct(taxFreeProduct);
Assert.assertThat(invoice.getTotal(), Matchers.comparesEqualTo(invoice.getSubtotal()));
}

@Test
public void testInvoiceHasProperSubtotalForManyProducts() {
invoice.addProduct(new TaxFreeProduct("Owoce", new BigDecimal("200")));
invoice.addProduct(new DairyProduct("Maslanka", new BigDecimal("100")));
invoice.addProduct(new OtherProduct("Wino", new BigDecimal("10")));
Assert.assertThat(new BigDecimal("310"), Matchers.comparesEqualTo(invoice.getSubtotal()));
}

@Test
public void testInvoiceHasProperTaxValueForManyProduct() {
// tax: 0
invoice.addProduct(new TaxFreeProduct("Pampersy", new BigDecimal("200")));
// tax: 8
invoice.addProduct(new DairyProduct("Kefir", new BigDecimal("100")));
// tax: 2.30
invoice.addProduct(new OtherProduct("Piwko", new BigDecimal("10")));
Assert.assertThat(new BigDecimal("10.30"), Matchers.comparesEqualTo(invoice.getTax()));
}

@Test
public void testInvoiceHasProperTotalValueForManyProduct() {
// price with tax: 200
invoice.addProduct(new TaxFreeProduct("Maskotki", new BigDecimal("200")));
// price with tax: 108
invoice.addProduct(new DairyProduct("Maslo", new BigDecimal("100")));
// price with tax: 12.30
invoice.addProduct(new OtherProduct("Chipsy", new BigDecimal("10")));
Assert.assertThat(new BigDecimal("320.30"), Matchers.comparesEqualTo(invoice.getTotal()));
}

@Test
public void testInvoiceHasPropoerSubtotalWithQuantityMoreThanOne() {
// 2x kubek - price: 10
invoice.addProduct(new TaxFreeProduct("Kubek", new BigDecimal("5")), 2);
// 3x kozi serek - price: 30
invoice.addProduct(new DairyProduct("Kozi Serek", new BigDecimal("10")), 3);
// 1000x pinezka - price: 10
invoice.addProduct(new OtherProduct("Pinezka", new BigDecimal("0.01")), 1000);
Assert.assertThat(new BigDecimal("50"), Matchers.comparesEqualTo(invoice.getSubtotal()));
}

@Test
public void testInvoiceHasPropoerTotalWithQuantityMoreThanOne() {
// 2x chleb - price with tax: 10
invoice.addProduct(new TaxFreeProduct("Chleb", new BigDecimal("5")), 2);
// 3x chedar - price with tax: 32.40
invoice.addProduct(new DairyProduct("Chedar", new BigDecimal("10")), 3);
// 1000x pinezka - price with tax: 12.30
invoice.addProduct(new OtherProduct("Pinezka", new BigDecimal("0.01")), 1000);
Assert.assertThat(new BigDecimal("54.70"), Matchers.comparesEqualTo(invoice.getTotal()));
}

@Test(expected = IllegalArgumentException.class)
public void testInvoiceWithZeroQuantity() {
invoice.addProduct(new TaxFreeProduct("Tablet", new BigDecimal("1678")), 0);
}

@Test(expected = IllegalArgumentException.class)
public void testInvoiceWithNegativeQuantity() {
invoice.addProduct(new DairyProduct("Zsiadle mleko", new BigDecimal("5.55")), -1);
}
}
57 changes: 57 additions & 0 deletions src/test/java/pl/edu/agh/mwo/invoice/product/ProductTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package pl.edu.agh.mwo.invoice.product;

import java.math.BigDecimal;

import org.hamcrest.Matchers;
import org.junit.Assert;
import org.junit.Test;

import pl.edu.agh.mwo.invoice.product.Product;

public class ProductTest {
@Test
public void testProductNameIsCorrect() {
Product product = new OtherProduct("buty", new BigDecimal("100.0"));
Assert.assertEquals("buty", product.getName());
}

@Test
public void testProductPriceAndTaxWithDefaultTax() {
Product product = new OtherProduct("Ogorki", new BigDecimal("100.0"));
Assert.assertThat(new BigDecimal("100"), Matchers.comparesEqualTo(product.getPrice()));
Assert.assertThat(new BigDecimal("0.23"), Matchers.comparesEqualTo(product.getTaxPercent()));
}

@Test
public void testProductPriceAndTaxWithDairyProduct() {
Product product = new DairyProduct("Szarlotka", new BigDecimal("100.0"));
Assert.assertThat(new BigDecimal("100"), Matchers.comparesEqualTo(product.getPrice()));
Assert.assertThat(new BigDecimal("0.08"), Matchers.comparesEqualTo(product.getTaxPercent()));
}

@Test
public void testPriceWithTax() {
Product product = new DairyProduct("Oscypek", new BigDecimal("100.0"));
Assert.assertThat(new BigDecimal("108"), Matchers.comparesEqualTo(product.getPriceWithTax()));
}

@Test(expected = IllegalArgumentException.class)
public void testProductWithNullName() {
new OtherProduct(null, new BigDecimal("100.0"));
}

@Test(expected = IllegalArgumentException.class)
public void testProductWithEmptyName() {
new TaxFreeProduct("", new BigDecimal("100.0"));
}

@Test(expected = IllegalArgumentException.class)
public void testProductWithNullPrice() {
new DairyProduct("Banany", null);
}

@Test(expected = IllegalArgumentException.class)
public void testProductWithNegativePrice() {
new TaxFreeProduct("Mandarynki", new BigDecimal("-1.00"));
}
}

0 comments on commit c00d71b

Please sign in to comment.