diff --git a/pom.xml b/pom.xml
index fc5d40e..0ad0f40 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,6 +9,7 @@
pom
+ quarkus-clock-service
quarkus-random-generator
@@ -59,11 +60,32 @@
io.quarkus
quarkus-arc
+
+ org.assertj
+ assertj-core
+ ${assertj-core.version}
+ test
+
io.quarkus
quarkus-junit5
test
+
+ io.quarkus
+ quarkus-junit5-mockito
+ test
+
+
+ io.quarkus
+ quarkus-jacoco
+ test
+
+
+ org.mockito
+ mockito-junit-jupiter
+ test
+
diff --git a/quarkus-clock-service/pom.xml b/quarkus-clock-service/pom.xml
new file mode 100644
index 0000000..0eee794
--- /dev/null
+++ b/quarkus-clock-service/pom.xml
@@ -0,0 +1,16 @@
+
+
+ 4.0.0
+
+
+ ch.phoenixtechnologies.quarkus
+ quarkus-commons
+ 0.1.0-SNAPSHOT
+
+
+ quarkus-clock-service
+ jar
+
+
diff --git a/quarkus-clock-service/src/main/java/ch/phoenixtechnologies/quarkus/commons/clock/ClockProducer.java b/quarkus-clock-service/src/main/java/ch/phoenixtechnologies/quarkus/commons/clock/ClockProducer.java
new file mode 100644
index 0000000..97d95fc
--- /dev/null
+++ b/quarkus-clock-service/src/main/java/ch/phoenixtechnologies/quarkus/commons/clock/ClockProducer.java
@@ -0,0 +1,18 @@
+package ch.phoenixtechnologies.quarkus.commons.clock;
+
+import io.quarkus.arc.DefaultBean;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.inject.Produces;
+
+import java.time.Clock;
+
+class ClockProducer {
+
+ @Produces
+ @DefaultBean
+ @ApplicationScoped
+ Clock produceClock() {
+ return Clock.systemDefaultZone();
+ }
+
+}
diff --git a/quarkus-clock-service/src/main/java/ch/phoenixtechnologies/quarkus/commons/clock/ClockService.java b/quarkus-clock-service/src/main/java/ch/phoenixtechnologies/quarkus/commons/clock/ClockService.java
new file mode 100644
index 0000000..5954727
--- /dev/null
+++ b/quarkus-clock-service/src/main/java/ch/phoenixtechnologies/quarkus/commons/clock/ClockService.java
@@ -0,0 +1,10 @@
+package ch.phoenixtechnologies.quarkus.commons.clock;
+
+import java.time.Instant;
+
+public interface ClockService {
+
+ Instant instant();
+
+ long currentTimeMillis();
+}
diff --git a/quarkus-clock-service/src/main/java/ch/phoenixtechnologies/quarkus/commons/clock/ClockServiceImpl.java b/quarkus-clock-service/src/main/java/ch/phoenixtechnologies/quarkus/commons/clock/ClockServiceImpl.java
new file mode 100644
index 0000000..bfe34be
--- /dev/null
+++ b/quarkus-clock-service/src/main/java/ch/phoenixtechnologies/quarkus/commons/clock/ClockServiceImpl.java
@@ -0,0 +1,28 @@
+package ch.phoenixtechnologies.quarkus.commons.clock;
+
+import io.quarkus.arc.DefaultBean;
+import jakarta.enterprise.context.ApplicationScoped;
+
+import java.time.Clock;
+import java.time.Instant;
+
+@DefaultBean
+@ApplicationScoped
+class ClockServiceImpl implements ClockService {
+
+ private final Clock clock;
+
+ ClockServiceImpl(Clock clock) {
+ this.clock = clock;
+ }
+
+ @Override
+ public Instant instant() {
+ return clock.instant();
+ }
+
+ @Override
+ public long currentTimeMillis() {
+ return clock.millis();
+ }
+}
diff --git a/quarkus-clock-service/src/test/java/ch/phoenixtechnologies/quarkus/commons/clock/ClockProducerTest.java b/quarkus-clock-service/src/test/java/ch/phoenixtechnologies/quarkus/commons/clock/ClockProducerTest.java
new file mode 100644
index 0000000..3735ff0
--- /dev/null
+++ b/quarkus-clock-service/src/test/java/ch/phoenixtechnologies/quarkus/commons/clock/ClockProducerTest.java
@@ -0,0 +1,24 @@
+package ch.phoenixtechnologies.quarkus.commons.clock;
+
+import io.quarkus.test.junit.QuarkusTest;
+import jakarta.inject.Inject;
+import org.junit.jupiter.api.Test;
+
+import java.time.Clock;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.*;
+
+@QuarkusTest
+class ClockProducerTest {
+
+ @Inject
+ Clock clock;
+
+ @Test
+ void produceClock() {
+ assertThat(clock.getZone())
+ .as("Produced clock's zone should match expected value")
+ .isEqualTo(Clock.systemDefaultZone().getZone());
+ }
+}
\ No newline at end of file
diff --git a/quarkus-clock-service/src/test/java/ch/phoenixtechnologies/quarkus/commons/clock/ClockServiceImplTest.java b/quarkus-clock-service/src/test/java/ch/phoenixtechnologies/quarkus/commons/clock/ClockServiceImplTest.java
new file mode 100644
index 0000000..b7c0ff6
--- /dev/null
+++ b/quarkus-clock-service/src/test/java/ch/phoenixtechnologies/quarkus/commons/clock/ClockServiceImplTest.java
@@ -0,0 +1,43 @@
+package ch.phoenixtechnologies.quarkus.commons.clock;
+
+import io.quarkus.test.InjectMock;
+import io.quarkus.test.junit.QuarkusTest;
+import io.quarkus.test.junit.mockito.InjectSpy;
+import jakarta.inject.Inject;
+import org.junit.jupiter.api.Test;
+
+import java.time.Clock;
+import java.time.Instant;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.when;
+
+@QuarkusTest
+class ClockServiceImplTest {
+
+ @Inject
+ ClockService clockService;
+
+ @InjectMock
+ Clock clock;
+
+ @Test
+ void instant() {
+ var expected = Instant.ofEpochMilli(1729280640915L);
+ when(clock.instant()).thenReturn(expected);
+
+ assertThat(clockService.instant())
+ .as("Instant should match expected value")
+ .isEqualTo(expected);
+ }
+
+ @Test
+ void currentTimeMillis() {
+ var expected = 1729280640915L;
+ when(clock.millis()).thenReturn(expected);
+
+ assertThat(clockService.currentTimeMillis())
+ .as("Instant should match expected value")
+ .isEqualTo(expected);
+ }
+}
\ No newline at end of file
diff --git a/quarkus-random-generator/pom.xml b/quarkus-random-generator/pom.xml
index 5f75438..6313df2 100644
--- a/quarkus-random-generator/pom.xml
+++ b/quarkus-random-generator/pom.xml
@@ -20,31 +20,6 @@
java-uuid-generator
${java-uuid-generator.version}
-
- org.assertj
- assertj-core
- ${assertj-core.version}
-
-
- io.quarkus
- quarkus-junit5-component
- test
-
-
- io.quarkus
- quarkus-junit5-mockito
- test
-
-
- io.quarkus
- quarkus-jacoco
- test
-
-
- org.mockito
- mockito-junit-jupiter
- test
-
diff --git a/quarkus-random-generator/src/test/java/ch/phoenixtechnologies/quarkus/commons/random/RandomNumberGeneratorImplTest.java b/quarkus-random-generator/src/test/java/ch/phoenixtechnologies/quarkus/commons/random/RandomNumberGeneratorImplTest.java
index 8c09a7a..1069a60 100644
--- a/quarkus-random-generator/src/test/java/ch/phoenixtechnologies/quarkus/commons/random/RandomNumberGeneratorImplTest.java
+++ b/quarkus-random-generator/src/test/java/ch/phoenixtechnologies/quarkus/commons/random/RandomNumberGeneratorImplTest.java
@@ -1,6 +1,5 @@
package ch.phoenixtechnologies.quarkus.commons.random;
-import io.quarkus.test.component.QuarkusComponentTest;
import io.quarkus.test.junit.QuarkusTest;
import io.quarkus.test.junit.mockito.InjectSpy;
import jakarta.inject.Inject;