-
Notifications
You must be signed in to change notification settings - Fork 16
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Prototyped behat end-to-end testing #50
base: 1.0
Are you sure you want to change the base?
Changes from 2 commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
#!/bin/bash | ||
|
||
EZPLATFORM_BRANCH=`php -r 'echo json_decode(file_get_contents("./composer.json"))->extra->_ezplatform_branch_for_behat_tests;'` | ||
EZPLATFORM_BRANCH="${EZPLATFORM_BRANCH:-master}" | ||
PACKAGE_BUILD_DIR=$PWD | ||
EZPLATFORM_BUILD_DIR=${HOME}/build/ezplatform | ||
|
||
echo "> Cloning ezsystems/ezplatform:${EZPLATFORM_BRANCH}" | ||
git clone --depth 1 --single-branch --branch "${EZPLATFORM_BRANCH}" ${EZPLATFORM_REPO} ${EZPLATFORM_BUILD_DIR} | ||
cd ${EZPLATFORM_BUILD_DIR} | ||
|
||
/bin/bash ./bin/.travis/trusty/setup_ezplatform.sh "${COMPOSE_FILE}" '' "${PACKAGE_BUILD_DIR}" |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
# This file is meant to be imported from ezplatform's behat.yml.dist. | ||
# All path are relative to the root ezplatform directory. | ||
default: | ||
autoload: | ||
- '%paths.base%/vendor/ezsystems/ezplatform-graphql/features/bootstrap/' | ||
|
||
graphql: | ||
suites: | ||
graphql: | ||
autoload: | ||
- '%paths.base%/vendor/ezsystems/ezplatform-graphql/features/bootstrap/' | ||
paths: | ||
- '%paths.base%/vendor/ezsystems/ezplatform-graphql/features/Generator.feature' | ||
contexts: | ||
- GeneratorContext | ||
- ConfigurationContext | ||
- CacheContext |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
Feature: Schema generation | ||
In order to use GraphQL | ||
As an application maintainer | ||
I need to generate the schema | ||
|
||
Scenario: An application maintainer generates the schema | ||
Given the schema has not been generated | ||
When I run the command "ezplatform:graphql:generate-schema" | ||
When I clear the cache | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Nitpick: usually we replace the second consecutive usage with |
||
Then the schema files are generated in "app/config/graphql/ezplatform" | ||
And the GraphQL extension is configured to use that schema |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
<?php | ||
|
||
use PHPUnit\Framework\Assert; | ||
use Symfony\Component\Console\Input\ArrayInput; | ||
use Symfony\Component\Console\Output\BufferedOutput; | ||
use Symfony\Component\Finder\Finder; | ||
use Symfony\Component\Filesystem\Filesystem; | ||
use Symfony\Component\HttpKernel\KernelInterface; | ||
use Symfony\Component\Process\PhpExecutableFinder; | ||
use Symfony\Component\Process\Process; | ||
|
||
/** | ||
* @copyright Copyright (C) eZ Systems AS. All rights reserved. | ||
* @license For full copyright and license information view LICENSE file distributed with this source code. | ||
*/ | ||
|
||
class CacheContext implements \Behat\Symfony2Extension\Context\KernelAwareContext | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Why no import? 😄 |
||
{ | ||
/** | ||
* @var \Symfony\Component\HttpKernel\KernelInterface | ||
*/ | ||
private $kernel; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is a matter of taste, but I prefer to use KernelDictionary (https://github.com/Behat/Symfony2Extension/blob/master/src/Behat/Symfony2Extension/Context/KernelDictionary.php), as it results in less boilerplate (no need to add a setter) |
||
|
||
/** | ||
* Sets Kernel instance. | ||
* | ||
* @param \Symfony\Component\HttpKernel\KernelInterface $kernel | ||
*/ | ||
public function setKernel(KernelInterface $kernel) | ||
{ | ||
$this->kernel = $kernel; | ||
} | ||
|
||
/** | ||
* @Given /^I clear the cache$/ | ||
*/ | ||
public function iClearTheCache() | ||
{ | ||
$application = new \Symfony\Bundle\FrameworkBundle\Console\Application($this->kernel); | ||
$application->setAutoExit(false); | ||
|
||
$input = new ArrayInput(['command' => 'cache:clear', '--env' => 'behat']); | ||
|
||
// You can use NullOutput() if you don't need the output | ||
$output = new BufferedOutput(); | ||
Assert::assertEquals(0, $application->run($input, $output)); | ||
$content = $output->fetch(); | ||
$this->kernel->shutdown(); | ||
$this->kernel->boot(); | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
<?php | ||
|
||
use PHPUnit\Framework\Assert; | ||
use Symfony\Component\Console\Input\ArrayInput; | ||
use Symfony\Component\Console\Output\BufferedOutput; | ||
use Symfony\Component\Finder\Finder; | ||
use Symfony\Component\Filesystem\Filesystem; | ||
use Symfony\Component\HttpKernel\KernelInterface; | ||
use Symfony\Component\Process\PhpExecutableFinder; | ||
use Symfony\Component\Process\Process; | ||
|
||
/** | ||
* @copyright Copyright (C) eZ Systems AS. All rights reserved. | ||
* @license For full copyright and license information view LICENSE file distributed with this source code. | ||
*/ | ||
|
||
class ConfigurationContext implements \Behat\Symfony2Extension\Context\KernelAwareContext | ||
{ | ||
/** | ||
* @var \Symfony\Component\HttpKernel\KernelInterface | ||
*/ | ||
private $kernel; | ||
|
||
/** | ||
* Sets Kernel instance. | ||
* | ||
* @param \Symfony\Component\HttpKernel\KernelInterface $kernel | ||
*/ | ||
public function setKernel(KernelInterface $kernel) | ||
{ | ||
$this->kernel = $kernel; | ||
} | ||
|
||
/** | ||
* @Given /^the GraphQL extension is configured to use that schema$/ | ||
*/ | ||
public function theGraphQLExtensionIsConfiguredToUseThatSchema() | ||
{ | ||
$container = $this->kernel->getContainer(); | ||
$executor = $container->get('overblog_graphql.request_executor'); | ||
$schema = $executor->getSchema('default'); | ||
Assert::assertEquals('Domain', (string)$schema->getQueryType()); | ||
Assert::assertEquals('DomainContentMutation', (string)$schema->getMutationType()); | ||
} | ||
|
||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
<?php | ||
|
||
use PHPUnit\Framework\Assert; | ||
use Symfony\Bundle\FrameworkBundle\Console\Application; | ||
use Symfony\Component\Console\Input\ArrayInput; | ||
use Symfony\Component\Console\Output\BufferedOutput; | ||
use Symfony\Component\Finder\Finder; | ||
use Symfony\Component\Filesystem\Filesystem; | ||
use Symfony\Component\HttpKernel\KernelInterface; | ||
use Symfony\Component\Process\PhpExecutableFinder; | ||
use Symfony\Component\Process\Process; | ||
|
||
/** | ||
* @copyright Copyright (C) eZ Systems AS. All rights reserved. | ||
* @license For full copyright and license information view LICENSE file distributed with this source code. | ||
*/ | ||
|
||
class GeneratorContext implements \Behat\Symfony2Extension\Context\KernelAwareContext | ||
{ | ||
/** | ||
* @var string | ||
*/ | ||
private $scriptOutput; | ||
|
||
/** | ||
* @var \Symfony\Component\HttpKernel\KernelInterface | ||
*/ | ||
private $kernel; | ||
|
||
/** | ||
* @When /^I run the command "([^"]+)"$/ | ||
*/ | ||
public function iRunTheCommand($command) | ||
{ | ||
$application = new Application($this->kernel); | ||
$application->setAutoExit(false); | ||
|
||
$input = new ArrayInput(['command' => $command, '--env' => 'behat']); | ||
|
||
$output = new BufferedOutput(); | ||
$application->run($input, $output); | ||
|
||
$content = $output->fetch(); | ||
} | ||
|
||
/** | ||
* @Then /^the schema files are generated in "([^"]*)"$/ | ||
*/ | ||
public function theSchemaFilesAreGeneratedIn($directory) | ||
{ | ||
$finder = new Finder(); | ||
Assert::assertFileExists('app/config/graphql/ezplatform/Domain.types.yml'); | ||
Assert::assertFileExists('app/config/graphql/ezplatform/DomainContentMutation.types.yml'); | ||
} | ||
|
||
/** | ||
* @Given /^the schema has not been generated$/ | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Usually I struggle with steps like this one, because I understand them differently when they're used as Given or Then (and then I have to look at the code what they do). The way I see it: Of course this is a minor thing, because I don't imagine people using |
||
*/ | ||
public function theSchemaHasNotBeenGenerated() | ||
{ | ||
if (file_exists('app/config/graphql/ezplatform')) { | ||
$finder = new Finder(); | ||
$fs = new Filesystem(); | ||
$fs->remove($finder->in('app/config/graphql/ezplatform')->files()); | ||
} | ||
} | ||
|
||
/** | ||
* Sets Kernel instance. | ||
* | ||
* @param \Symfony\Component\HttpKernel\KernelInterface $kernel | ||
*/ | ||
public function setKernel(KernelInterface $kernel) | ||
{ | ||
$this->kernel = $kernel; | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Usually we keep the Context classes in
Context
directories, also define namespaces for them - I think it would be useful to do that here as well, to keep it consistent.