gruene-seele/tests/Feature/ProductPhase1Test.php

92 lines
2.6 KiB
PHP

<?php
use App\Models\Ingredient;
use App\Models\Product;
use App\Models\ProductIngredient;
use App\Repositories\ProductRepository;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
uses(TestCase::class, RefreshDatabase::class);
test('product saves inci pivot pos gram factor and shelf life', function () {
$product = Product::create([
'name' => 'Salbe',
'title' => 'Salbe',
'active' => true,
]);
$a = Ingredient::create([
'name' => 'Shea',
'trans_name' => '',
'inci' => 'Butyrospermum',
'trans_inci' => '',
'effect' => '',
'trans_effect' => '',
'active' => true,
'pos' => 0,
'default_factor' => 1.15,
]);
$repo = new ProductRepository($product);
$repo->update([
'id' => (string) $product->id,
'name' => $product->name,
'title' => $product->title,
'active' => '1',
'product_inci_sync_sent' => '1',
'pi_ingredient_id' => [(string) $a->id],
'pi_gram' => ['10,5'],
'pi_factor' => ['1,20'],
'shelf_life_type' => 'fixed',
'shelf_life_months' => '12',
]);
$product->refresh();
expect($product->shelf_life_type)->toBe('fixed');
expect($product->shelf_life_months)->toBe(12);
$pivot = $product->p_ingredients()->where('ingredients.id', $a->id)->first();
expect($pivot)->not->toBeNull();
expect((float) $pivot->pivot->gram)->toBe(10.5);
expect((float) $pivot->pivot->factor)->toBe(1.20);
expect((int) $pivot->pivot->pos)->toBe(0);
});
test('product copy preserves inci pivot fields', function () {
$source = Product::create([
'name' => 'Original',
'title' => 'Original',
'active' => true,
'shelf_life_type' => 'pao',
]);
$ing = Ingredient::create([
'name' => 'Oel',
'trans_name' => '',
'inci' => 'Oil',
'trans_inci' => '',
'effect' => '',
'trans_effect' => '',
'active' => true,
'pos' => 0,
]);
ProductIngredient::create([
'product_id' => $source->id,
'ingredient_id' => $ing->id,
'pos' => 2,
'gram' => 3.25,
'factor' => 1.08,
]);
$repo = new ProductRepository(new Product);
$copy = $repo->copy($source->fresh());
$row = ProductIngredient::where('product_id', $copy->id)->where('ingredient_id', $ing->id)->first();
expect($row)->not->toBeNull();
expect((float) $row->gram)->toBe(3.25);
expect((float) $row->factor)->toBe(1.08);
expect($row->pos)->toBe(2);
expect($copy->shelf_life_type)->toBe('pao');
});