I have the case of an object having two lookup relationship and I call for a list containing both relationship as follows. This is my Setup code
public static List<Job_Application__c> createApplications(){
List<Job_Application__c> testApplications = new List<Job_Application__c>();
List<Position__c> testPositions3 = new List<Position__c>();
List<Candidate_Name__c> testCandidates = new List<Candidate_Name__c>();
for(Integer i=0; i<10; i++){
testPositions3.add(new Position__c(Name = 'Test'+ i, Status__c = 'Open - Approved'));
testCandidates.add(new Candidate_Name__c(First_Name__c ='Bob', Last_Name__c = 'Smith'+i));
}
insert testPositions3;
insert testCandidates;
for(Integer i=0; i<10; i++){
testApplications.add(new Job_Application__c(Candidate__c=testCandidates[i].Id,
Position__c=testPositions3[i].Id));
}
return testApplications;
}
public static List<Review__c> createReviews(){
List<Position__c> testPositions4 = new List<Position__c>();
List<Job_Application__c> testApplications2 = new List<Job_Application__c>();
List<Candidate_Name__c> testCandidates2 = new List<Candidate_Name__c>();
List<Review__c> testReviews = new List<Review__c>();
for(Integer i=0; i<10; i++){
testPositions4.add(new Position__c(Name = 'Test'+ i, Status__c = 'Open - Approved'));
testCandidates2.add(new Candidate_Name__c(First_Name__c ='Bob'+i, Last_Name__c = 'Smith'+i));
}
insert testPositions4;
insert testCandidates2;
for(Integer i=0; i<10; i++){
testApplications2.add(new Job_Application__c(Candidate__c=testCandidates2[i].Id,
Position__c=testPositions4[i].Id));
}
insert testApplications2;
for(Integer i=0; i<10; i++){
testReviews.add(new Review__c(Job_Review__c=testApplications2[i].Id,Rating__c = 1));
}
return testReviews;
}
So when I run my test I say I'm expecting 10 Job_Applications but it fails the test and says there is 20.
Is this because it is returning both Position__c and Candidate_Name__c individually from the list?
Or is there an error in my code I'm overlooking.
EDIT This is the Testing Code
@isTest
static void testGetPositionsAndApplicants(){
List<Job_Application__c> result = RecruitingHelper.getPositionsAndApplicants();
System.assertEquals(10,result.size());
and this is the actual query call
public static List<Job_Application__c> getPositionsAndApplicants(){
return [Select Position__c, Candidate__c FROM Job_Application__c];
}
EDIT2: So I figured out that the double size of Job_Application__c
happens when I run the Review__c
. Like mentioned earlier these two methods are part of my TestDataFactory.
EDIT3:
@isTest
public class RecruitingHelper_test {
@testSetup
static void setup(){
List<Position__c> testPositions = TestDataFactory.createPositions();
insert testPositions;
List<Job_Application__c> testApplications = TestDataFactory.createApplications();
insert testApplications;
List<Job_Posting__c> testJobPostings = TestDataFactory.createPostings();
insert testJobPostings;
List<Review__c> testReviews = TestDataFactory.createReviews();
insert testReviews;
}
}
This is the testsetup as requested. I can't find where the data is duplicating but I know for a fact it's somewhere when Review__c
data is created because I have commented everything out and when I comment that out the test works perfectly for Job_Application__c
.
Position__c
,Candidate_Name__c
, or maybe onJob_Application__c
) or declarative solution (like process builder) that could be throwing a wrench into your testing.getPositionsAndApplicants()
is indeed in theRecuritingHelper
class, your test method isn't doing any setup. Solving this problem requires seeing and understanding the entire path taken through your code. What's creating your data? What code calls your data factory? Do you have an@testSetup
annotated method?