コード例 #1
0
ファイル: DomainDriver.php プロジェクト: rtens/ucdi
 public function givenNowIs($when)
 {
     $this->now = new \DateTimeImmutable($when);
     $settings = new Settings();
     $settings->calendarId = 'myCalendarId';
     $this->service = new ApplicationService(new Application($this->uid, $settings, Mockster::mock($this->calendar), $this->baseUrl, $this->now), $this->store);
 }
コード例 #2
0
 private function givenTheInvisibleActions(array $ids)
 {
     foreach ($ids as $id) {
         $this->actions[$id] = Mockster::of(Action::class);
         $this->registry->add($id, Mockster::mock($this->actions[$id]));
     }
 }
コード例 #3
0
 function printLinksAsDropDown()
 {
     $this->actions->add('foo', Mockster::mock(Action::class));
     $this->links->add(new IdentifierLink(\DateTime::class, 'foo', 'id'));
     $rendered = $this->renderer->render(new Identifier(\DateTime::class, 'foo-id'));
     $this->assert->contains($rendered, "DateTime\n<span class=\"caret\"></span>");
     $this->assert->contains($rendered, '<ul class="dropdown-menu">' . '<li><a class="" href="foo?id=foo-id"></a></li>' . '</ul>');
 }
コード例 #4
0
ファイル: NullableFieldSpec.php プロジェクト: jonfm/domin
 protected function before()
 {
     $fields = new FieldRegistry();
     $this->inside = M::of(WebField::class);
     $fields->add(M::mock($this->inside));
     $this->field = new NullableField($fields);
     M::stub($this->inside->handles(Arg::any()))->will()->return_(true);
 }
コード例 #5
0
ファイル: ArrayFieldSpec.php プロジェクト: jonfm/domin
 protected function before()
 {
     $fields = new FieldRegistry();
     $this->mockster = Mockster::of(WebField::class);
     Mockster::stub($this->mockster->handles(Argument::any()))->will()->return_(true);
     $this->detector = Mockster::of(MobileDetector::class);
     $fields->add(Mockster::mock($this->mockster));
     $this->field = new ArrayField($fields, Mockster::mock($this->detector));
 }
コード例 #6
0
 function printLinks()
 {
     $this->renderers->add(new ElementRenderer());
     $this->renderers->add(new PrimitiveRenderer());
     $this->actions->add('foo', Mockster::mock(Action::class));
     $this->actions->add('bar', Mockster::mock(Action::class));
     $this->links->add(new ClassLink(\StdClass::class, 'foo'));
     $this->links->add(new ClassLink(\StdClass::class, 'bar'));
     $rendered = $this->tableRenderer->render(new ObjectTable([new \StdClass()], $this->types));
     $this->assert->contains($rendered, '<div class="dropdown">' . "\n" . '<button class="btn btn-xs btn-primary dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">' . "\n" . 'stdClass' . "\n" . '<span class="caret"></span>' . "\n" . '</button>' . "\n" . '<ul class="dropdown-menu">' . "\n" . '<li><a class="" href="foo"></a></li>' . "\n" . '<li><a class="" href="bar"></a></li>' . "\n" . '</ul>' . "\n" . '</div>');
 }
コード例 #7
0
ファイル: ListRendererSpec.php プロジェクト: jonfm/domin
 function collectsHeadElementsOfItems()
 {
     $itemRenderer = Mockster::of(WebRenderer::class);
     $this->registry->add(Mockster::mock($itemRenderer));
     Mockster::stub($itemRenderer->handles(Argument::any()))->will()->return_(true);
     Mockster::stub($itemRenderer->headElements('foo'))->will()->return_([new Element('foo')]);
     Mockster::stub($itemRenderer->headElements(Argument::object(\DateTime::class)))->will()->return_([new Element('bar')]);
     $elements = $this->renderer->headElements(['foo', new \DateTime()]);
     $this->assert->size($elements, 2);
     $this->assert((string) $elements[0], '<foo></foo>');
     $this->assert((string) $elements[1], '<bar></bar>');
 }
コード例 #8
0
ファイル: ListActionsSpec.php プロジェクト: jonfm/domin
 function restrictAccess()
 {
     $this->action->givenTheAction('foo');
     $this->action->givenTheAction('bar');
     $access = Mockster::of(AccessControl::class);
     Mockster::stub($access->isVisible('bar'))->will()->return_(true);
     WebApplication::init(function (WebApplication $application) use($access) {
         $application->restrictAccess(WebAccessControl::factory(Mockster::mock($access)));
     }, $this->web->factory);
     $this->whenIListTheActions();
     $this->thenThereShouldBe_Actions(1);
     $this->thenAction_ShouldBe(1, 'bar');
 }
コード例 #9
0
 function executeWithObject()
 {
     $this->file->givenTheFile_Containing('folder/file.php', '<?php class BarObjectAction {
         /** @var string */
         public $one;
         /** @var string */
         public $two;
     }');
     $registry = M::of(ActionRegistry::class);
     $this->createGenerator(M::mock($registry))->fromFolder($this->file->fullPath('folder'), function ($object) {
         return $object->one . ':' . $object->two;
     });
     /** @var GenericObjectAction $action */
     $action = M::stub($registry->add('barObjectAction', A::any()))->has()->inCall(0)->argument('action');
     $this->assert($action->execute(['one' => 'foo', 'two' => 'bar']), 'foo:bar');
     $this->assert($action->description(), '');
 }
コード例 #10
0
 private function givenANonModifyingAction($actionId)
 {
     $this->action = Mockster::of(Action::class);
     $this->app->actions->add($actionId, Mockster::mock($this->action));
     Mockster::stub($this->action->execute(Arg::any()))->will()->return_('Value of ' . $actionId);
     Mockster::stub($this->action->isModifying())->will()->return_(false);
     Mockster::stub($this->action->caption())->will()->return_('My Foo');
     Mockster::stub($this->action->parameters())->will()->return_([new Parameter('one', new StringType())]);
 }
コード例 #11
0
 private function createMethodAction($class, $method)
 {
     $parser = Mockster::of(CommentParser::class);
     Mockster::stub($parser->parse(Argument::any()))->will()->forwardTo(function ($comment) {
         if (!$comment) {
             return null;
         }
         return $comment . ' (parsed)';
     });
     return new MethodAction(new $class(), $method, new TypeFactory(), Mockster::mock($parser));
 }
コード例 #12
0
 private function whenICreateAnObjectActionFrom($className)
 {
     $this->action = Mockster::of(ObjectAction::class);
     $parser = Mockster::of(CommentParser::class);
     Mockster::stub($parser->parse(Argument::any()))->will()->forwardTo(function ($comment) {
         return $comment . ' (parsed)';
     });
     $this->uut = Mockster::uut($this->action, [$className, new TypeFactory(), Mockster::mock($parser)]);
 }
コード例 #13
0
ファイル: ActionFieldSpec.php プロジェクト: jonfm/domin
 private function givenAWebFieldRenderingWith($callback)
 {
     $field = Mockster::of(WebField::class);
     $this->fields->add(Mockster::mock($field));
     Mockster::stub($field->handles(Arg::any()))->will()->return_(true);
     //        Mockster::stub($field->inflate(Arg::any(), Arg::any()))->will()->forwardTo(function (Parameter $p, $s) {
     //            return $p->getName() . '_' . $s . '(inflated)';
     //        });
     Mockster::stub($field->render(Arg::any(), Arg::any()))->will()->forwardTo($callback);
 }
コード例 #14
0
ファイル: ExecuteActionSpec.php プロジェクト: rtens/domin
 private function givenARendererFor_RenderingWith($value, $callback)
 {
     $renderer = Mockster::of(Renderer::class);
     $this->renderers->add(Mockster::mock($renderer));
     Mockster::stub($renderer->handles($value))->will()->return_(true);
     Mockster::stub($renderer->render(Argument::any()))->will()->forwardTo($callback);
 }
コード例 #15
0
 private function whenIListAllActions()
 {
     $resource = new IndexResource(new Factory(), $this->app, Mockster::mock($this->cookies));
     $resource->doGet($this->makeRequest());
 }
コード例 #16
0
ファイル: ShowMenuSpec.php プロジェクト: rtens/domin
 private function givenTheAction($id)
 {
     $this->actions->add($id, Mockster::mock(Mockster::of(Action::class)));
 }
コード例 #17
0
ファイル: ObjectRendererSpec.php プロジェクト: rtens/domin
 function collectHeadElementsOfProperties()
 {
     $propertyRenderer = Mockster::of(WebRenderer::class);
     $this->renderers->add(Mockster::mock($propertyRenderer));
     Mockster::stub($propertyRenderer->handles(Argument::any()))->will()->return_(true);
     Mockster::stub($propertyRenderer->headElements('uno'))->will()->return_([new Element('one')]);
     Mockster::stub($propertyRenderer->headElements('bar'))->will()->return_([new Element('foo')]);
     $elements = $this->renderer->headElements(json_decode('{"one":"uno", "foo":"bar"}'));
     $this->assert->size($elements, 2);
     $this->assert((string) $elements[0], '<one></one>');
     $this->assert((string) $elements[1], '<foo></foo>');
 }
コード例 #18
0
ファイル: ListActionSpec.php プロジェクト: jonfm/domin
 private function givenIRegisteredTheAction($id)
 {
     $this->registry->add($id, Mockster::mock(Action::class));
 }
コード例 #19
0
ファイル: ActionFixture.php プロジェクト: rtens/domin
 public function given_HasTheParameter_OfATypeMatching($id, $name, $matching, $required = false)
 {
     $type = Mockster::of(Type::class);
     Mockster::stub($type->is($matching))->will()->return_(true);
     $this->params[$id][] = new Parameter($name, Mockster::mock($type), $required);
 }
コード例 #20
0
ファイル: ExecuteActionSpec.php プロジェクト: jonfm/domin
 private function givenAWebFieldRequiringTheHeadElements($elements)
 {
     $field = Mockster::of(WebField::class);
     $this->fields->add(Mockster::mock($field));
     Mockster::stub($field->handles(Arg::any()))->will()->return_(true);
     Mockster::stub($field->inflate(Arg::any(), Arg::any()))->will()->forwardTo(function ($s) {
         return $s . '(inflated)';
     });
     Mockster::stub($field->headElements(Arg::any()))->will()->forwardTo($elements);
 }
コード例 #21
0
ファイル: ExecuteActionSpec.php プロジェクト: rtens/domin
 private function whenIExecute_With($id, $params)
 {
     $fields = new FieldRegistry();
     foreach ($this->fields as $field) {
         $fields->add(Mockster::mock($field));
     }
     $reader = new FakeParameterReader($params);
     $executor = new Executor($this->action->registry, $fields, $reader, $this->access);
     $this->result = $executor->execute($id);
 }
コード例 #22
0
ファイル: ExecuteActionSpec.php プロジェクト: jonfm/domin
 private function whenIExecute($id)
 {
     $fields = new FieldRegistry();
     foreach ($this->fields as $field) {
         $fields->add(Mockster::mock($field));
     }
     $renderers = new RendererRegistry();
     foreach ($this->renderers as $renderer) {
         $renderers->add(Mockster::mock($renderer));
     }
     $executor = new Executor($this->action->registry, $fields, $renderers, Mockster::mock($this->reader));
     $this->result = $executor->execute($id);
 }
コード例 #23
0
ファイル: TableRendererSpec.php プロジェクト: jonfm/domin
 function printLinks()
 {
     $this->renderers->add(new ElementRenderer());
     $this->renderers->add(new PrimitiveRenderer());
     $this->actions->add('foo', Mockster::mock(Action::class));
     $this->actions->add('bar', Mockster::mock(Action::class));
     $this->actions->add('baz', Mockster::mock(Action::class));
     $this->links->add(new GenericLink('foo', function ($item) {
         return $item['id'] == 'foo item';
     }));
     $this->links->add(new GenericLink('bar', function ($item) {
         return $item['id'] == 'bar item';
     }));
     $this->links->add(new GenericLink('baz', function ($item) {
         return $item['id'] == 'bar item';
     }));
     $rendered = $this->tableRenderer->render(new ArrayTable([['id' => 'foo item'], ['id' => 'bar item']]));
     $this->assert->contains($rendered, '<div class="dropdown">' . "\n" . '<button class="btn btn-xs btn-primary dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">' . "\n" . 'Actions' . "\n" . '<span class="caret"></span>' . "\n" . '</button>' . "\n" . '<ul class="dropdown-menu">' . '<li><a class="" href="http://example.com/base/foo"></a></li>' . '</ul>' . "\n" . '</div>' . "\n" . '</td>' . "\n" . '<td>foo item</td>');
     $this->assert->contains($rendered, '<div class="dropdown">' . "\n" . '<button class="btn btn-xs btn-primary dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">' . "\n" . 'Actions' . "\n" . '<span class="caret"></span>' . "\n" . '</button>' . "\n" . '<ul class="dropdown-menu">' . "\n" . '<li><a class="" href="http://example.com/base/bar"></a></li>' . "\n" . '<li><a class="" href="http://example.com/base/baz"></a></li>' . "\n" . '</ul>' . "\n" . '</div>' . "\n" . '</td>' . "\n" . '<td>bar item</td>');
 }
コード例 #24
0
ファイル: IntroductionTest.php プロジェクト: rtens/mockster
    /**
     * A typical test with *mockster* might look like this.
     */
    public function testQuickStart()
    {
        /**
         * <a href="javascript:" onclick="$('#quickStartDefinitions').toggle();">
         * Show class definitions for this example
         * </a><div id="quickStartDefinitions" style="display: none;">
         */
        eval('
            class FooClass {

                /** @var MyDatabase <- */
                protected $database;

                public function setUserName($id, $name) {
                    $user = $this->database->readUser($id);
                    $user->setName($name);
                    $this->database->update($user);
                }
            }

            class MyDatabase {

                public function readUser($id) {
                    // [...]
                }

                public function update($object) {
                    // [...]
                }
            }

            class MyUser {

                public function setName($name) {
                    // [...]
                }
            }');
        // </div>
        /*
         * First create `Mockster` instances of the classes we're gonna mock.
         */
        $foo = Mockster::of('FooClass');
        $user = Mockster::of('MyUser');
        /*
         * Then configure the behaviour of the dependencies of our *Unit Under Test*.
         *
         * The `Database` should return a mock of the `User` class when called with the argument `1`.
         */
        $foo->database->readUser(1)->will()->return_(Mockster::mock($user));
        /*
         * Now execute the code to be tested.
         *
         * The `uut()` method will create an instance of the `FooClass` with
         * all it's dependencies replaced by mocks and none of it's methods stubbed.
         */
        Mockster::uut($foo)->setUserName(1, 'Bart');
        /*
         * Last, assert the expected behaviour.
         *
         * There should have been a call to `User::setName()` with the argument
         * `'Bart'` and a call on `Database::update()`.
         */
        $this->assert($user->setName('Bart')->has()->beenCalled());
        $this->assert($foo->database->update(Argument::any())->has()->beenCalled());
    }
コード例 #25
0
ファイル: ActionFieldSpec.php プロジェクト: rtens/domin
 private function givenAWebFieldRenderingWith($callback)
 {
     $field = Mockster::of(WebField::class);
     $this->fields->add(Mockster::mock($field));
     Mockster::stub($field->handles(Arg::any()))->will()->return_(true);
     Mockster::stub($field->render(Arg::any(), Arg::any()))->will()->forwardTo($callback);
 }