/** @test */
 public function a_sale_can_be_completed()
 {
     $bookId = BookId::generate();
     $sellersId = MemberId::generate();
     $buyersId = MemberId::generate();
     $this->scenario->given([new BookOffered($bookId, $sellersId, "0534408133", 1500), new BookSoldToMember($bookId, $buyersId)])->when(new BookSaleCompleted($bookId))->then([]);
 }
 /**
  * Run the database seeds.
  *
  * @return void
  */
 public function run()
 {
     $repo = App::make(Books\BookRepository::class);
     $faker = App::make(Faker\Generator::class);
     foreach ($this->isbns as $isbn) {
         $sellersId = MemberId::generate();
         $bookId = Books\BookId::generate();
         $book = Books\Book::offer($bookId, $sellersId, $isbn, 1500);
         $repo->save($book);
     }
 }
 /**
  * @test
  */
 public function a_book_cannot_be_sold_twice()
 {
     $bookId = BookId::generate();
     $memberId = MemberId::generate();
     $buyersId1 = MemberId::generate();
     $buyersId2 = MemberId::generate();
     $book = Book::offer($bookId, $memberId, "0534408133", 1500);
     //15 euro
     $book->sellToMember($buyersId1);
     $this->expectException(\Exception::class);
     $this->expectExceptionMessage("A book cannot be sold twice");
     $book->sellToMember($buyersId2);
 }
 public function store(Request $req, BookRepository $repo)
 {
     $isbn = new \Isbn\Isbn();
     ///@todo validation
     if (!$isbn->check->identify($req->input('isbn'))) {
         throw new \Exception('Not an ISBN');
     }
     $isbn_10 = $isbn->hyphens->removeHyphens($req->input('isbn'));
     if ($isbn->check->identify($isbn_10) == 13) {
         $isbn_10 = $isbn->translate->to10($isbn_10);
     }
     $book = Book::offer(BookId::generate(), MemberId::generate(), $isbn_10, $req->input('price') * 100);
     $repo->save($book);
     return redirect('/books');
 }
 protected function createInstance()
 {
     $bookId = BookId::generate();
     return new BookOfferRetracted($bookId);
 }
 protected function createInstance()
 {
     $bookId = BookId::generate();
     $buyersId = MemberId::generate();
     return new BookSoldToMember($bookId, $buyersId);
 }
 protected function createInstance()
 {
     $bookId = BookId::generate();
     $sellersId = MemberId::generate();
     return new BookOffered($bookId, $sellersId, "0534408133", 1500);
 }
 protected function createInstance()
 {
     $bookId = BookId::generate();
     return new BookSaleCancelled($bookId);
 }
 protected function createInstance() : AvailableBook
 {
     $id = BookId::generate();
     return new AvailableBook($id, "Domain-driven design", "Eric J. Evans", 1599, "0534408133", "www.blabla.jpg", false);
 }