• Jude Kristian bautista
  • NEWBIE
  • 0 Points
  • Member since 2014

  • Chatter
    Feed
  • 0
    Best Answers
  • 0
    Likes Received
  • 0
    Likes Given
  • 5
    Questions
  • 0
    Replies
this is my test class and i'm not familiar in this error :

System.DmlException: Insert failed. First exception on row 0; first error: MIXED_DML_OPERATION, 
DML operation on setup object is not permitted after you have updated a non-setup object (or vice versa): 
User, original object: Account: []


My Test Class:
@isTest(seeAllData=true)
private class GHI_Portal_Login_Test {

    private static testMethod void testLogin() {
        RecordType rtContact = [SELECT Id FROM RecordType WHERE SObjectType='Contact' AND Name='Patient' LIMIT 1];
        Account acct = OSM_DataFactory.createAccount('test test');
        insert acct;
        Contact ctct = OSM_DataFactory.createContact('test','test',rtContact.Id);
        ctct.AccountId = acct.Id;
        insert ctct;
        
        
        User testUser = new User();
        testUser.Username= 'testUser11@company.com';
        testUser.Email = 'testuser1@company.com';
        testUser.Lastname = 'user';
        testUser.Firstname = 'test';
        testUser.Alias = 'test';
        testUser.CommunityNickname = '12346';
        List<Profile> prof = [select Id from Profile where Name = 'System Administrator' LIMIT 1];
        List<UserRole> role =  [select Id from UserRole where Name = 'finance'];
        testUser.UserRoleId = role[0].Id;
        testUser.ProfileId = prof[0].Id;
        insert testUser;
        
        User user = new User();
        user.Username= 'testUser1@company.com';
        user.Email = 'testuser1@company.com';
        user.Lastname = 'user';
        user.Firstname = 'test';
        user.Alias = 'test';
        user.CommunityNickname = '12346';
        List<Profile> prof1 = [select Id from Profile where Name = 'GHI Portal User' LIMIT 1];
        user.ProfileId = prof1[0].Id;
        user.ContactId = ctct.Id;
        
        System.debug ( JSON.serializePretty( testUser ) );
        
        
        
        PageReference pageRef = Page.GHI_Portal_Login;
        GHI_Portal_Login controller = new GHI_Portal_Login();
        Test.setCurrentPage(pageRef);
        
        Test.startTest();
        System.runAs(testUser) {
            insert user;
        }
        controller.username = 'testUser1@company.com';
        controller.password = '123456';
        controller.login();
        Test.stopTest();
    }

}
this is my test class and i'm not familiar in this error :

System.DmlException: Insert failed. First exception on row 0; first error: MIXED_DML_OPERATION, 
DML operation on setup object is not permitted after you have updated a non-setup object (or vice versa): 
User, original object: Account: []


My Test Class:
@isTest(seeAllData=true)
private class GHI_Portal_Login_Test {

    private static testMethod void testLogin() {
        RecordType rtContact = [SELECT Id FROM RecordType WHERE SObjectType='Contact' AND Name='Patient' LIMIT 1];
        Account acct = OSM_DataFactory.createAccount('test test');
        insert acct;
        Contact ctct = OSM_DataFactory.createContact('test','test',rtContact.Id);
        ctct.AccountId = acct.Id;
        insert ctct;
        
        
        User testUser = new User();
        testUser.Username= 'testUser11@company.com';
        testUser.Email = 'testuser1@company.com';
        testUser.Lastname = 'user';
        testUser.Firstname = 'test';
        testUser.Alias = 'test';
        testUser.CommunityNickname = '12346';
        List<Profile> prof = [select Id from Profile where Name = 'System Administrator' LIMIT 1];
        List<UserRole> role =  [select Id from UserRole where Name = 'finance'];
        testUser.UserRoleId = role[0].Id;
        testUser.ProfileId = prof[0].Id;
        insert testUser;
        
        User user = new User();
        user.Username= 'testUser1@company.com';
        user.Email = 'testuser1@company.com';
        user.Lastname = 'user';
        user.Firstname = 'test';
        user.Alias = 'test';
        user.CommunityNickname = '12346';
        List<Profile> prof1 = [select Id from Profile where Name = 'GHI Portal User' LIMIT 1];
        user.ProfileId = prof1[0].Id;
        user.ContactId = ctct.Id;
        
        System.debug ( JSON.serializePretty( testUser ) );
        
        
        
        PageReference pageRef = Page.GHI_Portal_Login;
        GHI_Portal_Login controller = new GHI_Portal_Login();
        Test.setCurrentPage(pageRef);
        
        Test.startTest();
        System.runAs(testUser) {
            insert user;
        }
        controller.username = 'testUser1@company.com';
        controller.password = '123456';
        controller.login();
        Test.stopTest();
    }

}
 
Can you help me how to test this controller :( plsss i need your help.

public with sharing class GHI_Portal_Login {
    
    public Boolean hasInputUsername { get; set; }
    public Boolean hasInputPassword { get; set; }
    private List<User> userLogin;
    public String username { get; set; }
    public String password { get; set; }
    public String loginMessage { get; set; }
    
    public GHI_Portal_Login(){
        this.hasInputUsername = true;
        this.hasInputPassword = true;
        
        String aMsg = ApexPages.currentPage().getParameters().get('A');
        aMsg = (aMsg != null && aMsg != '') ? aMsg : '';
        this.loginMessage = '';
        
        if (aMsg == '1') {
            this.loginMessage = 'Please log in.';
        } else if (aMsg == '2') {
            this.loginMessage = 'Your session has expired. Please log in.';
        }
    }
    
    public PageReference login() {
            // where startUrl is the landing page after logging in
            String startUrl = '/apex/GHI_Portal_Home';
            
            if (username.length() == 0) {
                this.hasInputUsername = false;
            } else {
                this.hasInputUsername = true;
            }
            
            if (password.length() == 0) {
                this.hasInputPassword = false;
            } else {
                this.hasInputPassword = true;
            }
            
            userLogin = new List<User>([SELECT Username, GHI_Portal_Number_of_Attempts__c FROM User WHERE Username = :username LIMIT 1]);
            PageReference prSiteLogin = Site.login(username, password, startUrl);
            
            if (userLogin.size() == 0) {
                this.loginMessage = 'Username is not valid';
            } else {
                if(userLogin[0].GHI_Portal_Number_of_Attempts__c < 4 || userLogin[0].GHI_Portal_Number_of_Attempts__c == null){
                    if (prSiteLogin == null && this.hasInputPassword) {
                        updateUserLoginAttempt();
                        Integer numberOfAttempts = 5 - Integer.valueOf(userLogin[0].GHI_Portal_Number_of_Attempts__c);
                        this.loginMessage = 'Login attempt unsuccessful. You have '+numberOfAttempts+' remaining.' ;
                    } 
                    else {
                        this.loginMessage = '';
                    }
                }
                else{
                    this.loginMessage = 'Account locked. To reset password select the Forgot Password link below. For additional assistance, contact Customer Service.';
                }
            }
            
            if(hasInputUsername && hasInputPassword){
                List <LoginHistory> loginHistory= [SELECT LoginTime,Status,UserId FROM LoginHistory where UserId=:userLogin[0].Id order by LoginTime DESC limit 1];
                    
                    if(loginHistory.size() > 0){
                        if(loginHistory[0].Status=='Success'){
                            userLogin[0].GHI_Portal_Number_of_Attempts__c = 0;
                            update userLogin;
                        }
                    }
                return prSiteLogin;
            }
            else{
                return ApexPages.currentPage();
            }
        }
        
        public void updateUserLoginAttempt() {
            
            if(userLogin.size()>0){
                if(userLogin[0].GHI_Portal_Number_of_Attempts__c!=null){
                    userLogin[0].GHI_Portal_Number_of_Attempts__c +=1;
                }
                else{
                    userLogin[0].GHI_Portal_Number_of_Attempts__c = 0;
                    userLogin[0].GHI_Portal_Number_of_Attempts__c +=1;
                }
                update userLogin;
            }
        }
        
        /* PAGE REDIRECTIONS */
    
    public PageReference goToHome() {
        PageReference pr = Page.GHI_Portal_Home;
        pr.setRedirect(true);
        
        return pr;
    }
    public PageReference goToPasswordResetStep1() {
        PageReference pr = Page.GHI_Portal_PasswordReset_Step1;
        pr.setRedirect(true);
        
        return pr;
    }
    
        public PageReference goToUserNameResetStep1() {
        PageReference pr = Page.GHI_Portal_ForgottenUserName_Step1 ;
        pr.setRedirect(true);
        
        return pr;
    }
}


 
Please Help!i want to display the order number and status of orders but the result is this : [User-added image]
my visualforce page:
<apex:page sidebar="false" controller="genomicsControllerorder">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
<title>Sweet tabbed navigation bar using CSS3</title>
<apex:stylesheet value="{!$Resource.header}"/>
</head>
<body>
<div id="wrapper">
    
    <div id="content">
        <div id="menu">
            <ul>
                <li><a href="https://c.ap0.visual.force.com/apex/genomicReplica" title="Home" >Home</a></li>
                <li><a href="https://c.ap0.visual.force.com/apex/genomicsReplica2" title="Order" class="active" >Order</a></li> 
                
            </ul>
        </div>
        <div id="main">
            <h3>Order</h3>
            <table border="0" >

       <tr>

           <th>OrderNumber</th>

           <th>Status </th>

       </tr>

       <apex:repeat var="orders" value="{!Order}">

       <tr>
        <td>{orders.OrderNumber}</td>
        <td>{orders.Status}</td>
       </tr>

       </apex:repeat>

   </table>
             </div>
    </div>
</div>
</body>
</html>
</apex:page>


Controller:
public class genomicsControllerorder {

    public String putOrder { get; set; }
    public  List<Order> getOrder() {
         List<Order> Order = new List<Order>([SELECT OrderNumber, Status 
                                                       FROM Order
                                                       WHERE Status = 'Draft'
                                                       ORDER BY EffectiveDate DESC]);
        
 
        return Order;
    }
}
i want to display the order number and status of orders but the result is this :User-added image
my visualforce page:
<apex:page sidebar="false" controller="genomicsControllerorder">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
<title>Sweet tabbed navigation bar using CSS3</title>
<apex:stylesheet value="{!$Resource.header}"/>
</head>
<body>
<div id="wrapper">
    
    <div id="content">
        <div id="menu">
            <ul>
                <li><a href="https://c.ap0.visual.force.com/apex/genomicReplica" title="Home" >Home</a></li>
                <li><a href="https://c.ap0.visual.force.com/apex/genomicsReplica2" title="Order" class="active" >Order</a></li> 
                
            </ul>
        </div>
        <div id="main">
            <h3>Order</h3>
            <table border="0" >

       <tr>

           <th>OrderNumber</th>

           <th>Status </th>

       </tr>

       <apex:repeat var="orders" value="{!Order}">

       <tr>
        <td>{orders.OrderNumber}</td>
        <td>{orders.Status}</td>
       </tr>

       </apex:repeat>

   </table>
             </div>
    </div>
</div>
</body>
</html>
</apex:page>


Controller:
public class genomicsControllerorder {

    public String putOrder { get; set; }
    public  List<Order> getOrder() {
         List<Order> Order = new List<Order>([SELECT OrderNumber, Status 
                                                       FROM Order
                                                       WHERE Status = 'Draft'
                                                       ORDER BY EffectiveDate DESC]);
        
 
        return Order;
    }
}