Skip to main content

Platform Developer I Certification Maintenance (Winter '23)

 Maintain Your Platform Developer I Certification for Winter ’23

1. Field update actions have changed in API Version 54.0. Which record-triggered flows do field update actions now execute?
Answer: Before-Save after After-Save

2. Which Apex class is used to determine the hostnames for the domains that Salesforce hosts for your org?
Answer: System.DomainCreator

3. Which modules can be used for notifications in a Lightning web component instead of native APIs?
Answer: LightningAlert, LightningConfirm, and LightningPrompt

4. What determines an org’s “shape” in Salesforce?
Answer: Features, settings, edition, limits, and licenses

5. Which lightning-modal-* component is required to create a modal?
Answer: Body

6. How do you call an invocable action from Apex code?
Answer: Reference Invocable.Action


Get Hands-On With Apex Assertions

1. Create Two Apex class: Copy and Paste below codes

(A.) TestFactory
@isTest
public class TestFactory {
   public static Account getAccount(String accountName, Boolean doInsert) {
       Account account = new Account(Name = accountName);
       if (doInsert) {
           insert account;
       }
       return account;
   }
   public static Contact getContact(Id accountId, String firstName, String lastName, Boolean doInsert){
       Contact contact = new Contact(
           FirstName = firstName,
           LastName = lastName,
           AccountId = accountId
       );
       if (doInsert) {
           insert contact;
       }
       return contact;
   }
   public static void generateAccountWithContacts(Integer numContacts) {
       Account account = getAccount('default account ltd', true);
       List<Contact> contacts = new List<Contact>();
       for (Integer i = 0; i < numContacts; i++) {
           String firstName = 'Contact';
           String lastName = 'Test' + i;
           contacts.add(getContact(account.Id, firstName, lastName, false));
       }
       insert contacts;
   }
   public static Opportunity[] generateOppsForAccount(ID accountId, Decimal amount, Integer numOpps){
       List<Opportunity> oppsForAccounts = new List<Opportunity>();
       for (Integer i = 0; i < numOpps; i++) {
           Opportunity opp = new Opportunity(
               Name = 'Account ' + i,
               AccountId = accountId,
               Amount = amount,
               CloseDate = Date.today().addDays(5),
               StageName = 'Prospecting'
           );
           oppsForAccounts.add(opp);
       }
       return oppsForAccounts;
   }
   public static User generateUser(String profileName) {
       UserRole userRole = new UserRole(
           DeveloperName = 'TestingTeam',
           Name = 'Testing Team'
       );
       insert userRole;
       String uniqueEmail = 'Cpt.Awesome' + DateTime.now().getTime() + '@th.example.com';
       User userForInsert = new User(
           ProfileId = [SELECT Id FROM Profile WHERE Name = :profileName].Id,
           LastName = 'lastName',
           Email = uniqueEmail,
           Username = uniqueEmail,
           CompanyName = 'Testing Co',
           Title = 'Captain',
           Alias = 'alias',
           TimeZoneSidKey = 'America/Los_Angeles',
           EmailEncodingKey = 'UTF-8',
           LanguageLocaleKey = 'en_US',
           LocaleSidKey = 'en_US',
           UserRoleId = userRole.Id
       );
       insert userForInsert;
       return userForInsert;
   }
}

(B) Class Name: DataGenerationTest

@isTest
private class DataGenerationTest {
  @testSetup
  static void dataCreation() {
      Account account = TestFactory.getAccount('Muddy Waters Inc.', true);
      Contact contact = TestFactory.getContact(account.Id, 'Muddy', 'Waters', true);
      Opportunity opp = New Opportunity();
      opp.Name = 'Long lost record';
      opp.AccountId = account.Id;
      opp.CloseDate = Date.today().addDays(14);
      opp.StageName = 'Prospecting';
      insert opp;
  }
  @isTest
  static void testBruteForceAccountCreation() {
      List<Account> accts = new List<Account>();
      Test.startTest();
          accts = [SELECT Id FROM Account];
      Test.stopTest();
      Assert.areNotEqual(accts.size(), 0,'Was expecting to find at least one account created on the Test Setup');
  }
  @isTest
  static void testUseTestFactoryToCreateAccountsWithContacts() {
      List<Account> accts;
      List<Contact> contacts;
      TestFactory.generateAccountWithContacts(5);
      Test.startTest();
          accts = [SELECT Id FROM Account];
          contacts = [SELECT Id FROM Contact];
      Test.stopTest();
      Assert.isNotNull(accts, 'Was expecting to find at least one account created');
      Assert.areEqual(contacts.size(), 6, 'Was expecting to find 6 contacts');
      Assert.areNotEqual(accts.size(), contacts.size(), 'Was expecting there to be a different number of account and contacts');
  }
  @isTest
  static void testAtTestSetupMethodsRule() {
      List<Opportunity> opps = [SELECT Id, AccountId FROM Opportunity];
      Assert.areEqual(1, opps.size(), 'Expected test to find a single Opp');
  }
}

Note: Challenge will not looking for Test class pass/fail.




Comments

Popular posts from this blog

Maintain Your Platform Developer I Certification for Winter ’25

  Make Invocable Actions Easier to Configure with New InvocableVariable Modifiers Simplify the configuration of invocable actions using new modifiers from Salesforce. Both the defaultValue and placeholderText modifiers will appear in Flow Builder for the Action elements that correspond to an invocable method. Here’s how to use them. defaultValue Modifier : Set a default value for an input parameter. When the action is used, the input parameter will have a predefined value unless changed by the user. placeholderText Modifier : Set custom placeholder text for an input parameter. Text can provide examples or additional guidance to help users understand what to enter in the input field. Accessing these modifiers in Flow Builder makes it easier to configure and use the actions within your flows. This change applies to Lightning Experience and Salesforce Classic in Performance, Unlimited, Developer, Enterprise, and Database.com editions.

Maintain Your Administrator Certification for Spring ’24

Maintain Your Administrator Certification for Spring ’24 Intelligence Views Intelligence views are now available for leads, contacts, and accounts in Sales Cloud. Turn on a view in Setup and then add the Intelligence View button to the view-button layout for the applicable page. New Salesforce organizations include the views by default, but admins for existing orgs can enable: Lead Intelligence View Contact Intelligence View Account Intelligence View Find specifics about these views in the next three topics. Turn on Contact Intelligence View in Contact Intelligence View Setup and add the Intelligence View button to the Contact List View button layout. To view engagement metrics, enable Email Tracking in the Inbox section of Sales Engagement Setup. To see the Intelligence View, users go to the Contact home page and click Intelligence View. To view engagement metrics, choose Engagement Metrics from the Metrics menu. To see the Account Intelligence view, go to the account home page and cl...

Maintain Your Administrator Certification for Spring ’25

  Manage Included Permission Sets in Permission Set Groups via Summaries Update user access more efficiently by specifying which permission set groups include a permission set directly from the permission set’s summary. Previously, to manage included permission sets, you were required to navigate to each permission set group’s page. From Setup, in the Quick Find box, enter  Permission Sets , and select Permission Sets. Select a permission set, and then click  View Summary . In the Related Permission Set Groups tab, click  Add  or  Remove . This change applies to Lightning Experience and Salesforce Classic (not available in all orgs) in Contact Manager, Group, Essentials, Professional, Enterprise, Performance, Unlimited, Developer, and Database.com editions. Sort List Views by Multiple Columns To see your data in a more intuitive way and make your list views more actionable, you can now sort list views on object home pages by up to five columns. Select the c...

Translate