Source of file UpdateTest.php
Size: 5,270 Bytes - Last Modified: 2021-12-23T10:31:47+00:00
/var/www/docs.ssmods.com/process/src/tests/Scaffolding/Scaffolders/CRUD/UpdateTest.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 | <?php namespace SilverStripe\GraphQL\Tests\Scaffolding\Scaffolders\CRUD; use Exception; use GraphQL\Type\Definition\IDType; use GraphQL\Type\Definition\InputObjectType; use GraphQL\Type\Definition\IntType; use GraphQL\Type\Definition\NonNull; use GraphQL\Type\Definition\ObjectType; use GraphQL\Type\Definition\ResolveInfo; use GraphQL\Type\Definition\StringType; use SilverStripe\Dev\SapphireTest; use SilverStripe\GraphQL\Manager; use SilverStripe\GraphQL\Scaffolding\Scaffolders\CRUD\Update; use SilverStripe\GraphQL\Tests\Fake\DataObjectFake; use SilverStripe\GraphQL\Tests\Fake\FakeCRUDExtension; use SilverStripe\GraphQL\Tests\Fake\RestrictedDataObjectFake; use SilverStripe\Security\Member; class UpdateTest extends SapphireTest { protected static $extra_dataobjects = [ DataObjectFake::class, RestrictedDataObjectFake::class, ]; protected function setUp(): void { parent::setUp(); // Make sure we're only testing the native features foreach (Update::get_extensions() as $className) { Update::remove_extension($className); } } public function getExtensionDataProvider() { return [ [false], [true], ]; } /** * @dataProvider getExtensionDataProvider * * @param bool $shouldExtend */ public function testUpdateOperationResolver($shouldExtend) { if ($shouldExtend) { Update::add_extension(FakeCRUDExtension::class); } $update = new Update(DataObjectFake::class); $manager = new Manager(); $manager->addType(new ObjectType(['name' => 'SilverStripeDataObjectFake']), 'SilverStripeDataObjectFake'); $update->addToManager($manager); $scaffold = $update->scaffold($manager); $record = DataObjectFake::create([ 'MyField' => 'old', ]); $ID = $record->write(); $scaffold['resolve']( $record, [ 'Input' => [ 'ID' => $ID, 'MyField' => 'new' ], ], [ 'currentUser' => Member::create(), ], new ResolveInfo([]) ); /** @var DataObjectFake $updatedRecord */ $updatedRecord = DataObjectFake::get()->byID($ID); if ($shouldExtend) { $this->assertEquals('old', $updatedRecord->MyField); } else { $this->assertEquals('new', $updatedRecord->MyField); } } public function testUpdateOperationInputType() { $update = new Update(DataObjectFake::class); $update->addArg('MyField', 'String'); $manager = new Manager(); $manager->addType(new ObjectType(['name' => 'SilverStripeDataObjectFake']), 'SilverStripeDataObjectFake'); $update->addToManager($manager); $scaffold = $update->scaffold($manager); // Test args $args = $scaffold['args']; $this->assertEquals(['Input', 'MyField'], array_keys($args)); /** @var NonNull $inputType */ $inputType = $args['Input']['type']; $this->assertInstanceOf(NonNull::class, $inputType); /** @var InputObjectType $inputTypeWrapped */ $inputTypeWrapped = $inputType->getWrappedType(); $this->assertInstanceOf(InputObjectType::class, $inputTypeWrapped); $this->assertEquals('SilverStripeDataObjectFakeUpdateInputType', $inputTypeWrapped->toString()); // Custom field $this->assertInstanceOf(StringType::class, $args['MyField']['type']); // Test fields $config = $inputTypeWrapped->config; $fieldMap = []; foreach ($config['fields']() as $name => $fieldData) { $fieldMap[$name] = $fieldData['type']; } $this->assertArrayHasKey('Created', $fieldMap, 'Includes fixed_fields'); $this->assertArrayHasKey('MyField', $fieldMap); $this->assertArrayHasKey('MyInt', $fieldMap); $this->assertArrayHasKey('ID', $fieldMap); $this->assertInstanceOf(NonNull::class, $fieldMap['ID']); $this->assertInstanceOf(IDType::class, $fieldMap['ID']->getWrappedType()); $this->assertInstanceOf(StringType::class, $fieldMap['MyField']); $this->assertInstanceOf(IntType::class, $fieldMap['MyInt']); } public function testUpdateOperationPermissionCheck() { $update = new Update(RestrictedDataObjectFake::class); $restrictedDataobject = RestrictedDataObjectFake::create(); $ID = $restrictedDataobject->write(); $manager = new Manager(); $manager->addType(new ObjectType(['name' => 'SilverStripeRestrictedDataObjectFake']), 'SilverStripeRestrictedDataObjectFake'); $update->addToManager($manager); $scaffold = $update->scaffold($manager); $this->expectException(Exception::class); $this->expectExceptionMessageMatches('/Cannot edit/'); $scaffold['resolve']( $restrictedDataobject, [ 'Input' => [ 'ID' => $ID, ], ], ['currentUser' => Member::create()], new ResolveInfo([]) ); } } |