Skip to content

Commit

Permalink
#96: Bugfix: BigDecimal for money is now always scaled to 2 with Roun…
Browse files Browse the repository at this point in the history
…dingMode.HALF_UP
  • Loading branch information
Wout Schoovaerts committed Oct 13, 2023
1 parent 849afd9 commit 7392711
Show file tree
Hide file tree
Showing 6 changed files with 60 additions and 6 deletions.
2 changes: 1 addition & 1 deletion README.md
Expand Up @@ -20,7 +20,7 @@ This library requires Java 11+.
<dependency>
<groupId>be.woutschoovaerts</groupId>
<artifactId>mollie</artifactId>
<version>4.0.1</version>
<version>4.0.2</version>
</dependency>
```

Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Expand Up @@ -6,7 +6,7 @@

<groupId>be.woutschoovaerts</groupId>
<artifactId>mollie</artifactId>
<version>4.0.1</version>
<version>4.0.2</version>

<name>Mollie with Java</name>
<description>Java framework to consume the Mollie API</description>
Expand Down
@@ -1,6 +1,7 @@
package be.woutschoovaerts.mollie.data.common;

import com.fasterxml.jackson.annotation.JsonFormat;
import be.woutschoovaerts.mollie.serializer.MoneySerializer;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
Expand All @@ -16,6 +17,6 @@ public class Amount {

private String currency;

@JsonFormat(shape = JsonFormat.Shape.STRING)
@JsonSerialize(using = MoneySerializer.class)
private BigDecimal value;
}
@@ -0,0 +1,17 @@
package be.woutschoovaerts.mollie.serializer;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;

import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;

public class MoneySerializer extends JsonSerializer<BigDecimal> {
@Override
public void serialize(BigDecimal value, JsonGenerator jsonGenerator, SerializerProvider serializers) throws IOException {
BigDecimal scaledValue = value.setScale(2, RoundingMode.HALF_UP);
jsonGenerator.writeObject(scaledValue);
}
}
Expand Up @@ -9,7 +9,7 @@

import static org.junit.jupiter.api.Assertions.assertEquals;

public class JsonSerializationFixes {
public class JsonSerializationFixesTestCase {

@Test
void valueOfAmountShouldBeSerializedAsString() throws Exception {
Expand All @@ -20,7 +20,7 @@ void valueOfAmountShouldBeSerializedAsString() throws Exception {

Amount amountWithDouble = Amount.builder()
.currency("EUR")
.value(new BigDecimal(12.00).setScale(2, RoundingMode.UP))
.value(new BigDecimal(12.00))
.build();

String expectedJson = "{\"currency\":\"EUR\",\"value\":\"12.00\"}";
Expand Down
@@ -0,0 +1,36 @@
package be.woutschoovaerts.mollie.serializer;

import com.fasterxml.jackson.core.JsonGenerator;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;

import java.math.BigDecimal;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.verify;

@ExtendWith(MockitoExtension.class)
class MoneySerializerTest {

@Mock
private JsonGenerator jsonGenerator;

@InjectMocks
private MoneySerializer serializer;

@Captor
private ArgumentCaptor<BigDecimal> bigDecimalCaptor;

@Test
void serialize() throws Exception {
serializer.serialize(new BigDecimal("12.456"), jsonGenerator, null);

verify(jsonGenerator).writeObject(bigDecimalCaptor.capture());
assertEquals(2, bigDecimalCaptor.getValue().scale());
}
}

0 comments on commit 7392711

Please sign in to comment.