ProductTest.php 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. <?php
  2. namespace Tests\Unit\Models;
  3. use App\Models\File;
  4. use App\Models\MafOrder;
  5. use App\Models\Product;
  6. use Illuminate\Database\Eloquent\Relations\BelongsTo;
  7. use Illuminate\Database\Eloquent\Relations\BelongsToMany;
  8. use Illuminate\Database\Eloquent\Relations\HasMany;
  9. use Illuminate\Foundation\Testing\RefreshDatabase;
  10. use Tests\TestCase;
  11. class ProductTest extends TestCase
  12. {
  13. use RefreshDatabase;
  14. protected $seed = true;
  15. public function test_product_price_stored_as_kopeks_returned_as_rubles(): void
  16. {
  17. $product = Product::factory()->create([
  18. 'product_price' => 150.50,
  19. ]);
  20. $product->refresh();
  21. $this->assertEquals(150.50, $product->product_price);
  22. }
  23. public function test_installation_price_accessor(): void
  24. {
  25. $product = Product::factory()->create([
  26. 'installation_price' => 200.00,
  27. ]);
  28. $product->refresh();
  29. $this->assertEquals(200.00, $product->installation_price);
  30. }
  31. public function test_total_price_accessor(): void
  32. {
  33. $product = Product::factory()->create([
  34. 'total_price' => 300.00,
  35. ]);
  36. $product->refresh();
  37. $this->assertEquals(300.00, $product->total_price);
  38. }
  39. public function test_price_txt_contains_ruble_sign(): void
  40. {
  41. $product = Product::factory()->create([
  42. 'product_price' => 500.00,
  43. ]);
  44. $product->refresh();
  45. $this->assertStringContainsString('₽', $product->product_price_txt);
  46. }
  47. public function test_soft_deletes(): void
  48. {
  49. $product = Product::factory()->create();
  50. $product->delete();
  51. $this->assertTrue($product->trashed());
  52. }
  53. public function test_has_relations_false_when_no_relations(): void
  54. {
  55. $product = Product::factory()->create();
  56. $this->assertFalse($product->hasRelations());
  57. }
  58. public function test_has_many_maf_orders(): void
  59. {
  60. $product = Product::factory()->create();
  61. MafOrder::factory()->forProduct($product)->create();
  62. $this->assertGreaterThan(0, $product->maf_orders()->withoutGlobalScopes()->count());
  63. }
  64. public function test_relations_exist(): void
  65. {
  66. $product = Product::factory()->create();
  67. $this->assertInstanceOf(BelongsToMany::class, $product->orders());
  68. $this->assertInstanceOf(BelongsTo::class, $product->certificate());
  69. $this->assertInstanceOf(HasMany::class, $product->maf_orders());
  70. }
  71. }