Registro de FLS en 2GP
Creé un nuevo paquete 2GP. Dado que se lanzará a AppExchange, implementé una verificación genérica de CRUD y FLS para cada lugar con el que me comunico con la base de datos en mi código Apex.
p.ej
MyAwsomeObject.getDescribe().isUpdateable();
MyAwesomeField.getDescribe().isUpdateable();
Construyo una nueva versión de paquete con -cclave para la cobertura de prueba de Apex, pero las pruebas fallan debido a las verificaciones de permisos de FLS. Las comprobaciones CRUD pasan muy bien.
De la documentación, la compilación de 2GP es la siguiente:
- Se crea una nueva organización borrador inaccesible.
- Los metadatos se envían a la organización temporal.
- Las pruebas se ejecutan.
- Se ejecuta el script posterior a la instalación.
Entonces, no veo una forma de asignar permisos FLS al usuario en nombre de quién se están ejecutando las pruebas.
La creación de un paquete sin -co sin controles FLS funciona perfectamente.
¿Hay alguna manera de superar esta verificación de FLS, dar acceso a FLS al usuario que ejecuta o cualquier otra solución?
Respuestas
Entonces, en Apex Tests, puede usar la función RunAs para hacer esto; básicamente, cree un usuario en la prueba, asigne un perfil básico (el nuevo Acceso mínimo es útil para esto), y luego asigne el conjunto de permisos y ejecute el prueba, por ejemplo
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);
Pero, esto supone que está incluyendo el conjunto de permanente en el paquete. De lo contrario, probablemente tendrá que esperar a esta nueva función (o solicitar la prueba piloto) que le permitirá incluir metadatos no empaquetados en el proceso de creación del paquete cuando se construya la organización temporal.