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);
 }
Beispiel #2
0
 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();
 }