TrimContextItemsStrategyTest.php 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <?php
  2. namespace Facade\FlareClient\Tests\Truncation;
  3. use Facade\FlareClient\Truncation\ReportTrimmer;
  4. use Facade\FlareClient\Truncation\TrimContextItemsStrategy;
  5. use Illuminate\Support\Str;
  6. use PHPUnit\Framework\TestCase;
  7. class TrimContextItemsStrategyTest extends TestCase
  8. {
  9. protected function setUp()
  10. {
  11. parent::setUp();
  12. ReportTrimmer::setMaxPayloadSize(52428);
  13. }
  14. /** @test */
  15. public function it_can_trim_long_context_items_in_payload()
  16. {
  17. foreach (TrimContextItemsStrategy::thresholds() as $threshold) {
  18. [$payload, $expected] = $this->createLargePayload($threshold);
  19. $strategy = new TrimContextItemsStrategy(new ReportTrimmer());
  20. $this->assertSame($expected, $strategy->execute($payload));
  21. }
  22. }
  23. /** @test */
  24. public function it_does_not_trim_short_payloads()
  25. {
  26. $payload = [
  27. 'context' => [
  28. 'queries' => [
  29. 1, 2, 3, 4,
  30. ],
  31. ],
  32. ];
  33. $strategy = new TrimContextItemsStrategy(new ReportTrimmer());
  34. $trimmedPayload = $strategy->execute($payload);
  35. $this->assertSame($payload, $trimmedPayload);
  36. }
  37. protected function createLargePayload($threshold)
  38. {
  39. $payload = $expected = [
  40. 'context' => [
  41. 'queries' => [],
  42. ],
  43. ];
  44. $contextKeys = [];
  45. while (strlen(json_encode($payload)) < ReportTrimmer::getMaxPayloadSize()) {
  46. $payloadItems = range(0, $threshold + 10);
  47. $contextKeys[] = $contextKey = Str::random();
  48. $payload['context'][$contextKey][] = $payloadItems;
  49. $expected['context'][$contextKey][] = array_slice($payloadItems, $threshold * -1, $threshold);
  50. }
  51. foreach ($contextKeys as $contextKey) {
  52. $expected['context'][$contextKey] = array_slice($expected['context'][$contextKey], $threshold * -1, $threshold);
  53. }
  54. return [$payload, $expected];
  55. }
  56. }