| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 | 
							- <?php
 
- namespace Tests\Unit\Address;
 
- use App\Shop\Addresses\Address;
 
- use App\Shop\Addresses\Exceptions\CreateAddressErrorException;
 
- use App\Shop\Addresses\Exceptions\AddressNotFoundException;
 
- use App\Shop\Addresses\Repositories\AddressRepository;
 
- use App\Shop\Addresses\Transformations\AddressTransformable;
 
- use App\Shop\Cities\Repositories\CityRepository;
 
- use App\Shop\Customers\Customer;
 
- use App\Shop\Customers\Repositories\CustomerRepository;
 
- use App\Shop\Orders\Order;
 
- use App\Shop\Provinces\Province;
 
- use App\Shop\Cities\City;
 
- use App\Shop\Countries\Country;
 
- use Tests\TestCase;
 
- class AddressUnitTest extends TestCase
 
- {
 
-     use AddressTransformable;
 
-     /** @test */
 
-     public function it_shows_the_orders_for_this_address()
 
-     {
 
-         $address = factory(Address::class)->create();
 
-         factory(Order::class)->create([
 
-             'address_id' => $address->id
 
-         ]);
 
-         $repo = new AddressRepository($address);
 
-         $orders = $repo->findOrders();
 
-         $orders->each(function ($item) use ($address) {
 
-             $this->assertEquals($address->id, $item->address_id);
 
-         });
 
-     }
 
-     /** @test */
 
-     public function it_returns_the_country_of_the_address()
 
-     {
 
-         $country = factory(Country::class)->create();
 
-         $province = factory(Province::class)->create();
 
-         $city = factory(City::class)->create();
 
-         $address = factory(Address::class)->create([
 
-             'country_id' => $country->id,
 
-             'province_id' => $province->id,
 
-             'city' => $city->name
 
-         ]);
 
-         $repo = new AddressRepository($address);
 
-         $foundCountry = $repo->findCountry();
 
-         $foundProvince = $repo->findProvince();
 
-         $cityRepo = new CityRepository($city);
 
-         $foundCity = $cityRepo->findCityByName($address->city);
 
-         $this->assertInstanceOf(Country::class, $foundCountry);
 
-         $this->assertInstanceOf(Province::class, $foundProvince);
 
-         $this->assertInstanceOf(City::class, $foundCity);
 
-         $this->assertEquals($country->name, $foundCountry->name);
 
-         $this->assertEquals($province->name, $foundProvince->name);
 
-         $this->assertEquals($city->name, $foundCity->name);
 
-     }
 
-     /** @test */
 
-     public function it_can_transform_address()
 
-     {
 
-         $city = factory(City::class)->create();
 
-         $province = factory(Province::class)->create();
 
-         $country = factory(Country::class)->create();
 
-         $customer = factory(Customer::class)->create();
 
-         $address = factory(Address::class)->create([
 
-             'city' => $city->name,
 
-             'province_id' => $province->id,
 
-             'country_id' => $country->id,
 
-             'customer_id' => $customer->id,
 
-         ]);
 
-         $transformed = $this->transformAddress($address);
 
-         $this->assertEquals($city->name, $transformed->city);
 
-         $this->assertEquals($province->name, $transformed->province);
 
-         $this->assertEquals($country->name, $transformed->country);
 
-         $this->assertEquals($customer->name, $transformed->customer);
 
-     }
 
-     /** @test */
 
-     public function it_can_search_the_address()
 
-     {
 
-         $address1 = $this->faker->address;
 
-         $address = factory(Address::class)->create([
 
-             'address_1' => $address1
 
-         ]);
 
-         $repo = new AddressRepository(new Address());
 
-         $results = $repo->searchAddress(str_limit($address->address_1, 5, ''));
 
-         $this->assertTrue((bool) $results->count());
 
-     }
 
-     /** @test */
 
-     public function it_can_return_the_owner_of_the_address()
 
-     {
 
-         $customer = factory(Customer::class)->create();
 
-         $address = factory(Address::class)->create(['customer_id' => $customer->id]);
 
-         $addressRepo = new AddressRepository($address);
 
-         $found = $addressRepo->findCustomer();
 
-         $this->assertEquals($customer->name, $found->name);
 
-     }
 
-     /** @test */
 
-     public function it_can_be_attached_to_a_customer()
 
-     {
 
-         $customer = factory(Customer::class)->create();
 
-         $address = factory(Address::class)->create();
 
-         $addressRepo = new AddressRepository($address);
 
-         $addressRepo->attachToCustomer($address, $customer);
 
-         $this->assertEquals($customer->name, $address->customer->name);
 
-     }
 
-     /** @test */
 
-     public function it_errors_when_the_address_is_not_found()
 
-     {
 
-         $this->expectException(AddressNotFoundException::class);
 
-         $address = new AddressRepository(new Address);
 
-         $address->findAddressById(999);
 
-     }
 
-     /** @test */
 
-     public function it_can_list_all_the_addresses()
 
-     {
 
-         $address = factory(Address::class)->create();
 
-         $address = new AddressRepository($address);
 
-         $addresses = $address->listAddress();
 
-         foreach ($addresses as $list) {
 
-             $this->assertDatabaseHas('addresses', ['alias' => $list->alias]);
 
-         }
 
-     }
 
-     /** @test */
 
-     public function it_errors_when_creating_an_address()
 
-     {
 
-         $this->expectException(CreateAddressErrorException::class);
 
-         $address = new AddressRepository(new Address);
 
-         $address->createAddress([]);
 
-     }
 
-     /** @test */
 
-     public function it_can_show_the_address()
 
-     {
 
-         $address = factory(Address::class)->create();
 
-         $this->assertDatabaseHas('addresses', ['id' => $address->id]);
 
-     }
 
-     /** @test */
 
-     public function it_can_list_all_the_addresses_of_the_customer()
 
-     {
 
-         $customer = factory(Customer::class)->create();
 
-         factory(Address::class)->create(['customer_id' => $customer->id]);
 
-         $customerRepo = new CustomerRepository($customer);
 
-         $lists = $customerRepo->findAddresses();
 
-         $this->assertCount(1, $lists);
 
-     }
 
-     /** @test */
 
-     public function it_can_soft_delete_the_address()
 
-     {
 
-         $created = factory(Address::class)->create();
 
-         $address = new AddressRepository($created);
 
-         $address->deleteAddress();
 
-         $this->assertDatabaseHas('addresses', ['id' => $created->id]);
 
-     }
 
-     /** @test */
 
-     public function it_can_update_the_address()
 
-     {
 
-         $address = factory(Address::class)->create();
 
-         $data = [
 
-             'alias' => $this->faker->unique()->word,
 
-             'address_1' => $this->faker->unique()->word,
 
-             'address_2' => null,
 
-             'zip' => 1101,
 
-             'status' => 1
 
-         ];
 
-         $addressRepo = new AddressRepository($address);
 
-         $updated = $addressRepo->updateAddress($data);
 
-         $address = $addressRepo->findAddressById($address->id);
 
-         $this->assertTrue($updated);
 
-         $this->assertEquals($data['alias'], $address->alias);
 
-         $this->assertEquals($data['address_1'], $address->address_1);
 
-         $this->assertEquals($data['address_2'], $address->address_2);
 
-         $this->assertEquals($data['zip'], $address->zip);
 
-         $this->assertEquals($data['status'], $address->status);
 
-     }
 
-     /** @test */
 
-     public function it_can_create_the_address()
 
-     {
 
-         $country = factory(Country::class)->create();
 
-         $province = factory(Province::class)->create();
 
-         $city = factory(City::class)->create();
 
-         $customer = factory(Customer::class)->create();
 
-         $data = [
 
-             'alias' => 'home',
 
-             'address_1' => $this->faker->streetName,
 
-             'address_2' => $this->faker->streetAddress,
 
-             'zip' => $this->faker->postcode,
 
-             'city' => $city->name,
 
-             'province_id' => $province->id,
 
-             'country_id' => $country->id,
 
-             'customer_id' => $customer->id,
 
-             'status' => 1
 
-         ];
 
-         $addressRepo = new AddressRepository(new Address);
 
-         $address = $addressRepo->createAddress($data);
 
-         $this->assertInstanceOf(Address::class, $address);
 
-         $this->assertEquals($data['alias'], $address->alias);
 
-         $this->assertEquals($data['address_1'], $address->address_1);
 
-         $this->assertEquals($data['address_2'], $address->address_2);
 
-         $this->assertEquals($data['zip'], $address->zip);
 
-         $this->assertEquals($data['status'], $address->status);
 
-     }
 
- }
 
 
  |