DatabaseEloquentStrictMorphsTest.php 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <?php
  2. namespace Illuminate\Tests\Database;
  3. use Illuminate\Database\ClassMorphViolationException;
  4. use Illuminate\Database\Eloquent\Model;
  5. use Illuminate\Database\Eloquent\Relations\Relation;
  6. use PHPUnit\Framework\TestCase;
  7. class DatabaseEloquentStrictMorphsTest extends TestCase
  8. {
  9. protected function setUp(): void
  10. {
  11. parent::setUp();
  12. Relation::requireMorphMap();
  13. }
  14. public function testStrictModeThrowsAnExceptionOnClassMap()
  15. {
  16. $this->expectException(ClassMorphViolationException::class);
  17. $model = TestModel::make();
  18. $model->getMorphClass();
  19. }
  20. public function testStrictModeDoesNotThrowExceptionWhenMorphMap()
  21. {
  22. $model = TestModel::make();
  23. Relation::morphMap([
  24. 'test' => TestModel::class,
  25. ]);
  26. $morphName = $model->getMorphClass();
  27. $this->assertEquals('test', $morphName);
  28. }
  29. public function testMapsCanBeEnforcedInOneMethod()
  30. {
  31. $model = TestModel::make();
  32. Relation::requireMorphMap(false);
  33. Relation::enforceMorphMap([
  34. 'test' => TestModel::class,
  35. ]);
  36. $morphName = $model->getMorphClass();
  37. $this->assertEquals('test', $morphName);
  38. }
  39. protected function tearDown(): void
  40. {
  41. parent::tearDown();
  42. Relation::morphMap([], false);
  43. Relation::requireMorphMap(false);
  44. }
  45. }
  46. class TestModel extends Model
  47. {
  48. }