public function testAddBookActionSendsAddBookCommand() { $this->commandBus->expects(self::once())->method('send')->will(self::returnCallback(function (Command $command) { self::assertInstanceOf(AddBook::class, $command); })); $book = new Book(Uuid::createFromValue(null), new Authors([new Author('first', 'last')]), 'title', 'isbn', true, -1); $resource = BookResource::createFromReadModel($book); $this->service->expects(self::once())->method('getBook')->will(self::returnValue($book)); $controller = new BooksController($this->viewBuilder, $this->service, $this->commandBus); $controller->addBookAction($resource); }
public function testCreateFromReadModelMapsDocumentToResource() { $id = Uuid::createNew(); $authors = new Authors(); $title = 'title'; $isbn = 'isbn'; $available = true; $version = 1; $document = new BookDocument($id, $authors, $title, $isbn, $available, $version); $resource = BookResource::createFromReadModel($document); self::assertEquals($id, $resource->getId()); self::assertEquals($title, $resource->getTitle()); self::assertEquals($isbn, $resource->getISBN()); self::assertEquals($available, $resource->isAvailable()); }
/** * @Rest\Post("", * condition="request.headers.get('content-type') matches '/domain-model=add-book/i'" * ) * @Rest\View(statusCode=201) * * @ParamConverter("bookResource", * class="AppBundle\Controller\Resource\Book", * converter="fos_rest.request_body" * ) * * @param BookResource $bookResource * @return View * @throws HttpException */ public function addBookAction(BookResource $bookResource) { $id = Uuid::createNew(); $authors = array_map(function (AuthorResource $author) use($id) { return new AddAuthor($id, $author->getFirstName(), $author->getLastName(), -1); }, $bookResource->getAuthors()); $command = new AddBook($id, $authors, $bookResource->getTitle(), $bookResource->getISBN()); $this->commandBus->send($command); $book = $this->bookService->getBook($id); return $this->viewBuilder->setDocument($book)->setVersion()->setLocation(static::BASE_ROUTE . $book->getId())->build(); }