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); }
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])); } }
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>'); }
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); }
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)); }
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>'); }
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>'); }
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'); }
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(), ''); }
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())]); }
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)); }
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)]); }
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); }
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); }
private function whenIListAllActions() { $resource = new IndexResource(new Factory(), $this->app, Mockster::mock($this->cookies)); $resource->doGet($this->makeRequest()); }
private function givenTheAction($id) { $this->actions->add($id, Mockster::mock(Mockster::of(Action::class))); }
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>'); }
private function givenIRegisteredTheAction($id) { $this->registry->add($id, Mockster::mock(Action::class)); }
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); }
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); }
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); }
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); }
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>'); }
/** * 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()); }
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); }