| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 | 
							- <?php
 
- namespace Tests\Unit\Customers;
 
- use App\Shop\Addresses\Address;
 
- use App\Shop\Customers\Customer;
 
- use App\Shop\Customers\Exceptions\CreateCustomerInvalidArgumentException;
 
- use App\Shop\Customers\Exceptions\CustomerNotFoundException;
 
- use App\Shop\Customers\Exceptions\UpdateCustomerInvalidArgumentException;
 
- use App\Shop\Customers\Repositories\CustomerRepository;
 
- use App\Shop\Customers\Transformations\CustomerTransformable;
 
- use App\Shop\Orders\Order;
 
- use Illuminate\Database\Eloquent\Collection;
 
- use Illuminate\Support\Facades\Hash;
 
- use Tests\TestCase;
 
- class CustomerUnitTest extends TestCase
 
- {
 
-     use CustomerTransformable;
 
-     
 
-     /** @test */
 
-     public function it_can_search_for_customers()
 
-     {
 
-         $name = $this->faker->name;
 
-         $customer = factory(Customer::class)->create([
 
-             'name' => $name,
 
-             'email' => $this->faker->email
 
-         ]);
 
-         $repo = new CustomerRepository($customer);
 
-         $result = $repo->searchCustomer($name);
 
-         $this->assertGreaterThan(0, $result->count());
 
-     }
 
-     
 
-     /** @test */
 
-     public function it_can_return_all_the_orders_of_the_customer()
 
-     {
 
-         $customer = factory(Customer::class)->create();
 
-         $order = factory(Order::class)->create([
 
-             'customer_id' => $customer->id
 
-         ]);
 
-         $repo = new CustomerRepository($customer);
 
-         $orders = $repo->findOrders();
 
-         $this->assertInstanceOf(Collection::class, $orders);
 
-         foreach ($orders as $o) {
 
-             $this->assertEquals($order->id, $o->id);
 
-             $this->assertEquals($customer->id, $o->customer_id);
 
-         }
 
-     }
 
-     /** @test */
 
-     public function it_can_transform_the_customer()
 
-     {
 
-         $customer = factory(Customer::class)->create();
 
-         $repo = new CustomerRepository($customer);
 
-         $customerFromDb = $repo->findCustomerById($customer->id);
 
-         $cust = $this->transformCustomer($customer);
 
-         $this->assertInternalType('string', $customerFromDb->status);
 
-         $this->assertInternalType('int', $cust->status);
 
-     }
 
-     
 
-     /** @test */
 
-     public function it_errors_updating_the_customer_name_with_null_value()
 
-     {
 
-         $this->expectException(UpdateCustomerInvalidArgumentException::class);
 
-         $cust = factory(Customer::class)->create();
 
-         $customer = new CustomerRepository($cust);
 
-         $customer->updateCustomer(['name' => null]);
 
-     }
 
-     /** @test */
 
-     public function it_errors_creating_the_customer()
 
-     {
 
-         $this->expectException(CreateCustomerInvalidArgumentException::class);
 
-         $this->expectExceptionCode(500);
 
-         $customer = new CustomerRepository(new Customer);
 
-         $customer->createCustomer([]);
 
-     }
 
-     /** @test */
 
-     public function it_can_update_customers_password()
 
-     {
 
-         $cust = factory(Customer::class)->create();
 
-         $customer = new CustomerRepository($cust);
 
-         $customer->updateCustomer([
 
-             'name' => $this->faker->name,
 
-             'email' => $this->faker->email,
 
-             'status' => 1,
 
-             'password' => 'unknown'
 
-         ]);
 
-         $this->assertTrue(Hash::check('unknown', bcrypt($cust->password)));
 
-     }
 
-     
 
-     /** @test */
 
-     public function it_can_retrieve_the_address_attached_to_the_customer()
 
-     {
 
-         $cust = factory(Customer::class)->create();
 
-         $address = factory(Address::class)->create();
 
-         $customerRepo = new CustomerRepository($cust);
 
-         $customerRepo->attachAddress($address);
 
-         $lists = $customerRepo->findAddresses();
 
-         $this->assertCount(1, $lists);
 
-     }
 
-     
 
-     /** @test */
 
-     public function it_can_attach_the_address()
 
-     {
 
-         $cust = factory(Customer::class)->create();
 
-         $address = factory(Address::class)->create();
 
-         $customer = new CustomerRepository($cust);
 
-         $attachedAddress = $customer->attachAddress($address);
 
-         $this->assertEquals($address->alias, $attachedAddress->alias);
 
-         $this->assertEquals($address->address_1, $attachedAddress->address_1);
 
-     }
 
-     
 
-     /** @test */
 
-     public function it_can_soft_delete_a_customer()
 
-     {
 
-         $customer = factory(Customer::class)->create();
 
-         $customerRepo = new CustomerRepository($customer);
 
-         $delete = $customerRepo->deleteCustomer();
 
-         $this->assertTrue($delete);
 
-         $this->assertDatabaseHas('customers', $customer->toArray());
 
-     }
 
-     /** @test */
 
-     public function it_fails_when_the_customer_is_not_found()
 
-     {
 
-         $this->expectException(CustomerNotFoundException::class);
 
-         $customer = new CustomerRepository(new Customer);
 
-         $customer->findCustomerById(999);
 
-     }
 
-     /** @test */
 
-     public function it_can_find_a_customer()
 
-     {
 
-         $data = [
 
-             'name' => $this->faker->name,
 
-             'email' => $this->faker->email,
 
-             'password' => 'secret'
 
-         ];
 
-         $customer = new CustomerRepository(new Customer);
 
-         $created = $customer->createCustomer($data);
 
-         $found = $customer->findCustomerById($created->id);
 
-         $this->assertInstanceOf(Customer::class, $found);
 
-         $this->assertEquals($data['name'], $found->name);
 
-         $this->assertEquals($data['email'], $found->email);
 
-     }
 
-     
 
-     /** @test */
 
-     public function it_can_update_the_customer()
 
-     {
 
-         $cust = factory(Customer::class)->create();
 
-         $customer = new CustomerRepository($cust);
 
-         $update = [
 
-             'name' => $this->faker->name,
 
-         ];
 
-         $updated = $customer->updateCustomer($update);
 
-         $this->assertTrue($updated);
 
-         $this->assertEquals($update['name'], $cust->name);
 
-         $this->assertDatabaseHas('customers', $update);
 
-     }
 
-     /** @test */
 
-     public function it_can_create_a_customer()
 
-     {
 
-         $data = [
 
-             'name' => $this->faker->name,
 
-             'email' => $this->faker->email,
 
-             'password' => 'secret'
 
-         ];
 
-         $customer = new CustomerRepository(new Customer);
 
-         $created = $customer->createCustomer($data);
 
-         $this->assertInstanceOf(Customer::class, $created);
 
-         $this->assertEquals($data['name'], $created->name);
 
-         $this->assertEquals($data['email'], $created->email);
 
-         $collection = collect($data)->except('password');
 
-         $this->assertDatabaseHas('customers', $collection->all());
 
-     }
 
- }
 
 
  |