129 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
			
		
		
	
	
			129 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
| <?php
 | |
| 
 | |
| namespace Tests\Lib;
 | |
| 
 | |
| use Illuminate\Support\Collection;
 | |
| use Illuminate\Testing\TestResponse;
 | |
| use PHPUnit\Framework\Assert as PHPUnit;
 | |
| 
 | |
| class InertiaMixin {
 | |
| 
 | |
|     public function assertInertia() {
 | |
|         return function($component, $props, $key = null) {
 | |
|             PHPUnit::assertEquals($component, $this->viewData('page')['component']);
 | |
| 
 | |
|             $this->assertInertiaHas($props, $key);
 | |
| 
 | |
|             return $this;
 | |
|         };
 | |
|     }
 | |
| 
 | |
|     public function assertInertiaComponent() {
 | |
|         return function($component) {
 | |
|             PHPUnit::assertEquals($component, $this->viewData('page')['component']);
 | |
| 
 | |
|             return $this;
 | |
|         };
 | |
|     }
 | |
| 
 | |
|     public function assertInertiaHasShared() {
 | |
|         return function($bindings, $key = null) {
 | |
|             $bindings = json_decode(json_encode($bindings), true);
 | |
| 
 | |
|             $viewData = json_decode(json_encode(
 | |
|                 data_get($this->viewData('page'), $key)
 | |
|             ), true);
 | |
| 
 | |
|             $this->assertDeepNest($bindings, $viewData);
 | |
|         };
 | |
|     }
 | |
| 
 | |
|     public function assertInertiaHas() {
 | |
|         return function($bindings, $key = null) {
 | |
|             $bindings = json_decode(json_encode($bindings), true);
 | |
| 
 | |
|             $viewData = json_decode(json_encode(
 | |
|                 data_get($this->viewData('page')['props'], $key)
 | |
|             ), true);
 | |
| 
 | |
|             $bindings = is_array($bindings) ? $bindings : [$bindings];
 | |
|             $viewData = is_array($viewData) ? $viewData : [$viewData];
 | |
| 
 | |
|             $this->assertDeepNest($bindings, $viewData);
 | |
|         };
 | |
|     }
 | |
| 
 | |
|     public function assertDeepNest() {
 | |
|         return function($should, $is) {
 | |
|             foreach ($should as $key => $value) {
 | |
|                 PHPUnit::assertArrayHasKey($key, $is);
 | |
| 
 | |
|                 if (is_array($value)) {
 | |
|                     $this->assertDeepNest($value, $is[$key]);
 | |
|                     continue;
 | |
|                 }
 | |
| 
 | |
|                 PHPUnit::assertSame($value, $is[$key]);
 | |
|             }
 | |
|         };
 | |
|     }
 | |
| 
 | |
|     public function assertInertiaHasItem() {
 | |
| 
 | |
|         return function($should, $nestedKey) {
 | |
|             $is = data_get($this->viewData('page')['props'], $nestedKey);
 | |
|             $is = collect(json_decode(json_encode($is), true));
 | |
| 
 | |
|             $should = collect(json_decode(json_encode($should), true));
 | |
| 
 | |
|             $has = $is->contains(function($isItem) use ($should) {
 | |
|                 return $this->isDeepEqual($should, Collection::wrap($isItem));
 | |
|             });
 | |
| 
 | |
|             PHPUnit::assertTrue($has, 'Failed asserting that inertia attribute '.$nestedKey.' has Data '.print_r($should, true));
 | |
| 
 | |
|             return $this;
 | |
|         };
 | |
|         
 | |
|     }
 | |
| 
 | |
|     public function inertia() {
 | |
|         return function($item) {
 | |
|             return data_get($this->viewData('page')['props'], $item);
 | |
|         };
 | |
|     }
 | |
| 
 | |
|     public function assertInertiaEquals() {
 | |
|         return function($should, $nestedKey) {
 | |
|             $is = data_get($this->viewData('page')['props'], $nestedKey);
 | |
| 
 | |
|             PHPUnit::assertSame($should, $is);
 | |
| 
 | |
|             return $this;
 | |
|         };
 | |
|     }
 | |
| 
 | |
|     public function ddp() {
 | |
|         return function ($value) {
 | |
|             dd(data_get($this->viewData('page'), $value));
 | |
|         };
 | |
|     }
 | |
| 
 | |
|     public function ddi() {
 | |
|         return function ($value) {
 | |
|             dd(data_get($this->viewData('page')['props'], $value));
 | |
|         };
 | |
|     }
 | |
| 
 | |
|     public function isDeepEqual() {
 | |
|         return function (Collection $subset, Collection $compare) {
 | |
|             $subset = $subset->filter(fn($item) => !is_array($item));
 | |
|             $compare = $compare->filter(fn($item) => !is_array($item));
 | |
| 
 | |
|             return $subset->diffAssoc($compare)->isEmpty();
 | |
|         };
 | |
|     }
 | |
| 
 | |
| }
 | |
| 
 |