You need to sign in to do that
Don't have an account?
SS Karthick
Test code
Hi folks,
Can anyone give me the test code for My apex Trigger;
Trigger:
trigger Test_Share on Test__c (after insert) {
Id UserId=UserInfo.getUserId();
Boolean bln=false;
List<Id> ParentUserId = new List<Id>();
User u = new User();
while(bln == false){
u = [select id,ManagerId from user where id = :UserId];
if(u.ManagerId == null){
bln = true;
}
else{
ParentUserId.add(u.ManagerId);
UserId = u.ManagerId;
}
}
//ID groupId = [select id from Group where Type = 'Organization'].id;
Id parent;
if(trigger.isInsert){
List<Test__Share> testShare= new List<Test__Share>();
for(Test__c t : trigger.new){
parent=t.Id;
for(Integer j=0;j<ParentUserId.size();j++)
{
//string ob='ts'+coun;
Test__Share ob= new Test__Share();
ob.ParentId = parent;
ob.UserOrGroupId =ParentUserId[j];
system.debug('Id='+ParentUserId[j]);
ob.AccessLevel = 'edit';
ob.RowCause = Schema.Test__Share.RowCause.Test_Access__c;
testShare.add(ob);
//coun++;
}
}
if(!testShare.isEmpty())
insert testShare;
}
}
My test scenario :
If user1 creates record on test object then it is visible to all 49 users and If user50 creates record then it is visble to all user
Hierarchy is
user1-->user2-->user3-->.....user50
user1's manager is user2 and user2's manager is usr3 and etc
My test code is:
@isTest
private class TestUserCreate {
static testMethod void testShares() {
List<Test__c> deleteTestData= [select id from Test__c limit 50000];
if(deleteTestData.size()>0)
delete deleteTestData;
Set<ID> ids = new Set<ID>();
List<User> users = new List<User>();
List<User> updatedusers = new List<User>();
String pid = [Select id from Profile where Name='Test Reps'].Id;
for(integer i=1; i<=50; i++){
User tuser = new User( firstname = 'test',
lastName = 'Name'+i,
email = 'testname'+i+'@email.com',
Username = 'testname'+i+'@email.com',
EmailEncodingKey = 'ISO-8859-1',
Alias = 'test',
TimeZoneSidKey = 'America/Los_Angeles',
LocaleSidKey = 'en_US',
LanguageLocaleKey = 'en_US',
ProfileId = pid);
users.add(tuser);
}
insert users;
for(Integer i=0;i<users.size();i++){
if(i!=49){
users[i].ManagerId=users[i+1].Id;
}
}
update users;
for(user u:users){
System.debug('LastName='+u.LastName);
System.debug('UserId='+u.Id);
System.debug('UserManager Id='+u.ManagerId);
}
Test__c t=new Test__c();
t.Email__c='test@gmail.com';
t.Mobile__c='12345678';
t.OwnerId=users[0].id;
insert t;
system.debug('Test t='+t);
List<Test__Share> testsha = [select id from Test__Share where AccessLevel = 'edit' ];
System.debug('TestShares='+testsha.size());
System.assertEquals( testsha.size(),49);
}
}
The above test code covers only 62%
Please Help!
Can anyone give me the test code for My apex Trigger;
Trigger:
trigger Test_Share on Test__c (after insert) {
Id UserId=UserInfo.getUserId();
Boolean bln=false;
List<Id> ParentUserId = new List<Id>();
User u = new User();
while(bln == false){
u = [select id,ManagerId from user where id = :UserId];
if(u.ManagerId == null){
bln = true;
}
else{
ParentUserId.add(u.ManagerId);
UserId = u.ManagerId;
}
}
//ID groupId = [select id from Group where Type = 'Organization'].id;
Id parent;
if(trigger.isInsert){
List<Test__Share> testShare= new List<Test__Share>();
for(Test__c t : trigger.new){
parent=t.Id;
for(Integer j=0;j<ParentUserId.size();j++)
{
//string ob='ts'+coun;
Test__Share ob= new Test__Share();
ob.ParentId = parent;
ob.UserOrGroupId =ParentUserId[j];
system.debug('Id='+ParentUserId[j]);
ob.AccessLevel = 'edit';
ob.RowCause = Schema.Test__Share.RowCause.Test_Access__c;
testShare.add(ob);
//coun++;
}
}
if(!testShare.isEmpty())
insert testShare;
}
}
My test scenario :
If user1 creates record on test object then it is visible to all 49 users and If user50 creates record then it is visble to all user
Hierarchy is
user1-->user2-->user3-->.....user50
user1's manager is user2 and user2's manager is usr3 and etc
My test code is:
@isTest
private class TestUserCreate {
static testMethod void testShares() {
List<Test__c> deleteTestData= [select id from Test__c limit 50000];
if(deleteTestData.size()>0)
delete deleteTestData;
Set<ID> ids = new Set<ID>();
List<User> users = new List<User>();
List<User> updatedusers = new List<User>();
String pid = [Select id from Profile where Name='Test Reps'].Id;
for(integer i=1; i<=50; i++){
User tuser = new User( firstname = 'test',
lastName = 'Name'+i,
email = 'testname'+i+'@email.com',
Username = 'testname'+i+'@email.com',
EmailEncodingKey = 'ISO-8859-1',
Alias = 'test',
TimeZoneSidKey = 'America/Los_Angeles',
LocaleSidKey = 'en_US',
LanguageLocaleKey = 'en_US',
ProfileId = pid);
users.add(tuser);
}
insert users;
for(Integer i=0;i<users.size();i++){
if(i!=49){
users[i].ManagerId=users[i+1].Id;
}
}
update users;
for(user u:users){
System.debug('LastName='+u.LastName);
System.debug('UserId='+u.Id);
System.debug('UserManager Id='+u.ManagerId);
}
Test__c t=new Test__c();
t.Email__c='test@gmail.com';
t.Mobile__c='12345678';
t.OwnerId=users[0].id;
insert t;
system.debug('Test t='+t);
List<Test__Share> testsha = [select id from Test__Share where AccessLevel = 'edit' ];
System.debug('TestShares='+testsha.size());
System.assertEquals( testsha.size(),49);
}
}
The above test code covers only 62%
Please Help!
Remove the SOQL from within the loop. You should never do that coz of the governer limits.
All Answers
Remove the SOQL from within the loop. You should never do that coz of the governer limits.
I am afraid you will too many soql (101) error. As you have SOQL query being fired in for loop.
Thanks for your reply....
I know that it hits governor limit.. but i only create 50 user
Please Help!