FLS check in 2GP
Eu criei um novo pacote 2GP. Como ele será lançado no AppExchange, implementei uma verificação CRUD e FLS genérica para cada lugar que entro em contato com o banco de dados em meu código Apex.
por exemplo
MyAwsomeObject.getDescribe().isUpdateable();
MyAwesomeField.getDescribe().isUpdateable();
Eu construo uma nova versão do pacote com -cchave para cobertura de teste do Apex, mas os testes falham devido às verificações de permissão FLS. As verificações CRUD passam bem.
A partir da documentação, a construção 2GP segue desta forma:
- Uma nova organização scratch inacessível é criada.
- Os metadados são enviados para a organização scratch.
- Testes executados.
- O script de pós-instalação é executado.
Portanto, não vejo uma maneira de atribuir permissões FLS ao usuário em nome de quem os testes estão executando.
Construir um pacote sem -cou sem cheques FLS funciona perfeitamente.
Existe uma maneira de superar essa verificação de FLS, conceder acesso de FLS ao usuário em execução ou qualquer outra solução?
Respostas
Portanto, nos testes do Apex, você pode usar o recurso RunAs para fazer isso - basicamente, criar um usuário no teste, atribuir um perfil básico (o novo acesso mínimo é útil para isso) e, em seguida, atribuir o conjunto de permissões e executar o teste por exemplo
Profile p = [SELECT Id FROM Profile WHERE Name = 'Minimum Access - Salesforce '];
User u = new User(Alias = 'standt', Email = '[email protected]',
EmailEncodingKey = 'UTF-8', LastName = 'Testing', LanguageLocaleKey = 'en_US', LocaleSidKey = 'en_US', ProfileId = p.Id,
TimeZoneSidKey = 'America/Los_Angeles', UserName = '[email protected]');
insert u;
PermissionSet ps = [SELECT Id FROM PermissionSet WHERE Name = 'My Permission Set'];
insert new PermissionSetAssignment(AssigneeId = u.id, PermissionSetId = ps.Id);
Mas - isso pressupõe que você está incluindo o Conjunto de Perm no pacote. Do contrário, você provavelmente precisará esperar por este novo recurso (ou aplicar ao piloto) que permitirá incluir metadados não empacotados no processo de criação do pacote quando ele construir a organização scratch.