Skip to content

Commit c8463b7

Browse files
committed
Provided Recorder implementation for GivenUUIDGenerator
1 parent 6ae52b7 commit c8463b7

File tree

2 files changed

+72
-1
lines changed

2 files changed

+72
-1
lines changed

restx-core/src/main/java/restx/specs/GivenUUIDGenerator.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,12 @@ public ImmutableList<String> getPlaybackUUIDs() {
2323
return playbackUUIDs;
2424
}
2525

26+
public GivenUUIDGenerator withAddedUUID(String uuid){
27+
return new GivenUUIDGenerator(targetComponentName, ImmutableList.<String>builder().addAll(playbackUUIDs).add(uuid).build());
28+
}
29+
2630
@Override
2731
public void toString(StringBuilder sb) {
28-
sb.append(String.format(" - uuidsFor: %s%n data: %s%n", targetComponentName, playbackUUIDs));
32+
sb.append(String.format(" - uuidsFor: %s%n data: %s%n", targetComponentName, playbackUUIDs));
2933
}
3034
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package restx.specs;
2+
3+
import com.google.common.collect.ImmutableList;
4+
import restx.common.UUIDGenerator;
5+
import restx.common.UUIDGenerators;
6+
import restx.factory.*;
7+
8+
import java.util.*;
9+
10+
/**
11+
* @author fcamblor
12+
*/
13+
@Component
14+
public class GivenUUIDGeneratorRecorder implements RestxSpecRecorder.GivenRecorder {
15+
Map<String, UUIDGenerators.OverridenMachineCleaner> namedUUIDGeneratorsCleaners = new HashMap<>();
16+
17+
@Override
18+
public void installRecording() {
19+
Set<NamedComponent<UUIDGenerator>> namedGenerators = UUIDGenerators.currentUUIDGenerators();
20+
for(NamedComponent<UUIDGenerator> namedGenerator : namedGenerators){
21+
namedUUIDGeneratorsCleaners.put(namedGenerator.getName().getName(), UUIDGenerators.overrideUUIDGenerator(
22+
NamedComponent.of(UUIDGenerator.class, namedGenerator.getName().getName(), new UUIDGenerator.RecordingUUIDGenerator())
23+
));
24+
}
25+
}
26+
27+
@Override
28+
public AutoCloseable recordIn(final Map<String, RestxSpec.Given> givens) {
29+
final Set<NamedComponent<UUIDGenerator.RecordingUUIDGenerator>> recordingUUIDGenerators = recordingUUIDGenerators();
30+
31+
for(final NamedComponent<UUIDGenerator.RecordingUUIDGenerator> namedRecordingUUIDGenerator : recordingUUIDGenerators){
32+
namedRecordingUUIDGenerator.getComponent().attachThreadedObserver(new UUIDGenerator.RecordingUUIDGenerator.UUIDGeneratedObserver() {
33+
public void uuidGenerated(String uuid) {
34+
String key = GivenUUIDGenerator.class.getSimpleName() + "/uuidsFor"+namedRecordingUUIDGenerator.getName().getName();
35+
if (!givens.containsKey(key)) {
36+
givens.put(key, new GivenUUIDGenerator(namedRecordingUUIDGenerator.getName().getName(), Collections.<String>emptyList()));
37+
}
38+
givens.put(key, ((GivenUUIDGenerator)givens.get(key)).withAddedUUID(uuid));
39+
}
40+
});
41+
}
42+
43+
return new AutoCloseable() {
44+
@Override
45+
public void close() throws Exception {
46+
for(NamedComponent<UUIDGenerator.RecordingUUIDGenerator> namedRecordingUUIDGenerator : recordingUUIDGenerators){
47+
// Removing attached observers
48+
namedRecordingUUIDGenerator.getComponent().detachThreadedObservers();
49+
50+
// No need to clean uuid generators machine because installRecording() will not be called
51+
// again before the next recordIn() call..
52+
}
53+
}
54+
};
55+
}
56+
57+
private Set<NamedComponent<UUIDGenerator.RecordingUUIDGenerator>> recordingUUIDGenerators(){
58+
Set<NamedComponent<UUIDGenerator.RecordingUUIDGenerator>> recordingUUIDGenerators = new HashSet<>();
59+
for(Map.Entry<String,UUIDGenerators.OverridenMachineCleaner> namedUUIDGeneratorCleanerByName : namedUUIDGeneratorsCleaners.entrySet()){
60+
UUIDGenerator currentGenerator = UUIDGenerators.currentGeneratorFor(namedUUIDGeneratorCleanerByName.getKey());
61+
if(currentGenerator instanceof UUIDGenerator.RecordingUUIDGenerator){
62+
recordingUUIDGenerators.add(NamedComponent.of(UUIDGenerator.RecordingUUIDGenerator.class, namedUUIDGeneratorCleanerByName.getKey(), (UUIDGenerator.RecordingUUIDGenerator) currentGenerator));
63+
}
64+
}
65+
return recordingUUIDGenerators;
66+
}
67+
}

0 commit comments

Comments
 (0)