From e7d6698c1178b3fa2fc396f8b3e90e156e9380ea Mon Sep 17 00:00:00 2001
From: Andreas Svanberg <andreass@dsv.su.se>
Date: Mon, 17 Feb 2025 15:52:54 +0100
Subject: [PATCH] Document how to add new test data populators

---
 .../dsv/scipro/testdata/TestDataConfiguration.java  |  2 ++
 .../se/su/dsv/scipro/testdata/package-info.java     |  8 ++++++++
 .../scipro/testdata/populators/package-info.java    | 13 +++++++++++++
 3 files changed, 23 insertions(+)
 create mode 100644 test-data/src/main/java/se/su/dsv/scipro/testdata/package-info.java
 create mode 100644 test-data/src/main/java/se/su/dsv/scipro/testdata/populators/package-info.java

diff --git a/test-data/src/main/java/se/su/dsv/scipro/testdata/TestDataConfiguration.java b/test-data/src/main/java/se/su/dsv/scipro/testdata/TestDataConfiguration.java
index f58b0eec77..ffd372628b 100644
--- a/test-data/src/main/java/se/su/dsv/scipro/testdata/TestDataConfiguration.java
+++ b/test-data/src/main/java/se/su/dsv/scipro/testdata/TestDataConfiguration.java
@@ -1,10 +1,12 @@
 package se.su.dsv.scipro.testdata;
 
 import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Configuration;
 import se.su.dsv.scipro.war.PluginConfiguration;
 
 @Configuration(proxyBeanMethods = false)
+@ComponentScan(basePackages = "se.su.dsv.scipro.testdata.populators")
 public class TestDataConfiguration implements PluginConfiguration {
 
     @Bean
diff --git a/test-data/src/main/java/se/su/dsv/scipro/testdata/package-info.java b/test-data/src/main/java/se/su/dsv/scipro/testdata/package-info.java
new file mode 100644
index 0000000000..6b93353f29
--- /dev/null
+++ b/test-data/src/main/java/se/su/dsv/scipro/testdata/package-info.java
@@ -0,0 +1,8 @@
+/**
+ * This package contains the infrastructure that is used when generating test data for the application. To add new test
+ * data to the system, add a new class to the {@link se.su.dsv.scipro.testdata.populators} package that implements the
+ * {@link se.su.dsv.scipro.testdata.TestDataPopulator} interface and annotate it with
+ * {@link org.springframework.stereotype.Service @Service}. Inject dependencies as needed using
+ * {@link jakarta.inject.Inject @Inject}.
+ */
+package se.su.dsv.scipro.testdata;
diff --git a/test-data/src/main/java/se/su/dsv/scipro/testdata/populators/package-info.java b/test-data/src/main/java/se/su/dsv/scipro/testdata/populators/package-info.java
new file mode 100644
index 0000000000..c9d116ca5a
--- /dev/null
+++ b/test-data/src/main/java/se/su/dsv/scipro/testdata/populators/package-info.java
@@ -0,0 +1,13 @@
+/**
+ * Contains classes that populate the database with test data.
+ * <p>
+ * Prefer to use methods on the various services to create data, rather than directly interacting with the database
+ * using an {@link jakarta.persistence.EntityManager}. This is to make sure all business rules are enforced and that
+ * any additional logic is executed such as sending notifications or calculating statistics.
+ *
+ * @see se.su.dsv.scipro.testdata how to add new populators
+ * @see se.su.dsv.scipro.testdata.TestDataPopulator
+ * @see se.su.dsv.scipro.testdata.BaseData
+ * @see se.su.dsv.scipro.testdata.Factory
+ */
+package se.su.dsv.scipro.testdata.populators;