diff --git a/src/classes/QueryBuilder.cls b/src/classes/QueryBuilder.cls index fe44271..fa165aa 100644 --- a/src/classes/QueryBuilder.cls +++ b/src/classes/QueryBuilder.cls @@ -30,6 +30,11 @@ */ public virtual inherited sharing class QueryBuilder { + private static Map stubRegistry; + static { + stubRegistry = new Map(); + } + public enum FilterScope { Delegated, Everything, @@ -1374,6 +1379,36 @@ public virtual inherited sharing class QueryBuilder { return this.setCheckFLS(true); } + /** + * Register named query to stub it from test method. + * + *

+ *

Example

+ *
+     * 
+     * //real class
+     * new QueryBuilder(Account.class)
+     *     .namedQueryRegister('unique_query_name')
+     *     .toString();
+     *
+     * 
+ * //test class + * new QueryBuilder(Account.class) + * .buildStub() + * .addStubToString('fake query string') + * .namedQueryStub('unique_query_name') + * .applyStub(); + *
+ *
+ * + * @param name + * + * @return + */ + public QueryBuilder namedQueryRegister(String name) { + return stubRegistry.containsKey(name) ? stubRegistry.get(name) : this; + } + /** * Returns an instance of StubbedQueryBuilder, which can be used in Unit Tests. * @@ -2444,6 +2479,37 @@ public virtual inherited sharing class QueryBuilder { return (QueryBuilder) this.parent; } + /** + * Stub registered named query. Use only in test methods. + * + *

+ *

Example

+ *
+         * 
+         * //real class
+         * new QueryBuilder(Account.class)
+         *     .namedQueryRegister('unique_query_name')
+         *     .toString();
+         *
+         * 
+ * //test class + * new QueryBuilder(Account.class) + * .buildStub() + * .addStubToString('fake query string') + * .namedQueryStub('unique_query_name') + * .applyStub(); + *
+ *
+ * + * @param queryName + * + * @return current instance of StubbedQueryBuilder + */ + public StubbedQueryBuilder namedQueryStub(String queryName) { + stubRegistry.put(queryName, this.stubbedQueryBuilder); + return this; + } + //stub building methods public StubbedQueryBuilder addStubToString(String queryString) { this.queryString = queryString; @@ -2512,8 +2578,10 @@ public virtual inherited sharing class QueryBuilder { } private Map stubToMap(Map mapToFill) { - mapToFill = this.toMapFillResult; - return this.toMapFillResult; + for (Id sobjId : this.toMapResult.keySet()) { + mapToFill.put(sobjId, this.toMapResult.get(sobjId)); + } + return mapToFill; } private SObject stubToSObject() {