ContentTest

This commit is contained in:
2026-11-01 21:34:33 +01:00
parent e0592212e1
commit 9deef06169
+95
View File
@@ -407,4 +407,99 @@ class AdminContentTest extends TestCase
$this->assertEquals(45, (int) Setting::get('calc_default_markup')); $this->assertEquals(45, (int) Setting::get('calc_default_markup'));
$this->assertEquals(8, (int) Setting::get('calc_failure_rate')); $this->assertEquals(8, (int) Setting::get('calc_failure_rate'));
} }
public function test_3d_print_price_calculator_service_calculates_correctly(): void
{
$calculator = app(\App\Services\PriceCalculatorService::class);
// 100 grams, 4 hours, 1 color, PLA, 40% margin
$result = $calculator->calculate(
weightGrams: 100,
printTimeHours: 4.0,
colorCount: 1,
material: 'pla',
customMarkupPercent: 40.0
);
$this->assertArrayHasKey('suggested_price', $result);
$this->assertArrayHasKey('suggested_price_formatted', $result);
$this->assertArrayHasKey('breakdown', $result);
$this->assertArrayHasKey('material_cost', $result['breakdown']);
$this->assertArrayHasKey('electricity_cost', $result['breakdown']);
$this->assertArrayHasKey('machine_cost', $result['breakdown']);
$this->assertArrayHasKey('total_cost_price', $result['breakdown']);
$this->assertGreaterThan(5.0, $result['suggested_price']);
// Multi-color test: 4 colors should cost more than 1 color due to purge waste & setup
$multiColorResult = $calculator->calculate(
weightGrams: 100,
printTimeHours: 4.0,
colorCount: 4,
material: 'pla',
customMarkupPercent: 40.0
);
$this->assertGreaterThan($result['suggested_price'], $multiColorResult['suggested_price']);
$this->assertGreaterThan($result['breakdown']['material_cost'], $multiColorResult['breakdown']['material_cost']);
}
public function test_admin_can_use_calculate_price_api_endpoint(): void
{
$response = $this->actingAs($this->admin)->postJson(route('admin.products.calculate-price'), [
'weight_grams' => 120,
'print_time_hours' => 5.5,
'color_count' => 2,
'material' => 'petg',
'markup_percent' => 50,
]);
$response->assertStatus(200);
$response->assertJsonStructure([
'success',
'data' => [
'inputs',
'rates',
'breakdown' => [
'effective_weight_grams',
'material_cost',
'electricity_cost',
'machine_cost',
'handling_cost',
'failure_cost',
'total_cost_price',
'profit_amount',
'price_excl_vat',
'vat_amount',
'price_incl_vat_exact',
],
'suggested_price',
'suggested_price_formatted',
],
]);
}
public function test_admin_can_save_calculator_tariffs_in_content_settings(): void
{
$response = $this->actingAs($this->admin)->post(route('admin.content.update'), [
'calc_filament_price_kg' => '22.50',
'calc_electricity_kwh' => '0.40',
'calc_printer_wattage' => '180',
'calc_machine_hourly_rate' => '0.65',
'calc_handling_flat' => '2.00',
'calc_default_markup' => '45',
'calc_failure_rate' => '8',
]);
$response->assertRedirect(route('admin.content.index'));
Setting::flushCache();
$this->assertEquals(22.50, (float) Setting::get('calc_filament_price_kg'));
$this->assertEquals(0.40, (float) Setting::get('calc_electricity_kwh'));
$this->assertEquals(180, (int) Setting::get('calc_printer_wattage'));
$this->assertEquals(0.65, (float) Setting::get('calc_machine_hourly_rate'));
$this->assertEquals(2.00, (float) Setting::get('calc_handling_flat'));
$this->assertEquals(45, (int) Setting::get('calc_default_markup'));
$this->assertEquals(8, (int) Setting::get('calc_failure_rate'));
}
} }