/home2/mshostin/farms.ms-hostingladz.com/tests/Feature/MilkSaleTest.php
<?php
namespace Tests\Feature;
use App\Models\Farm;
use App\Models\GlobalSetting;
use App\Models\MilkSale;
use App\Models\Vendor;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class MilkSaleTest extends TestCase
{
use RefreshDatabase;
public function test_vendor_shared_across_farms_if_exists()
{
$farm1 = Farm::create(['name' => 'Farm 1']);
$farm2 = Farm::create(['name' => 'Farm 2']);
// Farm 1 adds a vendor
$vendorData = [
'name' => 'John Doe',
'phone' => '555-1234',
'address' => '123 Lane',
];
// Simulate logic to find or create
$vendor1 = Vendor::firstOrCreate(
['phone' => $vendorData['phone']],
['name' => $vendorData['name'], 'address' => $vendorData['address']]
);
$farm1->vendors()->syncWithoutDetaching($vendor1);
$this->assertDatabaseHas('vendors', ['phone' => '555-1234']);
$this->assertDatabaseHas('farm_vendor', ['farm_id' => $farm1->id, 'vendor_id' => $vendor1->id]);
// Farm 2 adds SAME vendor
$vendor2 = Vendor::where('phone', $vendorData['phone'])->where('name', $vendorData['name'])->first();
if ($vendor2) {
$farm2->vendors()->syncWithoutDetaching($vendor2);
} else {
$vendor2 = Vendor::create($vendorData);
$farm2->vendors()->attach($vendor2);
}
$this->assertEquals($vendor1->id, $vendor2->id);
$this->assertDatabaseCount('vendors', 1);
$this->assertDatabaseHas('farm_vendor', ['farm_id' => $farm2->id, 'vendor_id' => $vendor1->id]);
}
public function test_milk_sale_uses_admin_price()
{
$farm = Farm::create(['name' => 'Farm Test']);
$vendor = Vendor::create(['name' => 'V1', 'phone' => '111']);
$farm->vendors()->attach($vendor);
GlobalSetting::create(['key' => 'milk_default_price', 'value' => '100']);
$quantity = 10;
$price = GlobalSetting::where('key', 'milk_default_price')->value('value');
$sale = MilkSale::create([
'farm_id' => $farm->id,
'vendor_id' => $vendor->id,
'quantity' => $quantity,
'price_type' => 'admin',
'price_per_unit' => $price,
'total_amount' => $quantity * $price,
'sold_at' => now(),
]);
$this->assertDatabaseHas('milk_sales', [
'price_type' => 'admin',
'price_per_unit' => 100,
'total_amount' => 1000,
]);
}
public function test_milk_sale_uses_custom_price()
{
$farm = Farm::create(['name' => 'Farm Test 2']);
$vendor = Vendor::create(['name' => 'V1', 'phone' => '111']);
$farm->vendors()->attach($vendor);
$quantity = 10;
$customPrice = 120;
$sale = MilkSale::create([
'farm_id' => $farm->id,
'vendor_id' => $vendor->id,
'quantity' => $quantity,
'price_type' => 'custom',
'price_per_unit' => $customPrice,
'total_amount' => $quantity * $customPrice,
'sold_at' => now(),
]);
$this->assertDatabaseHas('milk_sales', [
'price_type' => 'custom',
'price_per_unit' => 120,
'total_amount' => 1200,
]);
}
}