3
0
mirror of https://github.com/snipe/snipe-it.git synced 2026-05-05 14:15:29 +00:00

Fixed tests

Signed-off-by: snipe <snipe@snipe.net>
This commit is contained in:
snipe
2025-09-04 16:02:40 +01:00
parent 090890e9c6
commit 905f61371d
4 changed files with 63 additions and 14 deletions

View File

@ -40,11 +40,32 @@ class AssetModelImporter extends ItemImporter
{
$editingAssetModel = false;
$assetModel = AssetModel::where('name', '=', $this->findCsvMatch($row, 'name'))->where('model_number', '=', $this->findCsvMatch($row, 'model_number'))->first();
/**
* This part gets a little confusing, since folks might be importing multiple models with the same name and different model numbers for the first time
* or they might be wanting to update existing models with new model numbers.
*/
// They are not trying to update existing models, so we'll check for duplicates with model name *and* number
if (! $this->updating) {
$this->log('Finding model by name and model number: '.$this->findCsvMatch($row, 'name').' / '.$this->findCsvMatch($row, 'model_number'));
$assetModel = AssetModel::where('name', '=', $this->findCsvMatch($row, 'name'))->where('model_number', '=', $this->findCsvMatch($row, 'model_number'))->first();
} else {
if ($this->findCsvMatch($row, 'id')!='') {
// Override model if an ID was given
$this->log('Finding model by ID: '.$this->findCsvMatch($row, 'id'));
$assetModel = AssetModel::find($this->findCsvMatch($row, 'id'));
} else {
$this->log('Finding model by name: '.$this->findCsvMatch($row, 'name'));
$assetModel = AssetModel::where('name', '=', $this->findCsvMatch($row, 'name'))->first();
}
}
if ($assetModel) {
if (! $this->updating) {
$this->log('A matching Model '.$this->item['name'].' already exists');
$this->log('A matching Model '.$this->item['name'].' already exists and we are not updating. Skipping.');
return;
}

View File

@ -403,6 +403,7 @@ class Importer extends Component
$this->assetmodels_fields = [
'id' => trans('general.id'),
'category' => trans('general.category'),
'eol' => trans('general.eol'),
'fieldset' => trans('admin/models/general.fieldset'),

View File

@ -113,28 +113,53 @@ class ImportAssetModelsTest extends ImportDataTestCase implements TestsPermissio
#[Test]
public function updateAssetModelFromImport(): void
{
$assetmodel = AssetModel::factory()->create()->refresh();
$category = Category::find($assetmodel->category->name);
$importFileBuilder = ImportFileBuilder::new(['name' => $assetmodel->name, 'model_number' => Str::random(), 'category' => $category]);
$assetmodel = AssetModel::factory()->create(['model_number' => Str::random()]);
$category = Category::find($assetmodel->category_id);
$importFileBuilder = ImportFileBuilder::new(['name' => $assetmodel->name, 'model_number' => Str::random(), 'category' => $category->name]);
$row = $importFileBuilder->firstRow();
$import = Import::factory()->assetmodel()->create(['file_path' => $importFileBuilder->saveToImportsDirectory()]);
$this->actingAsForApi(User::factory()->superuser()->create());
$this->importFileResponse(['import' => $import->id, 'import-update' => true])->assertOk();
$this->importFileResponse(['import' => $import->id, 'import-update' => true])
->assertOk()
->assertExactJson([
'payload' => null,
'status' => 'success',
'messages' => ['redirect_url' => route('models.index')]
]);
$updatedAssetmodel = AssetModel::query()->find($assetmodel->id);
$updatedAttributes = [
'name',
'model_number'
];
$this->assertEquals($row['model_number'], $updatedAssetmodel->model_number);
$this->assertEquals($row['name'], $updatedAssetmodel->name);
}
#[Test]
public function updateAssetModelFromImportById(): void
{
$assetmodel = AssetModel::factory()->create(['name' => Str::random(), 'model_number' => Str::random()]);
$category = Category::find($assetmodel->category_id);
$importFileBuilder = ImportFileBuilder::new(['id' => $assetmodel->id, 'name' => Str::random(), 'model_number' => Str::random(), 'category' => $category->name]);
$row = $importFileBuilder->firstRow();
$import = Import::factory()->assetmodel()->create(['file_path' => $importFileBuilder->saveToImportsDirectory()]);
$this->actingAsForApi(User::factory()->superuser()->create());
$this->importFileResponse(['import' => $import->id, 'import-update' => true])
->assertOk()
->assertExactJson([
'payload' => null,
'status' => 'success',
'messages' => ['redirect_url' => route('models.index')]
]);
$updatedAssetmodel = AssetModel::query()->find($assetmodel->id);
$this->assertEquals($row['model_number'], $updatedAssetmodel->model_number);
$this->assertEquals($row['name'], $updatedAssetmodel->name);
$this->assertEquals(
Arr::except($assetmodel->attributesToArray(), array_merge($updatedAttributes, $assetmodel->getDates())),
Arr::except($updatedAssetmodel->attributesToArray(), array_merge($updatedAttributes, $assetmodel->getDates())),
);
}
}

View File

@ -27,6 +27,7 @@ class AssetModelsImportFileBuilder extends FileBuilder
protected function getDictionary(): array
{
return [
'id' => 'ID',
'name' => 'Name',
'category' => 'Category',
'manufacturer' => 'Manufacturer',
@ -48,6 +49,7 @@ class AssetModelsImportFileBuilder extends FileBuilder
$faker = fake();
return [
'id' => 1,
'name' => $faker->catchPhrase,
'category' => Str::random(),
'model_number' => $faker->creditCardNumber(),