Lawman est un plugin PestPHP pour SaloonPHP qui vous permet d'écrire facilement des tests d'architecture pour vos intégrations d'API en mettant l'accent sur leur facilité d'écriture et de lecture. Après tout, si SaloonPHP rend nos intégrations API belles, leurs tests devraient également l'être, n'est-ce pas ?
Lawman facilite grandement le test de vos intégrations d'API SaloonPHP, d'un point de vue architectural. Vous permettant de voir, d’un seul coup d’œil, ce que fait réellement un test. Lawman est un plugin pour PestPHP, ce qui signifie que vous pouvez utiliser Lawman Expectations et PestPHP Expectations ensemble, enchaînez simplement tout ce dont vous avez besoin pour vos tests !
Voyons comment Lawman peut faciliter la rédaction des tests.
Disons que nous avons une classe Connector que nous voulons tester, avec PestPHP nous pourrions faire ce qui suit :
test ( ' connector ' )
-> expect ( ' AppHttpIntegrationsIntegrationConnector ' )
-> toExtend ( ' SaloonHttpConnector ' )
-> toUse ( ' SaloonTraitsPluginsAcceptsJson ' )
-> toUse ( ' SaloonTraitsPluginsAlwaysThrowOnErrors ' );
Ce test garantit donc que notre classe étend le connecteur de base et utilise les traits AcceptJson
et AlwaysThrowOnErrors
. Bien que ce test fonctionne, nous pourrions peut-être le rendre plus rapide à écrire et plus facile à lire, donc avec Lawman, vous pouvez faire :
test ( ' connector ' )
-> expect ( ' AppHttpIntegrationsIntegrationConnector ' )
-> toBeSaloonConnector ()
-> toUseAcceptsJsonTrait ()
-> toUseAlwaysThrowOnErrorsTrait ();
Ensuite, faisons un test de requête que nous avons :
test ( ' request ' )
-> expect ( ' AppHttpIntegrationsIntegrationRequestsRequest ' )
-> toExtend ( ' SaloonHttpRequest ' )
-> toImplement ( ' SaloonContractsBodyHasBody ' )
-> toUse ( ' SaloonTraitsBodyHasFormBody ' )
-> toUse ( ' SaloonTraitsPluginsAcceptsJson ' );
Lawman rend ce test beaucoup plus agréable à lire :
test ( ' request ' )
-> expect ( ' AppHttpIntegrationsIntegrationRequestsRequest ' )
-> toBeSaloonRequest ()
-> toSendPostRequest ()
-> toHaveFormBody ()
-> toUseAcceptsJsonTrait ();
Et si nous voulons tester que notre connecteur dispose d'une méthode d'authentification ? Lawman rend cela facile à faire, il fonctionne même avec l'authentification multiple :
test ( ' connector ' )
-> expect ( ' AppHttpIntegrationsIntegrationConnector ' )
-> toBeSaloonConnector ()
-> toUseCertificateAuthentication ()
-> toUseTokenAuthentication ();
Lawman a également des attentes concernant les plugins de pagination, de cache et de limite de débit :
test ( ' request ' )
-> expect ( ' AppHttpIntegrationsIntegrationRequestsRequest ' )
-> toBeSaloonRequest ()
-> toSendPostRequest ()
-> toUsePagedPagination ()
-> toHaveCaching ()
-> toHaveRateLimits ()
Peut-être que notre connecteur contient des instructions de nouvelle tentative que nous souhaitons tester. Encore une fois, avec Lawman, c'est aussi simple que :
test ( ' connector ' )
-> expect ( ' AppHttpIntegrationsIntegrationConnector ' )
-> toBeSaloonConnector ()
-> toBeTriedAgainOnFailure ()
-> toHaveRetryInterval ()
-> toUseExponentialBackoff ()
Les contributions au package sont plus que bienvenues, donc si vous pensez à une attente que vous aimeriez voir, n'hésitez pas à soumettre une Pull Request ou à ouvrir un problème. Si vous soumettez une Pull Request, assurez-vous d'ajouter un nouveau luminaire et de tester vos attentes.