diff --git a/test-data/src/main/java/se/su/dsv/scipro/testdata/BaseData.java b/test-data/src/main/java/se/su/dsv/scipro/testdata/BaseData.java
new file mode 100644
index 0000000000..1dd6b18132
--- /dev/null
+++ b/test-data/src/main/java/se/su/dsv/scipro/testdata/BaseData.java
@@ -0,0 +1,19 @@
+package se.su.dsv.scipro.testdata;
+
+import se.su.dsv.scipro.system.ProjectType;
+
+/// All the base test data that can be re-used in different test cases.
+///
+/// **Do not modify any of this data.** There are many
+/// [TestDataPopulator]s that rely on this data to be in a specific state.
+///
+/// In addition to the data that is available here there is also much additional
+/// data that has been created;
+///
+///   - A grading report template for each [ProjectType]
+///
+public interface BaseData {
+    ProjectType bachelor();
+    ProjectType magister();
+    ProjectType master();
+}
diff --git a/test-data/src/main/java/se/su/dsv/scipro/testdata/Factory.java b/test-data/src/main/java/se/su/dsv/scipro/testdata/Factory.java
new file mode 100644
index 0000000000..4a9ae43a77
--- /dev/null
+++ b/test-data/src/main/java/se/su/dsv/scipro/testdata/Factory.java
@@ -0,0 +1,12 @@
+package se.su.dsv.scipro.testdata;
+
+import se.su.dsv.scipro.system.User;
+
+/**
+ * A factory to help with repetitive tasks when populating test data.
+ */
+public interface Factory {
+    User createAuthor(String firstName);
+    User createSupervisor(String firstName);
+    User createReviewer(String firstName);
+}
diff --git a/test-data/src/main/java/se/su/dsv/scipro/testdata/TestDataPopulator.java b/test-data/src/main/java/se/su/dsv/scipro/testdata/TestDataPopulator.java
new file mode 100644
index 0000000000..41d250ac71
--- /dev/null
+++ b/test-data/src/main/java/se/su/dsv/scipro/testdata/TestDataPopulator.java
@@ -0,0 +1,11 @@
+package se.su.dsv.scipro.testdata;
+
+public interface TestDataPopulator {
+    /**
+     * Add test data to the system to help with testing a specific feature.
+     *
+     * @param baseData the base data already populated
+     * @param factory helper object to make repetitive tasks easier (such as creating users)
+     */
+    void populate(BaseData baseData, Factory factory);
+}