Skip to content
This repository was archived by the owner on Apr 25, 2023. It is now read-only.

Commit

Permalink
Changed amount from double to JavaMoney
Browse files Browse the repository at this point in the history
  • Loading branch information
keilw committed May 30, 2018
1 parent fd5b10f commit e3743e6
Show file tree
Hide file tree
Showing 17 changed files with 298 additions and 225 deletions.
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
*.iml
target/
.idea
.idea
/.settings/
/.project
3 changes: 3 additions & 0 deletions money-tracker-application/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
/.settings/
/.classpath
/.project
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.skizware.money.tracker.service;

import javax.money.MonetaryAmount;

import com.skizware.money.tracker.domain.MoneyTracker;
import com.skizware.user.User;

Expand All @@ -17,7 +19,7 @@ public interface MoneyTrackerService {

public User enrollUser(final String emailAddress);

public MoneyTracker createUserMoneyTracker(final User user, final Double initialTrackerAmount);
public MoneyTracker createUserMoneyTracker(final User user, final MonetaryAmount initialTrackerAmount);

public void updateUserMoneyTrackers(User user);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@

import java.util.List;

import javax.money.MonetaryAmount;

/**
* Service for exposing operations for the money tracker application.
*/
Expand All @@ -31,7 +33,7 @@ public User enrollUser(String emailAddress) {
}

@Override
public MoneyTracker createUserMoneyTracker(User user, Double initialTrackerAmount) {
public MoneyTracker createUserMoneyTracker(User user, MonetaryAmount initialTrackerAmount) {
MoneyTracker newMoneyTracker = new MoneyTracker(initialTrackerAmount);
user.addMoneyTracker(newMoneyTracker);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,21 +1,19 @@
package com.skizware.money.tracker.service;

import com.skizware.money.tracker.domain.MoneyTracker;
import com.skizware.money.tracker.persistence.repository.UserRepository;
import com.skizware.user.User;
import junit.framework.TestCase;
import org.junit.Before;
import org.junit.BeforeClass;

import org.javamoney.moneta.FastMoney;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import com.skizware.money.tracker.service.impl.MoneyTrackerServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.PostConstruct;
import javax.money.CurrencyUnit;
import javax.money.Monetary;
import javax.money.MonetaryAmount;

/**
* Tests for the application logic.
Expand All @@ -24,17 +22,17 @@
@ContextConfiguration(locations = "ApplicationTest-config.xml")
public class MoneyTrackerServiceTest extends TestCase {


public static final String TEST_EMAIL_1 = "[email protected]";
public static final String TEST_EMAIL_2 = "[email protected]";
private static final CurrencyUnit TEST_CURRENCY = Monetary.getCurrency("EUR");
private static final String TEST_EMAIL_1 = "[email protected]";
private static final String TEST_EMAIL_2 = "[email protected]";

@Autowired
private MoneyTrackerServiceImpl moneyTrackerService;

public void setupUser(){
User newUser = moneyTrackerService.enrollUser(TEST_EMAIL_1);
MoneyTracker moneyTracker = moneyTrackerService.createUserMoneyTracker(newUser, 5000D);
moneyTracker.addTransaction(-500D, "Stuff");
MoneyTracker moneyTracker = moneyTrackerService.createUserMoneyTracker(newUser, FastMoney.of(5000D, TEST_CURRENCY));
moneyTracker.addTransaction(FastMoney.of(-500D, TEST_CURRENCY), "Stuff");
moneyTrackerService.updateUserMoneyTrackers(newUser);
}

Expand Down Expand Up @@ -78,15 +76,19 @@ public void testCreateMoneyTrackerForUser() {
//given a user
User user = new User(TEST_EMAIL_2);

MoneyTracker moneyTracker = moneyTrackerService.createUserMoneyTracker(user, 5000D);
MoneyTracker moneyTracker = moneyTrackerService.createUserMoneyTracker(user, createMoney(5000D));
assertNotNull(moneyTracker);
assertEquals("First tracker created, list should have 1 tracker", 1, user.getMoneyTrackers().size());
assertEquals("Tracker should have 5000 money for the month", 5000D, moneyTracker.getMoneyForTheMonth());
assertEquals("Tracker should have 5000 money for the month", createMoney(5000D), moneyTracker.getMoneyForTheMonth());

moneyTracker = moneyTrackerService.createUserMoneyTracker(user, 7000D);
moneyTracker = moneyTrackerService.createUserMoneyTracker(user, createMoney(7000D));
assertNotNull(moneyTracker);
assertEquals("Second tracker created, list should have 2 trackers", 2, user.getMoneyTrackers().size());
assertEquals("Tracker should have 7000 money for the month", 7000D, moneyTracker.getMoneyForTheMonth());
assertEquals("Tracker should have 7000 money for the month", createMoney(7000D), moneyTracker.getMoneyForTheMonth());
}

private MonetaryAmount createMoney(final Double number) {
return FastMoney.of(number, TEST_CURRENCY);
}

}
3 changes: 3 additions & 0 deletions money-tracker-domain/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
/.settings/
/.classpath
/.project
52 changes: 29 additions & 23 deletions money-tracker-domain/pom.xml
Original file line number Diff line number Diff line change
@@ -1,28 +1,34 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>skizware</groupId>
<artifactId>money-tracker</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>skizware</groupId>
<artifactId>money-tracker</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<groupId>skizware.money-tracker</groupId>
<artifactId>money-tracker-domain</artifactId>
<packaging>jar</packaging>
<groupId>skizware.money-tracker</groupId>
<artifactId>money-tracker-domain</artifactId>
<packaging>jar</packaging>

<name>money-tracker-domain</name>
<url>http://maven.apache.org</url>
<name>money-tracker-domain</name>
<url>http://maven.apache.org</url>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencies>
<dependency>
<groupId>org.javamoney</groupId>
<artifactId>moneta</artifactId>
<type>pom</type>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,24 @@

import java.util.*;

import javax.money.CurrencyUnit;
import javax.money.Monetary;
import javax.money.MonetaryAmount;

import org.javamoney.moneta.FastMoney;

/**
* Hello world!
*/
public class MoneyTracker {

private static final CurrencyUnit TRACK_CURR = Monetary.getCurrency("EUR");
public static final String UNCATEGORIZED = "Uncategorized";
private final UUID uuid;
private final Double moneyForTheMonth;
private final MonetaryAmount moneyForTheMonth;
private Map<String, List<MoneyTransaction>> moneyTransactions;
private Date dateTimeCreated;

public MoneyTracker(Double moneyForTheMonth) {
public MoneyTracker(MonetaryAmount moneyForTheMonth) {
this.moneyForTheMonth = moneyForTheMonth;
this.uuid = UUID.randomUUID();
init();
Expand All @@ -24,16 +30,16 @@ private void init() {
dateTimeCreated = new Date();
}

public Double getMoneyForTheMonth() {
public MonetaryAmount getMoneyForTheMonth() {
return moneyForTheMonth;
}

public MoneyTracker addTransaction(Double transactionAmount) {
public MoneyTracker addTransaction(MonetaryAmount transactionAmount) {
addTransaction(transactionAmount, UNCATEGORIZED);
return this;
}

public MoneyTracker addTransaction(Double transactionAmount, String category) {
public MoneyTracker addTransaction(MonetaryAmount transactionAmount, String category) {
if (!moneyTransactions.containsKey(category)) {
moneyTransactions.put(category, new LinkedList<MoneyTransaction>());
}
Expand All @@ -42,22 +48,22 @@ public MoneyTracker addTransaction(Double transactionAmount, String category) {
return this;
}

public Double getTotalRemaining() {
Double total = moneyForTheMonth;
public MonetaryAmount getTotalRemaining() {
MonetaryAmount total = moneyForTheMonth;
for (List<MoneyTransaction> categoryTransactions : moneyTransactions.values()) {
for (MoneyTransaction transaction : categoryTransactions) {
total += transaction.getAmount();
total = total.add(transaction.getAmount());
}
}

return total;
}

public Double getMoneySpentOn(String category) {
Double total = 0D;
public MonetaryAmount getMoneySpentOn(String category) {
MonetaryAmount total = FastMoney.of(0D, TRACK_CURR);
if (moneyTransactions.containsKey(category)) {
for (MoneyTransaction transaction : moneyTransactions.get(category)) {
total += transaction.getAmount();
total = total.add(transaction.getAmount());
}
}
return total;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.skizware.money.tracker.domain;

import javax.money.MonetaryAmount;

/**
* Created with IntelliJ IDEA.
* User: david.anderson
Expand All @@ -9,13 +11,13 @@
*/
public class MoneyTransaction {

private Double amount;
private MonetaryAmount amount;

public MoneyTransaction(Double amount) {
public MoneyTransaction(MonetaryAmount amount) {
this.amount = amount;
}

public Double getAmount(){
public MonetaryAmount getAmount(){
return amount;
}

Expand Down
Loading

0 comments on commit e3743e6

Please sign in to comment.