app->instance(PaymentGateway::class, $paymentGateway); // Arrange // Create a concert $concert = factory(Concert::class)->create(['ticket_price' => 3250]); // Act // Purchase concert tickets $this->json('POST', "/concerts/{$concert->id}/orders", [ 'email' => 'john@example.com', 'ticket_quantity' => 3, 'payment_token' => $paymentGateway->getValidTestToken(), ]); // Assert $this->assertResponseStatus(201); // Make sure the customer was charged the correct amount $this->assertEquals(9750, $paymentGateway->totalCharges()); // Make sure that an order exists for this customer $order = $concert->orders()->where('email', 'john@example.com')->first(); $this->assertNotNull($order); $this->assertEquals(3, $order->tickets()->count()); } }