Merge pull request #16948 from marcusmoore/bug/sc-29181

Require assigned_x to be integer on asset model
This commit is contained in:
snipe
2025-06-06 07:57:20 +01:00
committed by GitHub
2 changed files with 62 additions and 3 deletions

View File

@@ -122,9 +122,9 @@ class Asset extends Depreciable
'assigned_to' => ['nullable', 'integer', 'required_with:assigned_type'],
'assigned_type' => ['nullable', 'required_with:assigned_to', 'in:'.User::class.",".Location::class.",".Asset::class],
'requestable' => ['nullable', 'boolean'],
'assigned_user' => ['nullable', 'exists:users,id,deleted_at,NULL'],
'assigned_location' => ['nullable', 'exists:locations,id,deleted_at,NULL', 'fmcs_location'],
'assigned_asset' => ['nullable', 'exists:assets,id,deleted_at,NULL']
'assigned_user' => ['integer', 'nullable', 'exists:users,id,deleted_at,NULL'],
'assigned_location' => ['integer', 'nullable', 'exists:locations,id,deleted_at,NULL', 'fmcs_location'],
'assigned_asset' => ['integer', 'nullable', 'exists:assets,id,deleted_at,NULL']
];

View File

@@ -12,6 +12,7 @@ use App\Models\Supplier;
use App\Models\User;
use Illuminate\Support\Facades\Crypt;
use Illuminate\Testing\Fluent\AssertableJson;
use PHPUnit\Framework\Attributes\DataProvider;
use Tests\TestCase;
class StoreAssetTest extends TestCase
@@ -572,6 +573,64 @@ class StoreAssetTest extends TestCase
$this->assertTrue($asset->assignedTo->is($userAssigned));
}
public static function checkoutTargets()
{
yield 'Users' => [
function () {
return [
'key' => 'assigned_user',
'value' => [
User::factory()->create()->id,
User::factory()->create()->id,
],
];
},
];
yield 'Locations' => [
function () {
return [
'key' => 'assigned_location',
'value' => [
Location::factory()->create()->id,
Location::factory()->create()->id,
],
];
},
];
yield 'Assets' => [
function () {
return [
'key' => 'assigned_asset',
'value' => [
Asset::factory()->create()->id,
Asset::factory()->create()->id,
],
];
},
];
}
/** @link https://app.shortcut.com/grokability/story/29181 */
#[DataProvider('checkoutTargets')]
public function testAssignedFieldValidationCannotBeArray($data)
{
['key' => $key, 'value' => $value] = $data();
$this->actingAsForApi(User::factory()->createAssets()->create())
->postJson(route('api.assets.store'), [
'asset_tag' => '123456',
'model_id' => AssetModel::factory()->create()->id,
'status_id' => Statuslabel::factory()->readyToDeploy()->create()->id,
$key => $value,
])
->assertStatusMessageIs('error')
->assertJson(function (AssertableJson $json) use ($key) {
$json->has("messages.{$key}")->etc();
});
}
public function testAnAssetCanBeCheckedOutToLocationOnStore()
{
$model = AssetModel::factory()->create();