-
Notifications
You must be signed in to change notification settings - Fork 270
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #42 from fracz/specs
Specification of the project
- Loading branch information
Showing
2 changed files
with
164 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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
57
src/test/java/pl/edu/agh/mwo/invoice/product/ProductTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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")); | ||
} | ||
} |