Source of file OperationScaffolderTest.php
Size: 8,232 Bytes - Last Modified: 2021-12-23T10:31:47+00:00
/var/www/docs.ssmods.com/process/src/tests/Scaffolding/Scaffolders/OperationScaffolderTest.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250 | <?php namespace SilverStripe\GraphQL\Tests\Scaffolders\Scaffolding; use Exception; use GraphQL\Type\Definition\BooleanType; use GraphQL\Type\Definition\NonNull; use GraphQL\Type\Definition\StringType; use InvalidArgumentException; use SilverStripe\Dev\SapphireTest; use SilverStripe\GraphQL\Scaffolding\Scaffolders\ArgumentScaffolder; use SilverStripe\GraphQL\Scaffolding\Scaffolders\CRUD\Create; use SilverStripe\GraphQL\Scaffolding\Scaffolders\CRUD\Delete; use SilverStripe\GraphQL\Scaffolding\Scaffolders\CRUD\Read; use SilverStripe\GraphQL\Scaffolding\Scaffolders\CRUD\Update; use SilverStripe\GraphQL\Scaffolding\Scaffolders\OperationScaffolder; use SilverStripe\GraphQL\Scaffolding\Scaffolders\SchemaScaffolder; use SilverStripe\GraphQL\Tests\Fake\DataObjectFake; use SilverStripe\GraphQL\Tests\Fake\FakeResolver; use SilverStripe\GraphQL\Tests\Fake\OperationScaffolderFake; use SilverStripe\GraphQL\Tests\Fake\RestrictedDataObjectFake; /** * @skipUpgrade */ class OperationScaffolderTest extends SapphireTest { protected static $extra_dataobjects = [ DataObjectFake::class, RestrictedDataObjectFake::class, ]; public function testOperationIdentifiers() { $this->assertEquals( Read::class, OperationScaffolder::getClassFromIdentifier(SchemaScaffolder::READ) ); $this->assertEquals( Update::class, OperationScaffolder::getClassFromIdentifier(SchemaScaffolder::UPDATE) ); $this->assertEquals( Delete::class, OperationScaffolder::getClassFromIdentifier(SchemaScaffolder::DELETE) ); $this->assertEquals( Create::class, OperationScaffolder::getClassFromIdentifier(SchemaScaffolder::CREATE) ); } public function testOperationScaffolderArgs() { $scaffolder = new OperationScaffolderFake('testOperation', 'testType'); $this->assertEquals('testOperation', $scaffolder->getName()); $scaffolder->setName('changedOperation'); $this->assertEquals('changedOperation', $scaffolder->getName()); $scaffolder->addArgs([ 'One' => 'String', 'Two' => 'Boolean', ]); $scaffolder->addArg( 'One', 'String', 'One description', 'One default' ); $this->assertEquals([], array_diff( $scaffolder->getArgs()->column('argName'), ['One', 'Two'] )); $argument = $scaffolder->getArgs()->find('argName', 'One'); $this->assertInstanceOf(ArgumentScaffolder::class, $argument); $arr = $argument->toArray(); $this->assertEquals('One description', $arr['description']); $this->assertEquals('One default', $arr['defaultValue']); $scaffolder->setArgDescriptions([ 'One' => 'Foo', 'Two' => 'Bar', ]); $scaffolder->setArgDefaults([ 'One' => 'Feijoa', 'Two' => 'Kiwifruit', ]); $scaffolder->setArgsRequired([ 'One' => true, 'Two' => false, ]); $argument = $scaffolder->getArgs()->find('argName', 'One'); $arr = $argument->toArray(); $this->assertEquals('Foo', $arr['description']); $this->assertEquals('Feijoa', $arr['defaultValue']); $this->assertInstanceOf(NonNull::class, $arr['type']); $argument = $scaffolder->getArgs()->find('argName', 'Two'); $arr = $argument->toArray(); $this->assertEquals('Bar', $arr['description']); $this->assertEquals('Kiwifruit', $arr['defaultValue']); $this->assertInstanceof(BooleanType::class, $arr['type']); $scaffolder->setArgDescription('One', 'Tui') ->setArgDefault('One', 'Moa'); $argument = $scaffolder->getArgs()->find('argName', 'One'); $arr = $argument->toArray(); $this->assertEquals('Tui', $arr['description']); $this->assertEquals('Moa', $arr['defaultValue']); $scaffolder->removeArg('One'); $this->assertEquals(['Two'], $scaffolder->getArgs()->column('argName')); $scaffolder->addArg('Test', 'String'); $scaffolder->removeArgs(['Two', 'Test']); $this->assertFalse($scaffolder->getArgs()->exists()); $ex = null; try { $scaffolder->setArgDescription('Nothing', 'Test'); } catch (Exception $e) { $ex = $e; } $this->assertInstanceOf(InvalidArgumentException::class, $ex); $this->assertMatchesRegularExpression('/Tried to set description/', $ex->getMessage()); $ex = null; try { $scaffolder->setArgDefault('Nothing', 'Test'); } catch (Exception $e) { $ex = $e; } $this->assertInstanceOf(InvalidArgumentException::class, $ex); $this->assertMatchesRegularExpression('/Tried to set default/', $ex->getMessage()); $ex = null; try { $scaffolder->setArgRequired('Nothing', true); } catch (Exception $e) { $ex = $e; } $this->assertInstanceOf(InvalidArgumentException::class, $ex); $this->assertMatchesRegularExpression('/Tried to make arg [A-Za-z0-9]+ required/', $ex->getMessage()); } public function testOperationScaffolderResolver() { $scaffolder = new OperationScaffolderFake('testOperation', 'testType'); try { $scaffolder->setResolver(function () { }); $scaffolder->setResolver(FakeResolver::class); $scaffolder->setResolver(new FakeResolver()); $success = true; } catch (Exception $e) { $success = false; } $this->assertTrue($success); $this->expectException(\InvalidArgumentException::class); $this->expectExceptionMessageMatches('/closures, instances of/'); $scaffolder->setResolver('fail'); } public function testOperationScaffolderAppliesConfig() { $scaffolder = new OperationScaffolderFake('testOperation', 'testType'); $scaffolder->applyConfig([ 'args' => [ 'One' => 'String', 'Two' => [ 'type' => 'String', 'default' => 'Foo', 'description' => 'Bar', ], ], 'resolver' => FakeResolver::class, 'name' => 'theGreatestOperation', ]); $this->assertEquals([], array_diff( $scaffolder->getArgs()->column('argName'), ['One', 'Two'] )); $this->assertEquals('theGreatestOperation', $scaffolder->getName()); $arg = $scaffolder->getArgs()->find('argName', 'Two'); $this->assertInstanceof(ArgumentScaffolder::class, $arg); $arr = $arg->toArray(); $this->assertInstanceOf(StringType::class, $arr['type']); $ex = null; try { $scaffolder->applyConfig([ 'args' => 'fail', ]); } catch (Exception $e) { $ex = $e; } $this->assertInstanceof(Exception::class, $ex); $this->assertMatchesRegularExpression('/args must be an array/', $ex->getMessage()); $ex = null; try { $scaffolder->applyConfig([ 'args' => [ 'One' => [ 'default' => 'Foo', 'description' => 'Bar', ], ], ]); } catch (Exception $e) { $ex = $e; } $this->assertInstanceof(Exception::class, $ex); $this->assertMatchesRegularExpression('/must have a type/', $ex->getMessage()); $ex = null; try { $scaffolder->applyConfig([ 'args' => [ 'One' => false, ], ]); } catch (Exception $e) { $ex = $e; } $this->assertInstanceof(Exception::class, $ex); $this->assertMatchesRegularExpression('/should be mapped to a string or an array/', $ex->getMessage()); } } |