<?php 
/** 
 * @author stev leibelt <[email protected]> 
 * @since 2014-06-09  
 */ 
 
namespace Test\Net\Bazzline\Component\Locator\Configuration\Assembler; 
 
use Test\Net\Bazzline\Component\Locator\LocatorTestCase; 
use Net\Bazzline\Component\Locator\Configuration\Configuration; 
 
/** 
 * Class FromArrayAssemblerTest 
 * @package Test\Net\Bazzline\Component\Locator\Configuration\Assembler 
 */ 
class FromArrayAssemblerTest extends LocatorTestCase 
{ 
    //begin of test 
    /** 
     * @expectedException \Net\Bazzline\Component\Locator\Configuration\Assembler\InvalidArgumentException 
     * @expectedExceptionMessage data must be an array 
     */ 
    public function testAssembleWithNoContent() 
    { 
        $assembler      = $this->getFromArrayAssembler(); 
        $configuration  = $this->getMockOfConfiguration(); 
 
        $assembler->assemble(null, $configuration); 
    } 
    /** 
     * @expectedException \Net\Bazzline\Component\Locator\Configuration\Assembler\InvalidArgumentException 
     * @expectedExceptionMessage data array must contain content 
     */ 
    public function testAssembleWithEmptyDataArray() 
    { 
        $assembler      = $this->getFromArrayAssembler(); 
        $configuration  = $this->getMockOfConfiguration(); 
 
        $assembler->assemble(array(), $configuration); 
    } 
 
    /** 
     * @expectedException \Net\Bazzline\Component\Locator\Configuration\Assembler\InvalidArgumentException 
     * @expectedExceptionMessage data array must contain content for key "class_name" 
     */ 
    public function testAssembleWithMissingMandatoryDataKeyClassName() 
    { 
        $assembler      = $this->getFromArrayAssembler(); 
        $configuration  = $this->getMockOfConfiguration(); 
 
        $assembler->assemble(array('key' => null), $configuration); 
    } 
 
    /** 
     * @expectedException \Net\Bazzline\Component\Locator\Configuration\Assembler\InvalidArgumentException 
     * @expectedExceptionMessage value of key "class_name" must be of type "string" 
     */ 
    public function testAssembleWithWrongMandatoryDataKeyClassNameValueType() 
    { 
        $assembler      = $this->getFromArrayAssembler(); 
        $configuration  = $this->getMockOfConfiguration(); 
 
        $assembler->assemble(array('class_name' => 1), $configuration); 
    } 
 
    /** 
     * @expectedException \Net\Bazzline\Component\Locator\Configuration\Assembler\InvalidArgumentException 
     * @expectedExceptionMessage data array must contain content for key "file_path" 
     */ 
    public function testAssembleWithMissingMandatoryDataKeyFilePath() 
    { 
        $assembler      = $this->getFromArrayAssembler(); 
        $configuration  = $this->getMockOfConfiguration(); 
 
        $assembler->assemble(array('class_name' => 'class name'), $configuration); 
    } 
 
    /** 
     * @expectedException \Net\Bazzline\Component\Locator\Configuration\Assembler\InvalidArgumentException 
     * @expectedExceptionMessage value of key "extends" must be of type "string" when set 
     */ 
    public function testAssembleWithWrongOptionalDataKeyClassNameValueType() 
    { 
        $assembler      = $this->getFromArrayAssembler(); 
        $configuration  = $this->getMockOfConfiguration(); 
 
        $assembler 
            ->assemble( 
            array( 
                'class_name'    => 'class name', 
                'file_path'     => '/file/path', 
                'extends'       => array('your argument is invalid') 
            ), 
            $configuration 
        ); 
    } 
 
    public function testAssembleWithValidMandatoryData() 
    { 
        $assembler      = $this->getFromArrayAssembler(); 
        $configuration  = $this->getMockOfConfiguration(); 
 
        $configuration->shouldReceive('setClassName') 
            ->with('my_class') 
            ->andReturn($configuration) 
            ->once(); 
        $configuration->shouldReceive('setFilePath') 
            ->with('/my/file/path') 
            ->once(); 
 
        $data = array( 
            'class_name'    => 'my_class', 
            'file_path'     => '/my/file/path' 
        ); 
 
        $assembler->assemble($data, $configuration); 
    } 
 
    public function testAssembleWithValidAllData() 
    { 
        $className  = 'TestName'; 
        $extends    = 'Bar'; 
        $filePath   = '/test/name'; 
        $implements = array( 
                'BarInterface', 
                'FooInterface', 
                'TestInterface' 
        ); 
        $instances = array( 
                array( 
                    'alias'         => 'UniqueInvokableInstance', 
                    'class_name'    => '\Application\Model\ExampleUniqueInvokableInstance', 
                    'is_shared'     => false 
                ), 
                array( 
                    'alias'         => 'UniqueFactorizedInstance', 
                    'class_name'    => '\Application\Factory\ExampleUniqueFactorizedInstanceFactory', 
                    'is_factory'    => true, 
                    'is_shared'     => false, 
                    'return_value'  => '\Application\Model\ExampleUniqueFactorizedInstance' 
                ), 
                array( 
                    'alias'         => 'SharedInvokableInstance', 
                    'class_name'    => '\Application\Model\ExampleSharedInvokableInstance' 
                ), 
                array( 
                    'alias'         => 'SharedFactorizedInstance', 
                    'class_name'    => '\Application\Factory\ExampleSharedFactorizedInstanceFactory', 
                    'is_factory'    => true, 
                    'return_value'  => '\Application\Model\ExampleSharedFactorizedInstance' 
                ) 
        ); 
        $methodPrefix   = 'test'; 
        $namespace      = 'Test\Namespace'; 
        $uses           = array( 
            array('class_name' => 'My\Foo', 'alias' => 'FileGenerator') 
        ); 
 
        $configuration = $this->getConfiguration(); 
        $data = array( 
            'class_name' => $className, 
            'file_path' => $filePath, 
            'namespace' => $namespace, 
            'method_prefix' => $methodPrefix, 
            'extends' => $extends, 
            'instances' => $instances, 
            'implements' => $implements, 
            'uses' => $uses 
        ); 
 
        $assembler = $this->getFromArrayAssembler(); 
        $assembler->assemble($data, $configuration); 
 
        $item = $this->getUses(); 
        $item->setAlias(''); 
        $item->setClassName('Net\Bazzline\Component\Locator\FactoryInterface'); 
        $expectedUseCollection = array($item); 
        foreach ($uses as $use) { 
            $item = $this->getUses(); 
            $item->setAlias($use['alias']); 
            $item->setClassName($use['class_name']); 
            $expectedUseCollection[] = $item; 
        } 
 
        $this->assertEquals($className, $configuration->getClassName()); 
        $this->assertEquals($extends, $configuration->getExtends()); 
        $this->assertEquals($className . '.php', $configuration->getFileName()); 
        $this->assertEquals($implements, $configuration->getImplements()); 
        $this->assertSameSize($instances, $configuration->getInstances()); 
        $this->assertEquals($methodPrefix, $configuration->getMethodPrefix()); 
        $this->assertEquals($namespace, $configuration->getNamespace()); 
        $this->assertEquals($expectedUseCollection, $configuration->getUseCollection()); 
    } 
    //end of test 
}
 
 |