diff --git a/testing/pom.xml b/testing/pom.xml
index 71d6d78..7d467a4 100644
--- a/testing/pom.xml
+++ b/testing/pom.xml
@@ -43,6 +43,10 @@
org.flywaydb
flyway-database-postgresql
+
+ com.google.testing.compile
+ compile-testing
+
diff --git a/testing/src/main/java/at/test/drm/DogEntity.java b/testing/src/main/java/at/test/drm/DogEntity.java
index dad00cc..671d403 100644
--- a/testing/src/main/java/at/test/drm/DogEntity.java
+++ b/testing/src/main/java/at/test/drm/DogEntity.java
@@ -2,13 +2,9 @@
import at.drm.annotation.Relation;
import at.drm.model.RelationIdentity;
+import jakarta.persistence.*;
import lombok.Data;
-import jakarta.persistence.Entity;
-import jakarta.persistence.GeneratedValue;
-import jakarta.persistence.GenerationType;
-import jakarta.persistence.Id;
-
@Relation
@Entity
@Data
@@ -16,5 +12,6 @@ public class DogEntity implements RelationIdentity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(unique = true, nullable = false)
private Long id;
}
diff --git a/testing/src/test/java/at/test/drm/RelationProcessorTest.java b/testing/src/test/java/at/test/drm/RelationProcessorTest.java
new file mode 100644
index 0000000..bc2703f
--- /dev/null
+++ b/testing/src/test/java/at/test/drm/RelationProcessorTest.java
@@ -0,0 +1,83 @@
+package at.test.drm;
+
+import com.google.testing.compile.Compilation;
+import com.google.testing.compile.CompilationSubject;
+import com.google.testing.compile.Compiler;
+import com.google.testing.compile.JavaFileObjects;
+import org.junit.jupiter.api.Test;
+
+import javax.tools.JavaFileObject;
+
+import static com.google.common.truth.Truth.assertThat;
+
+class RelationProcessorTest {
+
+ @Test
+ void shouldGenerateCodeForRelationAnnotation() {
+
+ // 1. Fake input class
+ JavaFileObject source = JavaFileObjects.forSourceString(
+ "test.User",
+ """
+ package test;
+
+ import at.drm.annotation.Relation;
+
+ @Relation
+ public class User {
+ }
+ """
+ );
+
+ // 2. Run processor
+ Compilation compilation = Compiler.javac()
+ .withProcessors(new at.drm.processor.RelationProcessor())
+ .compile(source);
+
+ // 3. Assert compilation success
+ assertThat(compilation.status())
+ .isEqualTo(Compilation.Status.SUCCESS);
+
+ // 4. Assert something was generated
+ assertThat(compilation.generatedSourceFiles())
+ .isNotEmpty();
+
+ // 5. Get generated file content
+ String generated = String.valueOf(CompilationSubject.assertThat(compilation)
+ .generatedSourceFile("test.UserRelation")
+ .contentsAsUtf8String());
+
+ // 6. Strong assertions
+ assertThat(generated).contains("package test;");
+ assertThat(generated).contains("class UserRelation");
+ }
+
+
+ @Test
+ void shouldNotGenerateWhenAnnotationMissing() {
+
+ // 1. Input WITHOUT @Relation
+ JavaFileObject source = JavaFileObjects.forSourceString(
+ "test.User",
+ """
+ package test;
+
+ public class User {
+ }
+ """
+ );
+
+ // 2. Run processor
+ Compilation compilation = Compiler.javac()
+ .withProcessors(new at.drm.processor.RelationProcessor())
+ .compile(source);
+
+ // 3. Should still compile successfully
+ assertThat(compilation.status())
+ .isEqualTo(Compilation.Status.SUCCESS);
+
+ // 4. But should NOT generate any files
+ assertThat(compilation.generatedSourceFiles())
+ .isEmpty();
+ }
+}
\ No newline at end of file