Apexテスト内で生成するユーザに権限セットを割り当てる方法

By | July 5, 2021

使いどころ

System.runAsを用いたユーザコンテクストでの実行テストの一環として、特定の権限セットが割り当てられた状態での実行をテストする。

結論

runAsメソッドの前に下記のコードを入れ込む。

PermissionSet ps = [SELECT Id FROM PermissionSet WHERE Name = '権限セット名'];
insert new PermissionSetAssignment(AssigneeId =ユーザID, PermissionSetId = ps.Id);

サンプルコード

String uniqueUserName = 'standarduser' + DateTime.now().getTime() + '@testorg.com';
Profile p = [SELECT Id FROM Profile WHERE Name='プロファイル名'];
User u = new User(
Alias = 'standt', 
Email='standarduser@testorg.com',
EmailEncodingKey='UTF-8', 
LastName='Testing', 
LanguageLocaleKey='ja_JP',
LocaleSidKey='ja_JP',
ProfileId = p.Id,
TimeZoneSidKey='Asia/Tokyo',
UserName=uniqueUserName);

insert u;

PermissionSet ps = [SELECT Id FROM PermissionSet WHERE Name = '権限セット名'];
insert new PermissionSetAssignment(AssigneeId = u.Id, PermissionSetId = ps.Id);

System.runAs(u) {
 //具体的な処理
}