Skip to content

Commit 56456ce

Browse files
authored
BAEL-9325 Code and Unit Tests for Guide to RecordBuilder (#18664)
- Add a new libraries-record-builder package with use cases for RecordBuilder. - Provides unit tests for each of the implemented use cases.
1 parent 1377b7a commit 56456ce

File tree

4 files changed

+163
-0
lines changed

4 files changed

+163
-0
lines changed

libraries-7/pom.xml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,11 @@
4242
<artifactId>manifold-yaml-rt</artifactId>
4343
<version>${manifold.version}</version>
4444
</dependency>
45+
<dependency>
46+
<groupId>io.soabase.record-builder</groupId>
47+
<artifactId>record-builder-core</artifactId>
48+
<version>${record-builder.version}</version>
49+
</dependency>
4550
</dependencies>
4651

4752
<build>
@@ -66,6 +71,11 @@
6671
<artifactId>yavi</artifactId>
6772
<version>${yavi.version}</version>
6873
</path>
74+
<path>
75+
<groupId>io.soabase.record-builder</groupId>
76+
<artifactId>record-builder-processor</artifactId>
77+
<version>${record-builder.version}</version>
78+
</path>
6979
</annotationProcessorPaths>
7080
</configuration>
7181
</plugin>
@@ -76,6 +86,7 @@
7686
<java-diff-utils.version>4.12</java-diff-utils.version>
7787
<yavi.version>0.14.1</yavi.version>
7888
<manifold.version>2024.1.20</manifold.version>
89+
<record-builder.version>47</record-builder.version>
7990
</properties>
8091

8192
</project>
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.baeldung.recordbuilderguide;
2+
3+
import io.soabase.recordbuilder.core.RecordBuilder;
4+
5+
@RecordBuilder
6+
public record Person(String name, int age) implements PersonBuilder.With {}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package com.baeldung.recordbuilderguide;
2+
3+
import java.util.function.Consumer;
4+
5+
public class RecordBuilderDemo {
6+
7+
public static Person createInitialPerson() {
8+
return new Person("foo", 123);
9+
}
10+
11+
public static Person updateName(Person original) {
12+
return original.withName("bar");
13+
}
14+
15+
public static Person updateAge(Person original) {
16+
return original.withAge(456);
17+
}
18+
19+
public static Person updateBothFieldsWithBuilder(Person original) {
20+
return original.with()
21+
.age(101)
22+
.name("baz")
23+
.build();
24+
}
25+
26+
public static Person updateWithConsumer(Person original) {
27+
return original.with(p -> p.age(200).name("whatever"));
28+
}
29+
30+
public static Person updateWithConditionalConsumer(Person original) {
31+
return original.with(p -> {
32+
if (p.age() > 13) {
33+
p.name("Teen " + p.name());
34+
} else {
35+
p.name("whatever");
36+
}
37+
});
38+
}
39+
40+
public static Person updateWithStaticBuilderAndConsumer(Person original) {
41+
return PersonBuilder.from(original)
42+
.with(p -> p.age(300).name("Manual Copy"));
43+
}
44+
45+
public static Person updateWithStaticBuilderAndName(Person original) {
46+
return PersonBuilder.from(original)
47+
.withName("boop");
48+
}
49+
}
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
package com.baeldung.recordbuilderguide;
2+
3+
import org.junit.jupiter.api.Test;
4+
5+
import static org.junit.jupiter.api.Assertions.assertEquals;
6+
7+
public class RecordBuilderDemoUnitTest {
8+
9+
@Test
10+
void givenNoInput_whenCreateInitialPerson_thenCorrectFieldsSet() {
11+
Person p1 = RecordBuilderDemo.createInitialPerson();
12+
assertEquals("foo", p1.name());
13+
assertEquals(123, p1.age());
14+
}
15+
16+
@Test
17+
void givenPerson_whenUpdateName_thenNameChangesAndAgeUnchanged() {
18+
Person p1 = RecordBuilderDemo.createInitialPerson();
19+
Person p2 = RecordBuilderDemo.updateName(p1);
20+
21+
assertEquals("bar", p2.name());
22+
assertEquals(123, p2.age());
23+
}
24+
25+
@Test
26+
void givenPerson_whenUpdateAge_thenAgeChangesAndNameUnchanged() {
27+
Person p2 = RecordBuilderDemo.updateName(RecordBuilderDemo.createInitialPerson());
28+
Person p3 = RecordBuilderDemo.updateAge(p2);
29+
30+
assertEquals("bar", p3.name());
31+
assertEquals(456, p3.age());
32+
}
33+
34+
@Test
35+
void givenPerson_whenUpdateBothFieldsWithBuilder_thenBothFieldsChange() {
36+
Person p3 = RecordBuilderDemo.updateAge(
37+
RecordBuilderDemo.updateName(
38+
RecordBuilderDemo.createInitialPerson()));
39+
Person p4 = RecordBuilderDemo.updateBothFieldsWithBuilder(p3);
40+
41+
assertEquals("baz", p4.name());
42+
assertEquals(101, p4.age());
43+
}
44+
45+
@Test
46+
void givenPerson_whenUpdateWithConsumer_thenFieldsChangeCorrectly() {
47+
Person p4 = RecordBuilderDemo.updateBothFieldsWithBuilder(
48+
RecordBuilderDemo.updateAge(
49+
RecordBuilderDemo.updateName(
50+
RecordBuilderDemo.createInitialPerson())));
51+
Person p5 = RecordBuilderDemo.updateWithConsumer(p4);
52+
53+
assertEquals("whatever", p5.name());
54+
assertEquals(200, p5.age());
55+
}
56+
57+
@Test
58+
void givenPerson_whenUpdateWithConditionalConsumer_thenNameIsConditionallySet() {
59+
Person p5 = RecordBuilderDemo.updateWithConsumer(
60+
RecordBuilderDemo.updateBothFieldsWithBuilder(
61+
RecordBuilderDemo.updateAge(
62+
RecordBuilderDemo.updateName(
63+
RecordBuilderDemo.createInitialPerson()))));
64+
Person p6 = RecordBuilderDemo.updateWithConditionalConsumer(p5);
65+
66+
assertEquals("Teen whatever", p6.name());
67+
assertEquals(200, p6.age());
68+
}
69+
70+
@Test
71+
void givenPerson_whenUpdateWithStaticBuilderAndConsumer_thenFieldsAreUpdated() {
72+
Person p6 = RecordBuilderDemo.updateWithConditionalConsumer(
73+
RecordBuilderDemo.updateWithConsumer(
74+
RecordBuilderDemo.updateBothFieldsWithBuilder(
75+
RecordBuilderDemo.updateAge(
76+
RecordBuilderDemo.updateName(
77+
RecordBuilderDemo.createInitialPerson())))));
78+
Person p7 = RecordBuilderDemo.updateWithStaticBuilderAndConsumer(p6);
79+
80+
assertEquals("Manual Copy", p7.name());
81+
assertEquals(300, p7.age());
82+
}
83+
84+
@Test
85+
void givenPerson_whenUpdateWithStaticBuilderAndName_thenOnlyNameChanges() {
86+
Person p6 = RecordBuilderDemo.updateWithConditionalConsumer(
87+
RecordBuilderDemo.updateWithConsumer(
88+
RecordBuilderDemo.updateBothFieldsWithBuilder(
89+
RecordBuilderDemo.updateAge(
90+
RecordBuilderDemo.updateName(
91+
RecordBuilderDemo.createInitialPerson())))));
92+
Person p8 = RecordBuilderDemo.updateWithStaticBuilderAndName(p6);
93+
94+
assertEquals("boop", p8.name());
95+
assertEquals(200, p8.age());
96+
}
97+
}

0 commit comments

Comments
 (0)