| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 | 
							- <?php
 
- namespace Tests\Unit\ProductAttributes;
 
- use App\Shop\Attributes\Attribute;
 
- use App\Shop\Attributes\Repositories\AttributeRepository;
 
- use App\Shop\AttributeValues\AttributeValue;
 
- use App\Shop\AttributeValues\Repositories\AttributeValueRepository;
 
- use App\Shop\ProductAttributes\Exceptions\ProductAttributeNotFoundException;
 
- use App\Shop\ProductAttributes\ProductAttribute;
 
- use App\Shop\ProductAttributes\Repositories\ProductAttributeRepository;
 
- use App\Shop\Products\Product;
 
- use App\Shop\Products\Repositories\ProductRepository;
 
- use Tests\TestCase;
 
- class ProductAttributeUnitTest extends TestCase
 
- {
 
-     /** @test */
 
-     public function it_throws_error_when_the_product_attribute_is_not_found()
 
-     {
 
-         $this->expectException(ProductAttributeNotFoundException::class);
 
-         $productAttributeRepo = new ProductAttributeRepository(new ProductAttribute);
 
-         $productAttributeRepo->findProductAttributeById(999);
 
-     }
 
-     
 
-     /** @test */
 
-     public function it_can_find_the_product_attribute_by_id()
 
-     {
 
-         $productAttribute = factory(ProductAttribute::class)->create([
 
-             'product_id' => $this->product->id
 
-         ]);
 
-         $productAttributeRepo = new ProductAttributeRepository(new ProductAttribute);
 
-         $found = $productAttributeRepo->findProductAttributeById($productAttribute->id);
 
-         $this->assertEquals($productAttribute->quantity, $found->quantity);
 
-         $this->assertEquals($productAttribute->price, $found->price);
 
-     }
 
-     /** @test */
 
-     public function it_can_sync_the_attribute_values_to_product_attributes()
 
-     {
 
-         $attribute = factory(Attribute::class)->create(['name' => 'Color']);
 
-         $attributeValueRepo = new AttributeValueRepository(new AttributeValue);
 
-         $created = $attributeValueRepo->createAttributeValue($attribute, ['value' => 'green']);
 
-         $attributeRepo = new AttributeRepository($attribute);
 
-         $associated = $attributeRepo->associateAttributeValue($created);
 
-         $this->assertInstanceOf(AttributeValue::class, $created);
 
-         $this->assertInstanceOf(AttributeValue::class, $associated);
 
-         $this->assertEquals($created->name, $associated->name);
 
-     }
 
-     /** @test */
 
-     public function it_returns_null_deleting_non_existing_product_attribute()
 
-     {
 
-         $product = factory(Product::class)->create();
 
-         $productRepo = new ProductRepository($product);
 
-         $deleted = $productRepo->removeProductAttribute(new ProductAttribute);
 
-         $this->assertNull($deleted);
 
-     }
 
-     /** @test */
 
-     public function it_can_remove_product_attribute()
 
-     {
 
-         $data = [
 
-             'quantity' => 1,
 
-             'price' => 10.45
 
-         ];
 
-         $productAttribute = new ProductAttribute($data);
 
-         $product = factory(Product::class)->create();
 
-         $productRepo = new ProductRepository($product);
 
-         $created = $productRepo->saveProductAttributes($productAttribute);
 
-         $deleted = $productRepo->removeProductAttribute($created);
 
-         $this->assertTrue($deleted);
 
-     }
 
-     /** @test */
 
-     public function it_can_create_product_attribute()
 
-     {
 
-         $data = [
 
-             'quantity' => 1,
 
-             'price' => 10.45
 
-         ];
 
-         $productAttribute = new ProductAttribute($data);
 
-         $product = factory(Product::class)->create();
 
-         $productRepo = new ProductRepository($product);
 
-         $created = $productRepo->saveProductAttributes($productAttribute);
 
-         $this->assertInstanceOf(ProductAttribute::class, $created);
 
-         $this->assertInstanceOf(Product::class, $productAttribute->product);
 
-         $this->assertEquals($data['quantity'], $created->quantity);
 
-         $this->assertEquals($data['price'], $created->price);
 
-         $this->assertEquals($product->name, $created->product->name);
 
-         $this->assertEquals($product->price, $created->product->price);
 
-     }
 
- }
 
 
  |