function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
akashakash 

Help me to write apex handler and test class for this trigger

Create an Apex trigger for Opportunity that adds a task to any opportunity set to 'Closed Won'


trigger ClosedOpportunityTrigger on Opportunity(after insert, after update) {
List<Task> oppList = new List<Task>();
for (Opportunity a : [SELECT Id,StageName,(SELECT WhatId,Subject FROM Tasks) FROM Opportunity
WHERE Id IN :Trigger.New AND StageName LIKE '%Closed Won%']) {
oppList.add(new Task( WhatId=a.Id, Subject='Follow Up Test Task'));
}
if (oppList.size() > 0) {
insert oppList;
}
}
Mohit. LakdeMohit. Lakde

//before update and insert context
trigger ClosedOpportunityTrigger  on Opportunity (before insert, before update) {
    
    List<Task> taskList = new List<Task>();
    for(Opportunity opp : Trigger.New){
        if(opp.StageName  == 'Closed Won'){
            Task task = new Task(WhatId=opp.Id, Subject='Follow Up Test Task');
            taskList.add(task);
        }
    }
    if (taskList.size() > 0) {
        insert taskList;
    }
}
Akash,
Try this code, this should work. 
 
Sai PraveenSai Praveen (Salesforce Developers) 
Hi Akash,

Can you try the below test class. It gives 100% code coverage
@isTest
private class ClosedOpportunityTriggerTest {
    static testMethod void testTaskCreationOnOpportunityClosed() {
        Account acc = new Account();
        acc.Name = 'Test Account';
        insert acc;

        Opportunity opp = new Opportunity();
        opp.Name = 'Test Opportunity';
        opp.StageName = 'Prospecting';
        opp.AccountId = acc.Id;
        opp.CloseDate=system.today();
        insert opp;

        opp.StageName = 'Closed Won';
        update opp;

        List<Task> tasks = [SELECT Id, WhatId, Subject FROM Task WHERE WhatId = :opp.Id];

        System.assertEquals('Follow Up Test Task', tasks[0].Subject);
        System.assertEquals(opp.Id, tasks[0].WhatId);
    }
}

Let me know if you face any issues.

If this solution helps, Please mark it as best answer.

Thanks,
Sai PraveenSai Praveen (Salesforce Developers) 
Hi Akash,

As this seems to other question. Can you post it as new question so it avoids confusion.

Thanks,
 
Arun Kumar 1141Arun Kumar 1141
Hi Akash,

You can use this test class for this trigger.
 
@isTest
public class ClosedOpportunityTest{
    @isTest
    public static void closedOppFunctionTest(){
        Account acc = new Account();
        acc.Name = 'Test';
        insert acc;
        
        Opportunity opp = new Opportunity();
        opp.Name = 'Test Opp';
        opp.CloseDate = system.today();
        opp.AccountId = acc.Id;
        opp.StageName = 'Closed won';
        insert opp;
        
    }
}

Please mark it as best answer if it helps.

Thanks