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
Imran Rahman 3Imran Rahman 3 

How to create test class for custom News Controller

I have created a custom extension which allows me to pull specified data into my visualforce news page.
In my extension I have mutliple queries which pull filtered data if used with url parameters and also have my own pagination built in.

How can I create a test class for the following:
public with sharing class force_NewsController {

    public String filteredEvents { get; set; }
 
    public force_NewsController (){
        CountTotalRecords= [SELECT COUNT() FROM News__c];

        // pagination filter
        String category = Apexpages.currentPage().getParameters().get('cat');
        if (category == 'product launches') {
            CountTotalRecords = [SELECT COUNT() FROM News__c WHERE Category__c = 'Product Launches'];
        } else if (category == 'events') {
            CountTotalRecords = [SELECT COUNT() FROM News__c WHERE Category__c = 'Events'];
        } else if (category == 'press releases') {
            CountTotalRecords = [SELECT COUNT() FROM News__c WHERE Category__c = 'Press Releases'];
        } else if (category == 'case studies') {
            CountTotalRecords = [SELECT COUNT() FROM News__c WHERE Category__c = 'Case Studies'];
        } else {
            CountTotalRecords = [SELECT COUNT() FROM News__c];
        }
    }
 
    public Integer CountTotalRecords{get;set;}
    public String QueryString {get;set;}
    public Integer OffsetSize = 0;
    private Integer QueryLimit = 6;
    public string excerpt;
    public list<News__c> lstItem {get;set;}
    public list<News__c> NewsList {get;set;}
    public list<News__c> EventList {get;set;}
    public map<id,string> newsmap{get;set;}

    public Boolean filteredEvents(){
        if(apexpages.currentpage().getparameters().get('cat') == 'events'){
            return true;
        }
        else return false;
    }
 

    public list<News__c> getNewsItems(){
        lstItem = new list<News__c>();

        String category = Apexpages.currentPage().getParameters().get('cat');
        String query = 'SELECT Id, Name, Title__C, Content__c, Publish_Date__c, Category__c, Event_Date_Start__c, Event_Date_End__c, Event_Location__c, ';
        query += '(Select Id, Name, LastModifiedDate From Attachments Order By LastModifiedDate DESC) ';
        query += 'FROM News__c ';

        if (category != null)
        {
            query += 'WHERE Category__c = :category ';
        }

        query += 'ORDER BY Publish_Date__c DESC, Name DESC LIMIT :QueryLimit OFFSET :OffsetSize';

        lstItem = Database.query(query);
        return lstItem;
    }

    public Boolean getDisablePrevious(){
        if(OffsetSize>0){
            return false;
        }
        else return true;
    }
 
    public Boolean getDisableNext() {
        if (OffsetSize + QueryLimit < countTotalRecords){
            return false;
        }
        else return true;
    }
 
    public PageReference Next() {
        OffsetSize += QueryLimit;
        return null;
    }
 
    public PageReference Previous() {
        OffsetSize -= QueryLimit;
        return null;
    }

    public list<News__c> getHomeNewsItems(){
        NewsList = new list<News__c>();

        String query = 'SELECT Id, Name, Title__C, Content__c, Publish_Date__c, Category__c, ';
        query += '(Select Id, Name, LastModifiedDate From Attachments Order By LastModifiedDate DESC) ';
        query += 'FROM News__c ';
        query += 'WHERE Category__c != \'Events\' ';
        query += 'ORDER BY Publish_Date__c DESC, Name DESC LIMIT 5';

        NewsList = Database.query(query);
        return NewsList;
    }

    public list<News__c> getUpcomingEvents(){
        EventList = new list<News__c>();

        String query = 'SELECT Id, Name, Title__C, Publish_Date__c, Event_Date_Start__c, Event_Date_End__c, Event_Location__c ';
        query += 'FROM News__c ';
        query += 'WHERE Category__c = \'Events\' ';
        query += 'ORDER BY Event_Date_Start__c ASC, Name DESC LIMIT 3';

        EventList = Database.query(query);
        return EventList;
    }

    public LIST<Service_Status__c> getServiceItems() {
        return [SELECT Id, Name, Information__c, Status_Colour__c FROM Service_Status__c ORDER BY Priority__c DESC];
    }

    public LIST<News__c> getAlerts() {
        date d = system.today().addDays(-8);
        return [SELECT Id, Name, Title__C, Publish_Date__c FROM News__c WHERE Flash_Message__c = TRUE AND Publish_Date__c > :d  ORDER BY Publish_Date__c DESC LIMIT 1];
    }

}


 
PratikPratik (Salesforce Developers) 

Hi Imran,

Please go through the link below, you will find guidelines regarding test class for maximum coverage:
https://www.salesforce.com/us/developer/docs/apexcode/Content/apex_testing_best_practices.htm

Thanks,
Pratik