Skip to content

Commit 273b22a

Browse files
committed
add TestData base classes
1 parent a2c8265 commit 273b22a

2 files changed

Lines changed: 152 additions & 0 deletions

File tree

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
package it.aboutbits.springboot.testing.testdata.base;
2+
3+
import it.aboutbits.springboot.testing.spring.BeanAccessor;
4+
import jakarta.persistence.EntityManager;
5+
import lombok.extern.slf4j.Slf4j;
6+
import org.springframework.transaction.support.TransactionTemplate;
7+
8+
import java.util.ArrayList;
9+
import java.util.List;
10+
import java.util.function.BiFunction;
11+
import java.util.function.Consumer;
12+
import java.util.function.ObjIntConsumer;
13+
import java.util.function.UnaryOperator;
14+
15+
@SuppressWarnings("unchecked")
16+
@Slf4j
17+
public abstract class ModifyableTestDataCreator<CREATOR extends ModifyableTestDataCreator<CREATOR, ITEM, PARAMETER>, ITEM, PARAMETER> extends TestDataCreator<ITEM> {
18+
private boolean mutatorSet = false;
19+
private boolean mutatorCalled = false;
20+
21+
protected BiFunction<PARAMETER, Integer, PARAMETER> parameterMutator = (parameter, index) -> {
22+
mutatorCalled = true;
23+
return parameter;
24+
};
25+
protected ObjIntConsumer<ITEM> resultMutator = (item, index) -> {
26+
};
27+
28+
protected ModifyableTestDataCreator(int count) {
29+
super(count);
30+
}
31+
32+
public CREATOR modifyParameter(BiFunction<PARAMETER, Integer, PARAMETER> parameterMutator) {
33+
this.parameterMutator = (parameter, index) -> {
34+
mutatorCalled = true;
35+
return parameterMutator.apply(parameter, index);
36+
};
37+
mutatorSet = true;
38+
return (CREATOR) this;
39+
}
40+
41+
public CREATOR modifyParameter(UnaryOperator<PARAMETER> parameterMutator) {
42+
this.parameterMutator = (parameter, index) -> {
43+
mutatorCalled = true;
44+
return parameterMutator.apply(parameter);
45+
};
46+
mutatorSet = true;
47+
return (CREATOR) this;
48+
}
49+
50+
public CREATOR modifyResult(ObjIntConsumer<ITEM> resultMutator) {
51+
this.resultMutator = resultMutator;
52+
return (CREATOR) this;
53+
}
54+
55+
public CREATOR modifyResult(Consumer<ITEM> resultMutator) {
56+
this.resultMutator = (item, index) -> resultMutator.accept(item);
57+
return (CREATOR) this;
58+
}
59+
60+
@Override
61+
protected List<ITEM> create() {
62+
var result = new ArrayList<ITEM>();
63+
64+
for (var index = 0; index < numberOfItems; index++) {
65+
var item = create(index);
66+
67+
resultMutator.accept(item, index);
68+
69+
result.add(
70+
saveMutation(item)
71+
);
72+
}
73+
74+
if (mutatorSet && !mutatorCalled) {
75+
log.error("Parameter-mutation is defined but was never called.");
76+
throw new IllegalStateException("Parameter-mutation is defined but was never called.");
77+
}
78+
79+
return result;
80+
}
81+
82+
protected ITEM saveMutation(ITEM item) {
83+
var entityManager = BeanAccessor.getBean(EntityManager.class);
84+
var transactionTemplate = BeanAccessor.getBean(TransactionTemplate.class);
85+
86+
return transactionTemplate.execute(status -> {
87+
try {
88+
return entityManager.merge(item);
89+
} catch (Exception e) {
90+
status.setRollbackOnly();
91+
throw e;
92+
}
93+
});
94+
}
95+
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package it.aboutbits.springboot.testing.testdata.base;
2+
3+
import java.util.ArrayList;
4+
import java.util.Comparator;
5+
import java.util.HashSet;
6+
import java.util.List;
7+
import java.util.Set;
8+
import java.util.function.Function;
9+
10+
public abstract class TestDataCreator<ITEM> {
11+
protected final int numberOfItems;
12+
13+
protected TestDataCreator(int numberIfItems) {
14+
this.numberOfItems = numberIfItems;
15+
}
16+
17+
public void commit() {
18+
create();
19+
}
20+
21+
public ITEM returnFirst() {
22+
return create().getFirst();
23+
}
24+
25+
public List<ITEM> returnAll() {
26+
return create();
27+
}
28+
29+
public List<ITEM> returnSorted(Comparator<ITEM> comparator) {
30+
return returnAll().stream().sorted(comparator).toList();
31+
}
32+
33+
public <U extends Comparable<? super U>> List<ITEM> returnSorted(Function<ITEM, U> comparator) {
34+
return returnAll().stream()
35+
.sorted(Comparator.comparing(comparator))
36+
.toList();
37+
}
38+
39+
public Set<ITEM> returnSet() {
40+
return new HashSet<>(create());
41+
}
42+
43+
protected List<ITEM> create() {
44+
var result = new ArrayList<ITEM>();
45+
46+
for (var index = 0; index < numberOfItems; index++) {
47+
result.add(
48+
create(index)
49+
);
50+
}
51+
52+
return result;
53+
}
54+
55+
protected abstract ITEM create(int index);
56+
57+
}

0 commit comments

Comments
 (0)