mirror of
https://github.com/snipe/snipe-it.git
synced 2024-11-10 07:34:06 -08:00
644 lines
24 KiB
PHP
644 lines
24 KiB
PHP
<?php
|
|
use App\Importer\AccessoryImporter;
|
|
use App\Importer\AssetImporter;
|
|
use App\Importer\ConsumableImporter;
|
|
use App\Importer\LicenseImporter;
|
|
use App\Models\Accessory;
|
|
use App\Models\Asset;
|
|
use App\Models\AssetModel;
|
|
use App\Models\Category;
|
|
use App\Models\CustomField;
|
|
use App\Models\User;
|
|
use Illuminate\Foundation\Testing\DatabaseMigrations;
|
|
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
|
use Illuminate\Foundation\Testing\WithoutMiddleware;
|
|
use Illuminate\Support\Facades\Hash;
|
|
|
|
class ImporterTest extends BaseTest
|
|
{
|
|
/**
|
|
* @var \UnitTester
|
|
*/
|
|
protected $tester;
|
|
|
|
public function testDefaultImportAssetWithCustomFields()
|
|
{
|
|
$this->signIn();
|
|
$csv = <<<'EOT'
|
|
Full Name,Email,Username,item Name,Category,Model name,Manufacturer,Model Number,Serial,Asset Tag,Location,Notes,Purchase Date,Purchase Cost,Company,Status,Warranty,Supplier,Weight
|
|
Bonnie Nelson,bnelson0@cdbaby.com,bnelson0,eget nunc donec quis,quam,massa id,Linkbridge,6377018600094472,27aa8378-b0f4-4289-84a4-405da95c6147,970882174-8,Daping,"Curabitur in libero ut massa volutpat convallis. Morbi odio odio, elementum eu, interdum eu, tincidunt in, leo. Maecenas pulvinar lobortis est.",2016-04-05,133289.59,Alpha,Undeployable,14,Blogspan,35
|
|
EOT;
|
|
|
|
$this->initializeCustomFields();
|
|
$this->import(new AssetImporter($csv));
|
|
|
|
$this->tester->seeRecord('users', [
|
|
'first_name' => 'Bonnie',
|
|
'last_name' => 'Nelson',
|
|
'email' => 'bnelson0@cdbaby.com',
|
|
]);
|
|
$this->tester->seeRecord('categories', [
|
|
'name' => 'quam'
|
|
]);
|
|
|
|
$this->tester->seeRecord('models', [
|
|
'name' => 'massa id',
|
|
'model_number' => 6377018600094472
|
|
]);
|
|
|
|
$this->tester->seeRecord('manufacturers', [
|
|
'name' => 'Linkbridge'
|
|
]);
|
|
|
|
$this->tester->seeRecord('locations', [
|
|
'name' => 'Daping'
|
|
]);
|
|
|
|
$this->tester->seeRecord('companies', [
|
|
'name' => 'Alpha'
|
|
]);
|
|
|
|
$this->tester->seeRecord('status_labels', [
|
|
'name' => 'Undeployable'
|
|
]);
|
|
|
|
$this->tester->seeRecord('suppliers', [
|
|
'name' => 'Blogspan'
|
|
]);
|
|
|
|
$this->tester->seeRecord('assets', [
|
|
'name' => 'eget nunc donec quis',
|
|
'serial' => '27aa8378-b0f4-4289-84a4-405da95c6147',
|
|
'asset_tag' => '970882174-8',
|
|
'notes' => "Curabitur in libero ut massa volutpat convallis. Morbi odio odio, elementum eu, interdum eu, tincidunt in, leo. Maecenas pulvinar lobortis est.",
|
|
'purchase_date' => '2016-04-05 00:00:01',
|
|
'purchase_cost' => 133289.59,
|
|
'warranty_months' => 14,
|
|
'_snipeit_weight_2' => 35
|
|
]);
|
|
}
|
|
|
|
public function testUpdateAssetIncludingCustomFields()
|
|
{
|
|
$this->signIn();
|
|
$csv = <<<'EOT'
|
|
Name,Email,Username,item Name,Category,Model name,Manufacturer,Model Number,Serial,Asset Tag,Location,Notes,Purchase Date,Purchase Cost,Company,Status,Warranty,Supplier,weight
|
|
Bonnie Nelson,bnelson0@cdbaby.com,bnelson0,eget nunc donec quis,quam,massa id,Linkbridge,6377018600094472,27aa8378-b0f4-4289-84a4-405da95c6147,970882174-8,Daping,"Curabitur in libero ut massa volutpat convallis. Morbi odio odio, elementum eu, interdum eu, tincidunt in, leo. Maecenas pulvinar lobortis est.",2016-04-05,133289.59,Alpha,Undeployable,14,Blogspan,95
|
|
EOT;
|
|
|
|
$this->initializeCustomFields();
|
|
$this->import(new AssetImporter($csv));
|
|
|
|
$updatedCSV = <<<'EOT'
|
|
item Name,Category,Model name,Manufacturer,Model Number,Serial,Asset Tag,Location,Notes,Purchase Date,Purchase Cost,Company,Status,Warranty,Supplier
|
|
A new name,some other category,Another Model,Linkbridge 32,356,67433477,970882174-8,New Location,I have no notes,2018-04-05,25.59,Another Company,Ready To Go,18,Not Creative
|
|
EOT;
|
|
$importer = new AssetImporter($updatedCSV);
|
|
$importer->setUserId(1)
|
|
->setUpdating(true)
|
|
->setUsernameFormat('firstname.lastname')
|
|
->import();
|
|
|
|
$this->tester->seeRecord('categories', [
|
|
'name' => 'some other category'
|
|
]);
|
|
|
|
$this->tester->seeRecord('models', [
|
|
'name' => 'Another Model',
|
|
'model_number' => 356
|
|
]);
|
|
|
|
$this->tester->seeRecord('manufacturers', [
|
|
'name' => 'Linkbridge 32'
|
|
]);
|
|
|
|
$this->tester->seeRecord('locations', [
|
|
'name' => 'New Location'
|
|
]);
|
|
|
|
$this->tester->seeRecord('companies', [
|
|
'name' => 'Another Company'
|
|
]);
|
|
|
|
$this->tester->seeRecord('status_labels', [
|
|
'name' => 'Ready To Go'
|
|
]);
|
|
|
|
$this->tester->seeRecord('suppliers', [
|
|
'name' => 'Not Creative'
|
|
]);
|
|
|
|
$this->tester->seeRecord('assets', [
|
|
'name' => 'A new name',
|
|
'serial' => '67433477',
|
|
'asset_tag' => '970882174-8',
|
|
'notes' => "I have no notes",
|
|
'purchase_date' => '2018-04-05 00:00:01',
|
|
'purchase_cost' => 25.59,
|
|
'warranty_months' => 18,
|
|
'_snipeit_weight_2' => 95
|
|
]);
|
|
}
|
|
|
|
public function testAssetModelNumber4359()
|
|
{
|
|
// As per bug #4359
|
|
// 1) Create model with blank model # and custom field.
|
|
// 2 ) Update custom fields with a csv not including model #
|
|
// 3 ) Not updated. NULL vs. empty issue.
|
|
$this->signIn();
|
|
$csv = <<<'EOT'
|
|
Name,Email,Username,item Name,Category,Model name,Manufacturer,Serial,Asset Tag,Location,Notes,Purchase Date,Purchase Cost,Company,Status,Warranty,Supplier
|
|
Bonnie Nelson,bnelson0@cdbaby.com,bnelson0,eget nunc donec quis,quam,massa id,Linkbridge,27aa8378-b0f4-4289-84a4-405da95c6147,970882174-8,Daping,"Curabitur in libero ut massa volutpat convallis. Morbi odio odio, elementum eu, interdum eu, tincidunt in, leo. Maecenas pulvinar lobortis est.",2016-04-05,133289.59,Alpha,Undeployable,14,Blogspan
|
|
EOT;
|
|
|
|
// Need to do this manually...
|
|
$customField = factory(App\Models\CustomField::class)->create(['name' => 'Weight']);
|
|
$customFieldSet = factory(App\Models\CustomFieldset::class)->create(['name' => 'Default']);
|
|
$customFieldSet->fields()->attach($customField, [
|
|
'required' => false,
|
|
'order' => 'asc']);
|
|
|
|
factory(App\Models\Category::class)->states('asset-laptop-category')->create([
|
|
'name' => 'quam'
|
|
]);
|
|
|
|
factory(App\Models\Manufacturer::class)->states('apple')->create([
|
|
'name' => 'Linkbridge'
|
|
]);
|
|
|
|
|
|
$am = factory(App\Models\AssetModel::class)->create([
|
|
'name' => 'massa id',
|
|
'fieldset_id' => $customFieldSet->id,
|
|
'category_id' => 1,
|
|
'manufacturer_id' => 1,
|
|
'model_number' => null
|
|
]);
|
|
|
|
$this->import(new AssetImporter($csv));
|
|
$updatedCSV = <<<'EOT'
|
|
Serial,Asset Tag,weight
|
|
67433477,970882174-8,115
|
|
EOT;
|
|
$importer = new AssetImporter($updatedCSV);
|
|
$importer->setUserId(1)
|
|
->setUpdating(true)
|
|
->setUsernameFormat('firstname.lastname')
|
|
->import();
|
|
|
|
$this->tester->seeRecord('assets', [
|
|
'asset_tag' => '970882174-8',
|
|
'_snipeit_weight_2' => 115
|
|
]);
|
|
}
|
|
|
|
public function initializeCustomFields()
|
|
{
|
|
$customField = factory(App\Models\CustomField::class)->create(['name' => 'Weight']);
|
|
$customFieldSet = factory(App\Models\CustomFieldset::class)->create(['name' => 'Default']);
|
|
$customFieldSet->fields()->attach($customField, [
|
|
'required' => false,
|
|
'order' => 'asc']);
|
|
|
|
$am = factory(App\Models\AssetModel::class)->create([
|
|
'name' => 'massa id',
|
|
'fieldset_id' => $customFieldSet->id
|
|
]);
|
|
}
|
|
|
|
public function testCustomMappingImport()
|
|
{
|
|
$this->signIn();
|
|
$csv = <<<'EOT'
|
|
Full Name,Email,Username,object name,Cat,Model name,Manufacturer,Model Number,Serial,Asset,Loc,Some Notes,Purchase Date,Purchase Cost,comp,Status,Warranty,Supplier
|
|
Bonnie Nelson,bnelson0@cdbaby.com,bnelson0,eget nunc donec quis,quam,massa id,Linkbridge,6377018600094472,27aa8378-b0f4-4289-84a4-405da95c6147,970882174-8,Daping,"Curabitur in libero ut massa volutpat convallis. Morbi odio odio, elementum eu, interdum eu, tincidunt in, leo. Maecenas pulvinar lobortis est.",2016-04-05,133289.59,Alpha,Undeployable,14,Blogspan
|
|
EOT;
|
|
|
|
$customFieldMap = [
|
|
'asset_tag' => 'Asset',
|
|
'category' => 'Cat',
|
|
'company' => 'comp',
|
|
'item_name' => 'object name',
|
|
'expiration_date' => 'expiration date',
|
|
'location' => 'loc',
|
|
'notes' => 'Some Notes',
|
|
'asset_model' => "model name",
|
|
];
|
|
|
|
$this->import(new AssetImporter($csv), $customFieldMap);
|
|
// Did we create a user?
|
|
|
|
$this->tester->seeRecord('users', [
|
|
'first_name' => 'Bonnie',
|
|
'last_name' => 'Nelson',
|
|
'email' => 'bnelson0@cdbaby.com',
|
|
]);
|
|
// Grab the user record for use in asserting assigned_to
|
|
$createdUser = $this->tester->grabRecord('users', [
|
|
'first_name' => 'Bonnie',
|
|
'last_name' => 'Nelson',
|
|
'email' => 'bnelson0@cdbaby.com',
|
|
]);
|
|
|
|
$this->tester->seeRecord('categories', [
|
|
'name' => 'quam'
|
|
]);
|
|
|
|
$this->tester->seeRecord('models', [
|
|
'name' => 'massa id',
|
|
'model_number' => 6377018600094472
|
|
]);
|
|
|
|
$this->tester->seeRecord('manufacturers', [
|
|
'name' => 'Linkbridge'
|
|
]);
|
|
|
|
$this->tester->seeRecord('locations', [
|
|
'name' => 'Daping'
|
|
]);
|
|
|
|
$this->tester->seeRecord('companies', [
|
|
'name' => 'Alpha'
|
|
]);
|
|
|
|
$this->tester->seeRecord('status_labels', [
|
|
'name' => 'Undeployable'
|
|
]);
|
|
|
|
$this->tester->seeRecord('suppliers', [
|
|
'name' => 'Blogspan'
|
|
]);
|
|
|
|
$this->tester->seeRecord('assets', [
|
|
'name' => 'eget nunc donec quis',
|
|
'serial' => '27aa8378-b0f4-4289-84a4-405da95c6147',
|
|
'asset_tag' => '970882174-8',
|
|
'notes' => "Curabitur in libero ut massa volutpat convallis. Morbi odio odio, elementum eu, interdum eu, tincidunt in, leo. Maecenas pulvinar lobortis est.",
|
|
'purchase_date' => '2016-04-05 00:00:01',
|
|
'purchase_cost' => 133289.59,
|
|
'warranty_months' => 14,
|
|
'assigned_to' => $createdUser['id'],
|
|
'assigned_type' => User::class
|
|
]);
|
|
}
|
|
|
|
public function testDefaultAccessoryImport()
|
|
{
|
|
$csv = <<<'EOT'
|
|
Item Name,Purchase Date,Purchase Cost,Location,Company,Order Number,Category,Requestable,Quantity
|
|
Walter Carter,09/01/2006,,metus. Vivamus,Macromedia,J935H60W,Customers,False,278
|
|
EOT;
|
|
$this->import(new AccessoryImporter($csv));
|
|
$this->tester->seeRecord('accessories', [
|
|
'name' => 'Walter Carter',
|
|
'purchase_date' => '2006-09-01 00:00:01',
|
|
'order_number' => 'J935H60W',
|
|
'requestable' => 0,
|
|
'qty' => 278
|
|
]);
|
|
|
|
$this->tester->seeRecord('locations', [
|
|
'name' => 'metus. Vivamus'
|
|
]);
|
|
|
|
$this->tester->seeRecord('companies', [
|
|
'name' => 'Macromedia'
|
|
]);
|
|
|
|
$this->tester->seeRecord('categories', [
|
|
'name' => 'Customers'
|
|
]);
|
|
}
|
|
|
|
public function testDefaultAccessoryUpdate()
|
|
{
|
|
$csv = <<<'EOT'
|
|
Item Name,Purchase Date,Purchase Cost,Location,Company,Order Number,Category,Requestable,Quantity
|
|
Walter Carter,09/01/2006,,metus. Vivamus,Macromedia,J935H60W,Customers,False,278
|
|
EOT;
|
|
$this->import(new AccessoryImporter($csv));
|
|
$this->tester->seeNumRecords(1, 'accessories');
|
|
|
|
|
|
$updatedCSV = <<<'EOT'
|
|
Item Name,Purchase Date,Purchase Cost,Location,Company,Order Number,Category,Requestable,Quantity
|
|
Walter Carter,09/01/2015,350,metus. Vivamus,Macromedia,35GGH,Customers,True,12
|
|
EOT;
|
|
$importer = new AccessoryImporter($updatedCSV);
|
|
$importer->setUserId(1)
|
|
->setUpdating(true)
|
|
->import();
|
|
// At this point we should still only have one record.
|
|
$this->tester->seeNumRecords(1, 'accessories');
|
|
// But instead these.
|
|
$this->tester->seeRecord('accessories', [
|
|
'name' => 'Walter Carter',
|
|
'purchase_date' => '2015-09-01 00:00:01',
|
|
'order_number' => '35GGH',
|
|
'requestable' => 1,
|
|
'qty' => 12
|
|
]);
|
|
}
|
|
|
|
public function testCustomAccessoryImport()
|
|
{
|
|
$csv = <<<'EOT'
|
|
Name,Pur Date,Cost,Loc,Comp,Order Num,Cat,Request,Quan
|
|
Walter Carter,09/01/2006,,metus. Vivamus,Macromedia,J935H60W,Customers,False,278
|
|
EOT;
|
|
|
|
$customFieldMap = [
|
|
'category' => 'Cat',
|
|
'company' => 'Comp',
|
|
'item_name' => 'Name',
|
|
'location' => 'Loc',
|
|
'purchase_date' => 'Pur Date',
|
|
'purchase_cost' => "Cost",
|
|
'order_number' => 'Order Num',
|
|
'requestable' => 'Request',
|
|
'quantity' => 'Quan'
|
|
];
|
|
$this->import(new AccessoryImporter($csv), $customFieldMap);
|
|
// dd($this->tester->grabRecord('accessories'));
|
|
$this->tester->seeRecord('accessories', [
|
|
'name' => 'Walter Carter',
|
|
'purchase_date' => '2006-09-01 00:00:01',
|
|
'order_number' => 'J935H60W',
|
|
'requestable' => 0,
|
|
'qty' => 278
|
|
]);
|
|
|
|
$this->tester->seeRecord('locations', [
|
|
'name' => 'metus. Vivamus'
|
|
]);
|
|
|
|
$this->tester->seeRecord('companies', [
|
|
'name' => 'Macromedia'
|
|
]);
|
|
|
|
$this->tester->seeRecord('categories', [
|
|
'name' => 'Customers'
|
|
]);
|
|
}
|
|
|
|
public function testDefaultConsumableImport()
|
|
{
|
|
$csv = <<<'EOT'
|
|
Item Name,Purchase Date,Purchase Cost,Location,Company,Order Number,Category,Requestable,Quantity
|
|
eget,01/03/2011,$85.91,mauris blandit mattis.,Lycos,T295T06V,Triamterene/Hydrochlorothiazide,No,322
|
|
EOT;
|
|
$this->import(new ConsumableImporter($csv));
|
|
|
|
$this->tester->seeRecord('consumables', [
|
|
'name' => 'eget',
|
|
'purchase_date' => '2011-01-03 00:00:01',
|
|
'purchase_cost' => 85.91,
|
|
'order_number' => 'T295T06V',
|
|
'requestable' => 0,
|
|
'qty' => 322
|
|
]);
|
|
|
|
$this->tester->seeRecord('locations', [
|
|
'name' => 'mauris blandit mattis.'
|
|
]);
|
|
|
|
$this->tester->seeRecord('companies', [
|
|
'name' => 'Lycos'
|
|
]);
|
|
|
|
$this->tester->seeRecord('categories', [
|
|
'name' => 'Triamterene/Hydrochlorothiazide'
|
|
]);
|
|
}
|
|
|
|
public function testDefaultConsumableUpdate()
|
|
{
|
|
$csv = <<<'EOT'
|
|
Item Name,Purchase Date,Purchase Cost,Location,Company,Order Number,Category,Requestable,Quantity
|
|
eget,01/03/2011,85.91,mauris blandit mattis.,Lycos,T295T06V,Triamterene/Hydrochlorothiazide,No,322
|
|
EOT;
|
|
$this->import(new ConsumableImporter($csv));
|
|
$this->tester->seeNumRecords(1, 'consumables');
|
|
|
|
|
|
$updatedCSV = <<<'EOT'
|
|
Item Name,Purchase Date,Purchase Cost,Location,Company,Order Number,Category,Requestable,Quantity
|
|
eget,12/05/2016,35.45,mauris blandit mattis.,Lycos,3666FF,New Cat,Yes,15
|
|
EOT;
|
|
$importer = new ConsumableImporter($updatedCSV);
|
|
$importer->setUserId(1)
|
|
->setUpdating(true)
|
|
->import();
|
|
// At this point we should still only have one record.
|
|
$this->tester->seeNumRecords(1, 'consumables');
|
|
// But instead these.
|
|
$this->tester->seeRecord('consumables', [
|
|
'name' => 'eget',
|
|
'purchase_date' => '2016-12-05 00:00:01',
|
|
'purchase_cost' => 35.45,
|
|
'order_number' => '3666FF',
|
|
'requestable' => 1,
|
|
'qty' => 15
|
|
]);
|
|
}
|
|
|
|
public function testCustomConsumableImport()
|
|
{
|
|
$csv = <<<'EOT'
|
|
Name,pur Date,Pur Cost,Loc,Comp,Order Num,Kat,Request,Quan
|
|
eget,01/03/2011,85.91,mauris blandit mattis.,Lycos,T295T06V,Triamterene/Hydrochlorothiazide,No,322
|
|
EOT;
|
|
|
|
$customFieldMap = [
|
|
'category' => 'Kat',
|
|
'company' => 'Comp',
|
|
'item_name' => 'Name',
|
|
'location' => 'Loc',
|
|
'purchase_date' => 'Pur date',
|
|
'purchase_cost' => "Pur Cost",
|
|
'order_number' => 'Order Num',
|
|
'requestable' => 'Request',
|
|
'quantity' => 'Quan'
|
|
];
|
|
$this->import(new ConsumableImporter($csv), $customFieldMap);
|
|
$this->tester->seeRecord('consumables', [
|
|
'name' => 'eget',
|
|
'purchase_date' => '2011-01-03 00:00:01',
|
|
'purchase_cost' => 85.91,
|
|
'order_number' => 'T295T06V',
|
|
'requestable' => 0,
|
|
'qty' => 322
|
|
]);
|
|
|
|
$this->tester->seeRecord('locations', [
|
|
'name' => 'mauris blandit mattis.'
|
|
]);
|
|
|
|
$this->tester->seeRecord('companies', [
|
|
'name' => 'Lycos'
|
|
]);
|
|
|
|
$this->tester->seeRecord('categories', [
|
|
'name' => 'Triamterene/Hydrochlorothiazide'
|
|
]);
|
|
}
|
|
|
|
public function testDefaultLicenseImport()
|
|
{
|
|
$this->signIn();
|
|
$csv = <<<'EOT'
|
|
Name,Email,Username,Item name,serial,manufacturer,purchase date,purchase cost,purchase order,order number,Licensed To Name,Licensed to Email,expiration date,maintained,reassignable,seats,company,supplier,category,notes
|
|
Helen Anderson,cspencer0@privacy.gov.au,cspencer0,Argentum Malachite Athletes Foot Relief,1aa5b0eb-79c5-40b2-8943-5472a6893c3c,"Beer, Leannon and Lubowitz",07/13/2012,$79.66,53008,386436062-5,Cynthia Spencer,cspencer0@gov.uk,01/27/2016,false,no,80,"Haag, Schmidt and Farrell","Hegmann, Mohr and Cremin",Graphics Software,Sed ante. Vivamus tortor. Duis mattis egestas metus.
|
|
EOT;
|
|
$this->import(new LicenseImporter($csv));
|
|
// dd($this->tester->grabRecord('licenses'));
|
|
|
|
$this->tester->seeRecord('licenses', [
|
|
'name' => 'Argentum Malachite Athletes Foot Relief',
|
|
'purchase_date' => '2012-07-13 00:00:01',
|
|
'seats' => 80,
|
|
'license_email' => 'cspencer0@gov.uk',
|
|
'order_number' => '386436062-5',
|
|
'license_name' => 'Cynthia Spencer',
|
|
'expiration_date' => '2016-01-27',
|
|
'maintained' => 0,
|
|
'notes' => 'Sed ante. Vivamus tortor. Duis mattis egestas metus.',
|
|
'purchase_cost' => 79.66,
|
|
'purchase_order' => "53008",
|
|
'reassignable' => 0,
|
|
'serial' => '1aa5b0eb-79c5-40b2-8943-5472a6893c3c',
|
|
]);
|
|
|
|
$this->tester->seeRecord('manufacturers', [
|
|
'name' => 'Beer, Leannon and Lubowitz'
|
|
]);
|
|
|
|
$this->tester->seeRecord('suppliers', [
|
|
'name' => "Hegmann, Mohr and Cremin",
|
|
]);
|
|
|
|
$this->tester->seeRecord('companies', [
|
|
'name' => 'Haag, Schmidt and Farrell'
|
|
]);
|
|
|
|
$this->tester->seeRecord('categories', [
|
|
'name' => 'Graphics Software'
|
|
]);
|
|
|
|
$this->tester->seeNumRecords(80, 'license_seats');
|
|
}
|
|
|
|
public function testDefaultLicenseUpdate()
|
|
{
|
|
$csv = <<<'EOT'
|
|
Name,Email,Username,Item name,serial,manufacturer,purchase date,purchase cost,purchase order,order number,Licensed To Name,Licensed to Email,expiration date,maintained,reassignable,seats,company,supplier,category,notes
|
|
Helen Anderson,cspencer0@privacy.gov.au,cspencer0,Argentum Malachite Athletes Foot Relief,1aa5b0eb-79c5-40b2-8943-5472a6893c3c,"Beer, Leannon and Lubowitz",07/13/2012,$79.66,53008,386436062-5,Cynthia Spencer,cspencer0@gov.uk,01/27/2016,false,no,80,"Haag, Schmidt and Farrell","Hegmann, Mohr and Cremin",Graphics Software,Sed ante. Vivamus tortor. Duis mattis egestas metus.
|
|
EOT;
|
|
$this->import(new LicenseImporter($csv));
|
|
$this->tester->seeNumRecords(1, 'licenses');
|
|
|
|
|
|
$updatedCSV = <<<'EOT'
|
|
Item name,serial,manufacturer,purchase date,purchase cost,purchase order,order number,Licensed To Name,Licensed to Email,expiration date,maintained,reassignable,seats,company,supplier,category,notes
|
|
Argentum Malachite Athletes Foot Relief,1aa5b0eb-79c5-40b2-8943-5472a6893c3c,"Beer, Leannon and Lubowitz",05/15/2019,$1865.34,63 ar,18334,A Legend,Legendary@gov.uk,04/27/2016,yes,true,64,"Haag, Schmidt and Farrell","Hegmann, Mohr and Cremin",Graphics Software,Sed ante. Vivamus tortor. Duis mattis egestas metus.
|
|
EOT;
|
|
$importer = new LicenseImporter($updatedCSV);
|
|
$importer->setUserId(1)
|
|
->setUpdating(true)
|
|
->import();
|
|
// At this point we should still only have one record.
|
|
$this->tester->seeNumRecords(1, 'licenses');
|
|
// But instead these.
|
|
|
|
\Log::debug($this->tester->grabRecord('licenses'));
|
|
$this->tester->seeRecord('licenses', [
|
|
'name' => 'Argentum Malachite Athletes Foot Relief',
|
|
'purchase_date' => '2019-05-15 00:00:01',
|
|
'seats' => 64,
|
|
'license_email' => 'Legendary@gov.uk',
|
|
'order_number' => '18334',
|
|
'license_name' => 'A Legend',
|
|
'expiration_date' => '2016-04-27',
|
|
'maintained' => 1,
|
|
'notes' => 'Sed ante. Vivamus tortor. Duis mattis egestas metus.',
|
|
'purchase_cost' => 1865.34,
|
|
'purchase_order' => "63 ar",
|
|
'reassignable' => 1,
|
|
'serial' => '1aa5b0eb-79c5-40b2-8943-5472a6893c3c',
|
|
]);
|
|
// License seats are soft deleted
|
|
$this->tester->seeNumRecords(64, 'license_seats', ['deleted_at' => null]);
|
|
}
|
|
|
|
public function testCustomLicenseImport()
|
|
{
|
|
$csv = <<<'EOT'
|
|
Name,Email,Username,Object name,serial num,manuf,pur date,pur cost,purc order,order num,Licensed To,Licensed Email,expire date,maint,reass,seat,comp,supplier,category,note
|
|
Helen Anderson,cspencer0@privacy.gov.au,cspencer0,Argentum Malachite Athletes Foot Relief,1aa5b0eb-79c5-40b2-8943-5472a6893c3c,"Beer, Leannon and Lubowitz",07/13/2012,$79.66,53008,386436062-5,Cynthia Spencer,cspencer0@gov.uk,01/27/2016,false,no,80,"Haag, Schmidt and Farrell","Hegmann, Mohr and Cremin",Custom Graphics Software,Sed ante. Vivamus tortor. Duis mattis egestas metus.
|
|
EOT;
|
|
|
|
$customFieldMap = [
|
|
'company' => 'Comp',
|
|
'expiration_date' => 'expire date',
|
|
'item_name' => 'Object Name',
|
|
'license_email' => 'licensed email',
|
|
'license_name' => 'licensed to',
|
|
'maintained' => 'maint',
|
|
'manufacturer' => 'manuf',
|
|
'notes' => 'note',
|
|
'order_number' => 'Order Num',
|
|
'purchase_cost' => "Pur Cost",
|
|
'purchase_date' => 'Pur date',
|
|
'purchase_order' => "Purc Order",
|
|
'quantity' => 'Quan',
|
|
'reassignable' => 'reass',
|
|
'requestable' => 'Request',
|
|
'seats' => 'seat',
|
|
'serial' => 'serial num',
|
|
'category' => 'category',
|
|
];
|
|
$this->import(new LicenseImporter($csv), $customFieldMap);
|
|
$this->tester->seeRecord('licenses', [
|
|
'name' => 'Argentum Malachite Athletes Foot Relief',
|
|
'purchase_date' => '2012-07-13 00:00:01',
|
|
'seats' => 80,
|
|
'license_email' => 'cspencer0@gov.uk',
|
|
'order_number' => '386436062-5',
|
|
'license_name' => 'Cynthia Spencer',
|
|
'expiration_date' => '2016-01-27',
|
|
'maintained' => 0,
|
|
'notes' => 'Sed ante. Vivamus tortor. Duis mattis egestas metus.',
|
|
'purchase_cost' => 79.66,
|
|
'purchase_order' => "53008",
|
|
'reassignable' => 0,
|
|
'serial' => '1aa5b0eb-79c5-40b2-8943-5472a6893c3c',
|
|
]);
|
|
|
|
$this->tester->seeRecord('manufacturers', [
|
|
'name' => 'Beer, Leannon and Lubowitz'
|
|
]);
|
|
|
|
$this->tester->seeRecord('suppliers', [
|
|
'name' => "Hegmann, Mohr and Cremin",
|
|
]);
|
|
|
|
$this->tester->seeRecord('companies', [
|
|
'name' => 'Haag, Schmidt and Farrell'
|
|
]);
|
|
|
|
$this->tester->seeNumRecords(80, 'license_seats');
|
|
}
|
|
|
|
private function import($importer, $mappings = null)
|
|
{
|
|
if ($mappings) {
|
|
$importer->setFieldMappings($mappings);
|
|
}
|
|
$importer->setUserId(1)
|
|
->setUpdating(false)
|
|
->setUsernameFormat('firstname.lastname')
|
|
->import();
|
|
}
|
|
}
|