public function testC() { $factory = new Factory(); $mapping = $factory->mapping(['id' => $factory->mapping()->ignored(42), 'username' => $factory->mapping()], function ($id, $username) { $this->assertSame(42, $id); $this->assertSame('dennis', $username); }); $result = $mapping->apply(['id' => 4, 'username' => 'dennis']); }
public function testCallUserFunc() { $factory = new Factory(); $user = new User('dennis84', 'demo123'); $handler = $this->getMock('stdclass', ['apply', 'unapply']); $handler->expects($this->once())->method('apply')->with($this->equalTo('foo'), $this->equalTo('bar')); $handler->expects($this->once())->method('unapply')->with($this->equalTo($user)); $mapping = $factory->mapping(['username' => $factory->mapping(), 'password' => $factory->mapping()], [$handler, 'apply'], [$handler, 'unapply']); $mapping->unapply($user); $mapping->apply(['username' => 'foo', 'password' => 'bar']); }
public function testD() { $factory = new Factory(); $mapping = $factory->mapping(['username' => $factory->mapping(), 'password' => $factory->mapping()], function ($username, $password) { return new User($username, $password); })->verifying('foo', function ($user) { $this->assertInstanceOf('Mapped\\Tests\\Fixtures\\User\\User', $user); return true; }); $mapping->apply(['username' => 'dennis', 'password' => 'password']); }
public function testB() { $factory = new Factory([new \Mapped\Extension\Forms()]); $mapping = $factory->mapping(['username' => $factory->mapping()->notEmpty(), 'password' => $factory->mapping()], function ($username, $password) { return new User($username, $password); }); $form = $mapping->form(); $form->bind(['username' => '']); $this->assertFalse($form->isValid()); $this->assertCount(2, $form->getErrors()); $this->assertCount(1, $form['username']->getErrors()); $this->assertCount(1, $form['password']->getErrors()); $this->assertSame('error.not_empty', $form['username']->getErrors()[0]->getMessage()); $this->assertSame('error.required', $form['password']->getErrors()[0]->getMessage()); }
public function testE() { $factory = new Factory(); $mapping = $factory->mapping()->transformTo('stdClass'); $data = ['username' => 'dennis', 'password' => 'passwd', 'address' => ['street' => 'Foo', 'city' => 'Bar']]; $result = $mapping->apply($data); $user = new \stdClass(); $user->username = '******'; $user->password = '******'; $address = new \stdClass(); $address->street = 'Foo'; $address->city = 'Bar'; $user->address = $address; $this->assertEquals($user, $result); $result = $mapping->unapply($user); $this->assertEquals($data, $result); }
public function testH() { $factory = new Factory(); $mapping = $factory->mapping(['username' => $factory->mapping(), 'password' => $factory->mapping(), 'address' => $factory->mapping(['city' => $factory->mapping(), 'street' => $factory->mapping()])]); $result = $mapping->unapply(['username' => 'dennis', 'password' => 'passwd', 'address' => null]); $this->assertSame(['username' => 'dennis', 'password' => 'passwd', 'address' => null], $result); }
private function createNestedMapping() { $factory = new Factory(); return $factory->mapping(['username' => $factory->mapping(), 'password' => $factory->mapping(), 'address' => $factory->mapping(['city' => $factory->mapping(), 'street' => $factory->mapping()], function ($city, $street) { return new Address($city, $street); })->optional()], function ($username, $password, Address $address = null) { return new User($username, $password, $address); }); }
public function testF() { $factory = new Factory(); $mapping = $factory->mapping(['username' => $factory->mapping(), 'password' => $factory->mapping(), 'address' => $factory->mapping(['city' => $factory->mapping(), 'street' => $factory->mapping()], function ($city, $street) { return new Address($city, $street); })], function ($username, $password, Address $address) { return new User($username, $password, $address); }); $result = $mapping->apply(['username' => 'dennis84', 'password' => 'password', 'address' => ['city' => 'Foo', 'street' => 'Bar']]); $this->assertInstanceOf('Mapped\\Tests\\Fixtures\\User\\User', $result); $this->assertSame('dennis84', $result->username); $this->assertSame('password', $result->password); $this->assertInstanceOf('Mapped\\Tests\\Fixtures\\User\\Address', $result->address); $this->assertSame('Foo', $result->address->city); $this->assertSame('Bar', $result->address->street); }
public function testAssertObject() { $validator = Validation::createValidatorBuilder()->enableAnnotationMapping()->getValidator(); $factory = new Factory([new \Mapped\Extension\SymfonyValidation($validator)]); $mapping = $factory->mapping(['title' => $factory->mapping(), 'tags' => $factory->mapping()->multiple(), 'attributes' => $factory->mapping(['name' => $factory->mapping(), 'value' => $factory->mapping()], function ($name, $value) { return new Attribute($name, $value); })->multiple()], function ($title, array $tags, array $attrs) { return new Post($title, $tags, $attrs); })->enableObjectValidation(); $this->setExpectedException('Mapped\\ValidationException'); try { $mapping->apply(['title' => '', 'tags' => [], 'attributes' => [['name' => '', 'value' => '']]]); } catch (ValidationException $e) { $errors = $e->getErrors(); $this->assertSame('not-blank', $errors[0]->getMessage()); $this->assertSame(['title'], $errors[0]->getPropertyPath()); $this->assertSame('not-blank', $errors[1]->getMessage()); $this->assertSame(['attributes', '0', 'name'], $errors[1]->getPropertyPath()); throw $e; } }
public function testJ() { $factory = new Factory(); $mapping = $factory->mapping(['foos' => $factory->mapping(['bars' => $factory->mapping()->multiple()])->multiple()]); $data = ['foos' => [['bars' => ['a', 'b']], ['bars' => ['c', 'd']]]]; $result = $mapping->apply($data); $this->assertSame($data, $result); }
public function testBool() { $factory = new Factory(); $mapping = $factory->mapping(['a' => $factory->bool(), 'b' => $factory->bool(), 'c' => $factory->bool(), 'd' => $factory->bool()]); $result = $mapping->apply(['a' => true, 'b' => false, 'c' => 'true', 'd' => 'false']); $this->assertTrue($result['a']); $this->assertFalse($result['b']); $this->assertTrue($result['c']); $this->assertFalse($result['d']); }