Skip to content
This repository has been archived by the owner on Nov 16, 2020. It is now read-only.

Commit

Permalink
tests
Browse files Browse the repository at this point in the history
  • Loading branch information
kunicmarko20 committed Jul 30, 2018
1 parent c2b13a2 commit 4613dc1
Show file tree
Hide file tree
Showing 10 changed files with 398 additions and 2 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ Easier handling of Import in Sonata Admin.
Built on top of [Importer](https://github.com/kunicmarko20/importer).

[![PHP Version](https://img.shields.io/badge/php-%5E7.1-blue.svg)](https://img.shields.io/badge/php-%5E7.1-blue.svg)
[![Latest Stable Version](https://poser.pugx.org/kunicmarko/SonataImporterBundle/v/stable)](https://packagist.org/packages/kunicmarko/SonataImporterBundle)
[![Latest Unstable Version](https://poser.pugx.org/kunicmarko/SonataImporterBundle/v/unstable)](https://packagist.org/packages/kunicmarko/SonataImporterBundle)
[![Latest Stable Version](https://poser.pugx.org/kunicmarko/sonata-importer-bundle/v/stable)](https://packagist.org/packages/kunicmarko/sonata-importer-bundle)
[![Latest Unstable Version](https://poser.pugx.org/kunicmarko/sonata-importer-bundle/v/unstable)](https://packagist.org/packages/kunicmarko/sonata-importer-bundle)

[![Build Status](https://travis-ci.org/kunicmarko20/SonataImporterBundle.svg?branch=master)](https://travis-ci.org/kunicmarko20/SonataImporterBundle)
[![Coverage Status](https://coveralls.io/repos/github/kunicmarko20/SonataImporterBundle/badge.svg?branch=master)](https://coveralls.io/github/kunicmarko20/SonataImporterBundle?branch=master)
Expand Down
1 change: 1 addition & 0 deletions phpunit.xml.dist
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
<directory>./src/</directory>
<exclude>
<directory>./vendor/</directory>
<directory>./src/Exception/</directory>
</exclude>
</whitelist>
</filter>
Expand Down
72 changes: 72 additions & 0 deletions tests/Admin/ImportAdminExtensionTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
<?php

namespace KunicMarko\SonataImporterBundle\Tests\Admin;

use KunicMarko\SonataImporterBundle\Admin\AdminWithImport;
use KunicMarko\SonataImporterBundle\Admin\ImportAdminExtension;
use PHPUnit\Framework\TestCase;
use Prophecy\Argument;
use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Admin\AdminInterface;
use Sonata\AdminBundle\Route\RouteCollection;

/**
* @author Marko Kunic <kunicmarko20@gmail.com>
*/
class ImportAdminExtensionTest extends TestCase
{
/**
* @var ImportAdminExtension
*/
private $extension;

public function setUp()
{
$this->extension = new ImportAdminExtension([
'action_button' => 'action_button_template',
'dashboard_action' => 'dashboard_action_template',
]);
}

public function testConfigureRoutes()
{
$routeCollection = $this->prophesize(RouteCollection::class);
$routeCollection->add(Argument::type('string'))->shouldBeCalled();

$this->extension->configureRoutes(new class('', '', '') extends AbstractAdmin implements AdminWithImport {

}, $routeCollection->reveal());
}

public function testConfigureRoutesNoCall()
{
$routeCollection = $this->prophesize(RouteCollection::class);
$routeCollection->add()->shouldNotBeCalled();

$this->extension->configureRoutes($this->getAdmin(), $routeCollection->reveal());
}

private function getAdmin(): AdminInterface
{
return new class('', '', '') extends AbstractAdmin {
};
}

public function testConfigureActionButtons(): void
{
$result = $this->extension->configureActionButtons($this->getAdmin(), [], null, null);

$this->assertArrayHasKey('import', $result);
$this->assertArrayHasKey('template', $result['import']);
$this->assertSame('action_button_template', $result['import']['template']);
}

public function testConfigureDashboardActions(): void
{
$result = $this->extension->configureDashboardActions($this->getAdmin(), []);

$this->assertArrayHasKey('import', $result);
$this->assertArrayHasKey('template', $result['import']);
$this->assertSame('dashboard_action_template', $result['import']['template']);
}
}
11 changes: 11 additions & 0 deletions tests/DataFixtures/Admin.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?php

declare(strict_types=1);

namespace KunicMarko\SonataImporterBundle\Tests\DataFixtures;

use PHPUnit\Framework\TestCase;

class Admin extends TestCase
{
}
14 changes: 14 additions & 0 deletions tests/DataFixtures/Controller.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?php

declare(strict_types=1);

namespace KunicMarko\SonataImporterBundle\Tests\DataFixtures;

use PHPUnit\Framework\TestCase;

class Controller extends TestCase
{
public function setImportConfigurations(): void
{
}
}
29 changes: 29 additions & 0 deletions tests/DataFixtures/ImportConfiguration.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?php

declare(strict_types=1);

namespace KunicMarko\SonataImporterBundle\Tests\DataFixtures;

use KunicMarko\SonataImporterBundle\SonataImportConfiguration;
use PHPUnit\Framework\TestCase;

class ImportConfiguration extends TestCase implements SonataImportConfiguration
{
public function map(array $item, array $additionalData)
{
}

public function save(array $items, array $additionalData): void
{
}

public static function adminClass(): string
{
return Admin::class;
}

public static function format(): string
{
return 'csv';
}
}
140 changes: 140 additions & 0 deletions tests/DependencyInjection/Compiler/AutoConfigureCompilerPassTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
<?php

declare(strict_types=1);

namespace KunicMarko\SonataImporterBundle\Tests\DependencyInjection\Compiler;

use KunicMarko\SonataImporterBundle\Controller\ImportCRUDController;
use KunicMarko\SonataImporterBundle\DependencyInjection\Compiler\AutoConfigureCompilerPass;
use KunicMarko\SonataImporterBundle\Tests\DataFixtures\Admin;
use KunicMarko\SonataImporterBundle\Tests\DataFixtures\Controller;
use KunicMarko\SonataImporterBundle\Tests\DataFixtures\ImportConfiguration;
use PHPUnit\Framework\TestCase;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Definition;

/**
* @author Marko Kunic <kunicmarko20@gmail.com>
*/
class AutoConfigureCompilerPassTest extends TestCase
{
/**
* @var AutoConfigureCompilerPass
*/
private $compilerPass;

/**
* @var ContainerBuilder
*/
private $containerBuilder;

public function setUp(): void
{
$this->compilerPass = new AutoConfigureCompilerPass();
$this->containerBuilder = new ContainerBuilder();
}

public function testProcess(): void
{
$this->containerBuilder->setDefinition(
'admin',
($adminDefinition = new Definition(
Admin::class,
[
0,
1,
'SonataAdminBundle:CRUD'
]
)
)->setTags([
'sonata.importer.admin' => [],
'sonata.admin' => [],
])
);

$this->containerBuilder->setDefinition(
'controller',
($controllerDefinition = new Definition(
Controller::class
)
)->setTags([
'sonata.importer.controller' => [],
])
);

$this->containerBuilder->setDefinition(
'importConfiguration',
(new Definition(
ImportConfiguration::class
)
)->setTags([
'sonata.importer.configuration' => [],
])
);

$this->compilerPass->process($this->containerBuilder);

$this->assertSame(ImportCRUDController::class, $adminDefinition->getArgument(2));

$methodCall = $controllerDefinition->getMethodCalls()[0];
$methodName = $methodCall[0];
$methodArguments = $methodCall[1][0];

$this->assertSame('setImportConfigurations', $methodName);
$this->assertCount(1, $methodArguments);
$this->assertSame(Admin::class, key($methodArguments));
$this->assertSame('csv', key($methodArguments[Admin::class]));
$this->assertSame(ImportConfiguration::class, $methodArguments[Admin::class]['csv']->getClass());
}

/**
* @expectedException \KunicMarko\SonataImporterBundle\Exception\ImportConfigurationMissingInterface
*/
public function testProcessImportConfigurationMissing(): void
{
$this->containerBuilder->setDefinition(
'importConfigurationMissing',
(new Definition(
self::class
)
)->setTags([
'sonata.importer.configuration' => [],
])
);

$this->compilerPass->process($this->containerBuilder);
}

/**
* @expectedException \KunicMarko\SonataImporterBundle\Exception\ControllerMissingMethod
*/
public function testProcessControllerMissingMethod(): void
{
$this->containerBuilder->setDefinition(
'import admin that isn\'t sonata admin',
(new Definition(
Admin::class,
[
0,
1,
'SonataAdminBundle:CRUD'
]
)
)->setTags([
'sonata.importer.admin' => [],
])
);

$this->containerBuilder->setDefinition(
'controllerMissingMethod',
(new Definition(
self::class
)
)->setTags([
'sonata.importer.controller' => [],
])
);

$this->compilerPass->process($this->containerBuilder);
}
}
31 changes: 31 additions & 0 deletions tests/DependencyInjection/SonataImporterExtensionTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<?php

declare(strict_types=1);

namespace KunicMarko\SonataImporterBundle\Tests\DependencyInjection;

use KunicMarko\SonataImporterBundle\DependencyInjection\SonataImporterExtension;
use Matthias\SymfonyDependencyInjectionTest\PhpUnit\AbstractExtensionTestCase;
use KunicMarko\SonataImporterBundle\Controller\ImportCRUDController;

/**
* @author Marko Kunic <kunicmarko20@gmail.com>
*/
final class SonataImporterExtensionTest extends AbstractExtensionTestCase
{
public function testLoadsFormServiceDefinition(): void
{
$this->container->setParameter('kernel.project_dir', $param = 'test');

$this->load();

$this->assertContainerBuilderHasService(
ImportCRUDController::class
);
}

protected function getContainerExtensions(): array
{
return [new SonataImporterExtension()];
}
}
53 changes: 53 additions & 0 deletions tests/Form/AdminImportTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
<?php

namespace KunicMarko\SonataImporterBundle\Tests\Form;

use KunicMarko\SonataImporterBundle\Form\AdminImport as AdminImportForm;
use KunicMarko\SonataImporterBundle\DTO\AdminImport as AdminImportDTO;
use Symfony\Component\Form\Test\TypeTestCase;
use Symfony\Component\HttpFoundation\File\UploadedFile;

/**
* @author Marko Kunic <kunicmarko20@gmail.com>
*/
class AdminImportTest extends TypeTestCase
{
/**
* @var UploadedFile
*/
private $uploadedFile;

private $file;

public function setUp()
{
parent::setUp();

$this->uploadedFile = new UploadedFile(
$this->file = tempnam(sys_get_temp_dir(), 'test'),
'imp.csv'
);
}

public function testSubmitValidData(): void
{
$form = $this->factory->create(
AdminImportForm::class,
new AdminImportDTO()
);

$form->submit([
'file' => $this->uploadedFile
]);

$this->assertTrue($form->isSynchronized());
$view = $form->createView();

$this->assertArrayHasKey('file', $view->children);
}

public function tearDown()
{
unlink($this->file);
}
}

0 comments on commit 4613dc1

Please sign in to comment.