Skip to content

Product test #30

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 8 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 33 additions & 8 deletions src/main/java/pl/edu/agh/mwo/invoice/Invoice.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,29 +2,54 @@

import java.math.BigDecimal;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

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

public class Invoice {
private Collection<Product> products;
// private Collection<Product> products
private Map<Product, Integer> products = new HashMap<>();

public void addProduct(Product product) {
// TODO: implement
this.addProduct(product, 1);
// if (products.containsKey(product)) {
// int a = products.get(product);
// products.put(product,a+1);
// }
// products.put(product,1);
}

public void addProduct(Product product, Integer quantity) {
// TODO: implement
if (products.containsKey(product)) {
int a = products.get(product);
products.put(product,quantity+1);
}
products.put(product,quantity);
}

public BigDecimal getSubtotal() {
return null;
public BigDecimal getNetPrice() {
BigDecimal sum = new BigDecimal ("0");
for(Product s : this.products.keySet()){
Integer amount = this.products.get(s);
BigDecimal a = new BigDecimal(amount);
BigDecimal price = s.getPrice();
sum = sum.add(price.multiply(a));
}
return sum;
}

public BigDecimal getTax() {
return null;
return this.getGrossPrice().subtract(this.getNetPrice());
}

public BigDecimal getTotal() {
return null;
public BigDecimal getGrossPrice() {
BigDecimal gross = new BigDecimal("0");
for(Product s : this.products.keySet()){
BigDecimal a = new BigDecimal(this.products.get(s));
BigDecimal tax = s.getPriceWithTax().subtract(s.getPrice());
gross = gross.add(tax.multiply(a));
}
return gross;
}
}
22 changes: 18 additions & 4 deletions src/main/java/pl/edu/agh/mwo/invoice/product/Product.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,24 +10,38 @@ public abstract class Product {
private final BigDecimal taxPercent;

protected Product(String name, BigDecimal price, BigDecimal tax) {
if (name == null || name.isEmpty())
{
throw new IllegalArgumentException("Product name can't be null!");
}
if (price == null)
{
throw new IllegalArgumentException();
}
if (price.compareTo(new BigDecimal ("0")) < 0)
{
throw new IllegalArgumentException();
}
this.name = name;
this.price = price;
this.taxPercent = tax;
}

public String getName() {
return null;
return name;
}

public BigDecimal getPrice() {
return null;
return price;
}

public BigDecimal getTaxPercent() {
return null;
return taxPercent;
}

public BigDecimal getPriceWithTax() {
return null;
BigDecimal a = new BigDecimal ("1");
return (price.multiply((taxPercent.add(a))));

}
}
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.getNetPrice()));
}

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

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

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

@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.getNetPrice()));
}

@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.getGrossPrice()));
}

@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.getNetPrice()));
}

@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.getGrossPrice()));
}

@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"));
}
}