diff --git a/README.md b/README.md
index 1359158..34ecde2 100644
--- a/README.md
+++ b/README.md
@@ -9,7 +9,7 @@
-
+
diff --git a/examples/main/default/classes/AccountTestModule.cls b/examples/main/default/classes/AccountTestModule.cls
index 5cf2488..ca357d4 100644
--- a/examples/main/default/classes/AccountTestModule.cls
+++ b/examples/main/default/classes/AccountTestModule.cls
@@ -44,7 +44,7 @@ public class AccountTestModule implements TestModule.BuilderProvider, TestModule
}
}
- private class Mocker extends TestModule.RecordMocker {
+ public class Mocker extends TestModule.RecordMocker {
private Mocker() {
super(new Account(Name = 'Test Account', Industry = 'Technology'));
}
diff --git a/examples/main/default/classes/AccountTestModule.cls-meta.xml b/examples/main/default/classes/AccountTestModule.cls-meta.xml
index 82775b9..b009296 100644
--- a/examples/main/default/classes/AccountTestModule.cls-meta.xml
+++ b/examples/main/default/classes/AccountTestModule.cls-meta.xml
@@ -1,5 +1,5 @@
- 65.0
+ 67.0
Active
diff --git a/examples/main/default/classes/ContactTestModule.cls b/examples/main/default/classes/ContactTestModule.cls
index 931c304..f42756c 100644
--- a/examples/main/default/classes/ContactTestModule.cls
+++ b/examples/main/default/classes/ContactTestModule.cls
@@ -44,7 +44,7 @@ public class ContactTestModule implements TestModule.BuilderProvider, TestModule
}
}
- private class Mocker extends TestModule.RecordMocker {
+ public class Mocker extends TestModule.RecordMocker {
private Mocker() {
super(new Contact(FirstName = 'Test', LastName = 'Contact', Email = 'test.contact@example.com'));
}
diff --git a/examples/main/default/classes/ContactTestModule.cls-meta.xml b/examples/main/default/classes/ContactTestModule.cls-meta.xml
index 82775b9..b009296 100644
--- a/examples/main/default/classes/ContactTestModule.cls-meta.xml
+++ b/examples/main/default/classes/ContactTestModule.cls-meta.xml
@@ -1,5 +1,5 @@
- 65.0
+ 67.0
Active
diff --git a/examples/main/default/classes/OpportunityTestModule.cls b/examples/main/default/classes/OpportunityTestModule.cls
index 2f41151..ac63a6a 100644
--- a/examples/main/default/classes/OpportunityTestModule.cls
+++ b/examples/main/default/classes/OpportunityTestModule.cls
@@ -49,7 +49,7 @@ public class OpportunityTestModule implements TestModule.BuilderProvider, TestMo
}
}
- private class Mocker extends TestModule.RecordMocker {
+ public class Mocker extends TestModule.RecordMocker {
private Mocker() {
super(new Opportunity(Name = 'Test Opportunity', StageName = 'Prospecting', CloseDate = Date.today().addDays(30)));
}
diff --git a/examples/main/default/classes/OpportunityTestModule.cls-meta.xml b/examples/main/default/classes/OpportunityTestModule.cls-meta.xml
index 82775b9..b009296 100644
--- a/examples/main/default/classes/OpportunityTestModule.cls-meta.xml
+++ b/examples/main/default/classes/OpportunityTestModule.cls-meta.xml
@@ -1,5 +1,5 @@
- 65.0
+ 67.0
Active
diff --git a/force-app/main/default/classes/TestModule.cls b/force-app/main/default/classes/TestModule.cls
index ff6f72e..6a7c703 100644
--- a/force-app/main/default/classes/TestModule.cls
+++ b/force-app/main/default/classes/TestModule.cls
@@ -2,7 +2,7 @@
* Copyright (c) 2026 Beyond The Cloud Sp. z o.o. (BeyondTheCloud.Dev)
* Licensed under the MIT License (https://github.com/beyond-the-cloud-dev/test-lib/blob/main/LICENSE)
*
- * v0.1.0
+ * v0.2.0
**/
@IsTest
@TestVisible
@@ -68,17 +68,23 @@ private class TestModule {
return new ListRandomizer(values);
}
+ private static void validateRecordsAmount(Integer amount) {
+ if (amount == null || amount < 0) {
+ throw new TestModuleException('Amount must be zero or greater, but was: ' + amount + '.');
+ }
+ }
+
public abstract class RecordBuilder implements Builder {
private SObject prototype;
private Template templates;
private RandomizersContainer randomizers = new RandomizersContainer();
public RecordBuilder(SObject prototype) {
- this.prototype = prototype;
+ this.prototype = prototype.clone(true, true, true, true);
}
public RecordBuilder(Template templates) {
- this.prototype = templates.defaultTemplate();
+ this(templates.defaultTemplate());
this.templates = templates;
}
@@ -126,17 +132,21 @@ private class TestModule {
}
public SObject build() {
- this.randomizers.randomizeFieldsValues(this.prototype, 0);
- return this.prototype;
+ SObject record = this.prototype.clone(true, true, true, true);
+ this.randomizers.randomizeFieldsValues(record, 0);
+ return record;
}
public SObject buildAndInsert() {
- insert as system this.prototype;
- return this.prototype;
+ SObject record = this.build();
+ insert as system record;
+ return record;
}
public List build(Integer amount) {
- List records = new List();
+ validateRecordsAmount(amount);
+
+ List records = (List) Type.forName('List<' + this.prototype.getSObjectType() + '>').newInstance();
this.randomizeFieldsValues(records, amount);
return records;
}
@@ -161,6 +171,7 @@ private class TestModule {
private Map> children = new Map>();
private Template templates;
private RandomizersContainer randomizers = new RandomizersContainer();
+ private Boolean withFakeId = false;
private SObjectType prototypeType;
@@ -184,12 +195,12 @@ private class TestModule {
}
public virtual RecordMocker setChildren(String relationship, List records) {
- this.children.put(relationship, records);
+ this.children.put(relationship, records.deepClone(true, true, true));
return this;
}
public virtual RecordMocker setFakeId() {
- this.fields.put('Id', TestModule.IdGenerator.get(this.prototypeType));
+ this.withFakeId = true;
return this;
}
@@ -213,7 +224,9 @@ private class TestModule {
}
public List build(Integer amount) {
- List records = new List();
+ validateRecordsAmount(amount);
+
+ List records = (List) Type.forName('List<' + this.prototypeType + '>').newInstance();
for (Integer i = 0; i < amount; i++) {
records.add(this.buildWithIndex(i));
}
@@ -224,6 +237,11 @@ private class TestModule {
Map record = new Map();
this.setNested(record);
+
+ if (this.withFakeId) {
+ record.put('Id', TestModule.IdGenerator.get(this.prototypeType));
+ }
+
this.setChildren(record);
this.randomizers.randomizeFieldsValues(record, index);
@@ -272,6 +290,10 @@ private class TestModule {
private List