<?php namespace Tests; use Illuminate\Support\Arr; use PHPUnit\Framework\Assert; use Illuminate\Foundation\Testing\TestResponse; use Illuminate\Foundation\Testing\TestCase as BaseTestCase; abstract class TestCase extends BaseTestCase { use CreatesApplication; protected function setUp(): void { parent::setUp(); TestResponse::macro('props', function ($key = null) { $props = json_decode(json_encode($this->original->getData()['page']['props']), JSON_OBJECT_AS_ARRAY); if ($key) { return Arr::get($props, $key); } return $props; }); TestResponse::macro('assertHasProp', function ($key) { Assert::assertTrue(Arr::has($this->props(), $key)); return $this; }); TestResponse::macro('assertPropValue', function ($key, $value) { $this->assertHasProp($key); if (is_callable($value)) { $value($this->props($key)); } else { Assert::assertEquals($this->props($key), $value); } return $this; }); TestResponse::macro('assertPropCount', function ($key, $count) { $this->assertHasProp($key); Assert::assertCount($count, $this->props($key)); return $this; }); } }