package de.juplo.kafka.wordcount.query;
-import com.fasterxml.jackson.databind.ObjectMapper;
import de.juplo.kafka.wordcount.top10.TestRanking;
import de.juplo.kafka.wordcount.users.TestUserData;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.kafka.support.serializer.JsonSerializer;
+import java.util.Map;
+
import static de.juplo.kafka.wordcount.query.QueryApplicationConfiguration.serializationConfig;
Topology topology = QueryStreamProcessor.buildTopology(
USERS_IN,
TOP10_IN,
- Stores.inMemoryKeyValueStore(STORE_NAME),
- new ObjectMapper());
+ Stores.inMemoryKeyValueStore(STORE_NAME));
testDriver = new TopologyTestDriver(topology, serializationConfig());
top10In = testDriver.createInputTopic(
TOP10_IN,
new StringSerializer(),
- new JsonSerializer());
+ jsonSerializer(TestRanking.class));
userIn = testDriver.createInputTopic(
USERS_IN,
new StringSerializer(),
- new JsonSerializer());
+ jsonSerializer(TestUserData.class));
}
.getTop10Messages()
.forEach(kv -> top10In.pipeInput(kv.key, kv.value));
- KeyValueStore<String, String> store = testDriver.getKeyValueStore(STORE_NAME);
- TestData.assertExpectedState(store);
+ KeyValueStore<String, UserRanking> store = testDriver.getKeyValueStore(STORE_NAME);
+ TestData.assertExpectedState(user -> store.get(user));
}
@AfterEach
{
testDriver.close();
}
+
+ private <T> JsonSerializer<T> jsonSerializer(Class<T> type)
+ {
+ JsonSerializer<T> jsonSerializer = new JsonSerializer<>();
+ jsonSerializer.configure(
+ Map.of(
+ JsonSerializer.TYPE_MAPPINGS,
+ "userdata:" + TestUserData.class.getName() + "," +
+ "ranking:" + TestRanking.class.getName()),
+ false);
+ return jsonSerializer;
+ }
}