From f9fae690a0497835bf689ed83f47392fab673ada Mon Sep 17 00:00:00 2001 From: David Bomba Date: Sat, 15 May 2021 16:54:27 +1000 Subject: [PATCH 1/2] Tests for import --- app/Console/Commands/DemoMode.php | 4 +- app/Http/Kernel.php | 2 +- app/Jobs/Company/CompanyExport.php | 29 +++++------ tests/Feature/Import/ImportCompanyTest.php | 57 ++++++++++++++++----- tests/Feature/Import/backup.json | 1 - tests/Feature/Import/backup.zip | Bin 0 -> 332698 bytes 6 files changed, 61 insertions(+), 32 deletions(-) delete mode 100644 tests/Feature/Import/backup.json create mode 100644 tests/Feature/Import/backup.zip diff --git a/app/Console/Commands/DemoMode.php b/app/Console/Commands/DemoMode.php index bcd8673a45aa..f2b42ceb7f24 100644 --- a/app/Console/Commands/DemoMode.php +++ b/app/Console/Commands/DemoMode.php @@ -128,7 +128,7 @@ class DemoMode extends Command { $faker = \Faker\Factory::create(); - $this->count = 50; + $this->count = 25; $this->info('Creating Small Account and Company'); @@ -486,7 +486,7 @@ class DemoMode extends Command if (rand(0, 1)) { $invoice->assigned_user_id = $assigned_user_id; } - + $invoice->number = $this->getNextRecurringInvoiceNumber($client); $invoice->save(); } diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 7ff6bd5e65bd..8163eff9fe12 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -163,6 +163,7 @@ class Kernel extends HttpKernel protected $middlewarePriority = [ + SetDomainNameDb::class, SetDb::class, SetWebDb::class, UrlSetDb::class, @@ -170,7 +171,6 @@ class Kernel extends HttpKernel SetEmailDb::class, SetInviteDb::class, SetDbByCompanyKey::class, - SetDomainNameDb::class, TokenAuth::class, ContactTokenAuth::class, ContactKeyLogin::class, diff --git a/app/Jobs/Company/CompanyExport.php b/app/Jobs/Company/CompanyExport.php index e663b3e86968..15ee35a35b6d 100644 --- a/app/Jobs/Company/CompanyExport.php +++ b/app/Jobs/Company/CompanyExport.php @@ -71,6 +71,8 @@ class CompanyExport implements ShouldQueue MultiDB::setDb($this->company->db); + $this->company = Company::where('company_key', $this->company->company_key)->first(); + set_time_limit(0); $this->export_data['app_version'] = config('ninja.app_version'); @@ -114,6 +116,16 @@ class CompanyExport implements ShouldQueue })->toArray(); + $this->export_data['users'] = $this->company->users()->withTrashed()->cursor()->map(function ($user){ + + $user->account_id = $this->encodePrimaryKey($user->account_id); + $user->id = $this->encodePrimaryKey($user->id); + + return $user; + + })->toArray(); + + $this->export_data['client_contacts'] = $this->company->client_contacts->map(function ($client_contact){ $client_contact = $this->transformArrayOfKeys($client_contact, ['id', 'company_id', 'user_id',' client_id']); @@ -140,11 +152,7 @@ class CompanyExport implements ShouldQueue })->toArray(); - $temp_co = $this->company; - $temp_co->id = $this->encodePrimaryKey($temp_co->id); - $temp_co->account_id = $this->encodePrimaryKey($temp_co->account_id); - - $this->export_data['company'] = $temp_co->toArray(); + $this->export_data['company'] = $this->company->toArray(); $this->export_data['company_gateways'] = $this->company->company_gateways->map(function ($company_gateway){ @@ -273,7 +281,7 @@ class CompanyExport implements ShouldQueue $payment = $this->transformBasicEntities($payment); $payment = $this->transformArrayOfKeys($payment, ['client_id','project_id', 'vendor_id', 'client_contact_id', 'invitation_id', 'company_gateway_id']); - return $project; + return $payment; })->toArray(); @@ -370,15 +378,6 @@ class CompanyExport implements ShouldQueue })->makeHidden(['id'])->toArray(); - $this->export_data['users'] = $this->company->users()->withTrashed()->cursor()->map(function ($user){ - - $user->account_id = $this->encodePrimaryKey($user->account_id); - $user->id = $this->encodePrimaryKey($user->id); - - return $user; - - })->makeHidden(['ip'])->toArray(); - $this->export_data['vendors'] = $this->company->vendors->map(function ($vendor){ return $this->transformBasicEntities($vendor); diff --git a/tests/Feature/Import/ImportCompanyTest.php b/tests/Feature/Import/ImportCompanyTest.php index f884a3a89898..a30fe6f1144e 100644 --- a/tests/Feature/Import/ImportCompanyTest.php +++ b/tests/Feature/Import/ImportCompanyTest.php @@ -11,6 +11,7 @@ namespace Tests\Feature\Import; use App\Jobs\Import\CSVImport; +use App\Models\Account; use App\Models\Client; use App\Models\Expense; use App\Models\Invoice; @@ -35,6 +36,8 @@ class ImportCompanyTest extends TestCase { use MakesHash; + public $account; + public function setUp() :void { parent::setUp(); @@ -45,47 +48,75 @@ class ImportCompanyTest extends TestCase $this->withoutExceptionHandling(); + + $this->account = Account::factory()->create(); } public function testBackupJsonRead() { - $backup_json_file = base_path().'/tests/Feature/Import/backup.json'; + $backup_json_file_zip = base_path().'/tests/Feature/Import/backup.zip'; + + $zip = new \ZipArchive; + $res = $zip->open($backup_json_file_zip); + + if ($res === TRUE) { + $zip->extractTo(sys_get_temp_dir()); + $zip->close(); + } + + $backup_json_file = sys_get_temp_dir() . "/backup/backup.json"; $this->assertTrue(is_array(json_decode(file_get_contents($backup_json_file),1))); + + unlink($backup_json_file); } public function testImportUsers() { + $backup_json_file_zip = base_path().'/tests/Feature/Import/backup.zip'; - $backup_json_file = base_path().'/tests/Feature/Import/backup.json'; + $zip = new \ZipArchive; + $res = $zip->open($backup_json_file_zip); + if ($res === TRUE) { + $zip->extractTo(sys_get_temp_dir()); + $zip->close(); + } - $backup_json_file = json_decode(file_get_contents($backup_json_file)); + $backup_json_file = sys_get_temp_dir() . "/backup/backup.json"; - $this->assertTrue(property_exists($backup_json_file, 'app_version')); - $this->assertTrue(property_exists($backup_json_file, 'users')); + $backup_json_object = json_decode(file_get_contents($backup_json_file)); + + $this->assertTrue(property_exists($backup_json_object, 'app_version')); + $this->assertTrue(property_exists($backup_json_object, 'users')); + + unlink($backup_json_file); + + User::all()->each(function ($user){ + $user->forceDelete(); + }); User::unguard(); - foreach ($backup_json_file->users as $user) + foreach ($backup_json_object->users as $user) { + $user_array = (array)$user; + unset($user_array['laravel_through_key']); + unset($user_array['hashed_id']); $new_user = User::firstOrNew( ['email' => $user->email], - (array)$user, + array_merge($user_array, ['account_id' => $this->account->id]), ); - $new_user->account_id = $this->account->id; $new_user->save(['timestamps' => false]); -nlog($new_user->toArray()); - - $this->ids['users']["{$user->id}"] = $new_user->id; - -nlog($this->ids); + $this->ids['users']["{$user->hashed_id}"] = $new_user->id; } User::reguard(); + + $this->assertEquals(2, User::count()); } diff --git a/tests/Feature/Import/backup.json b/tests/Feature/Import/backup.json deleted file mode 100644 index a49c25849b4b..000000000000 --- a/tests/Feature/Import/backup.json +++ /dev/null @@ -1 +0,0 @@ -{"app_version":"5.1.62","activities":[{"user_id":"WJxbojagwO","company_id":"gl9avmeG1v","client_id":"VWPe9xdLyw","client_contact_id":"","account_id":"","project_id":"","vendor_id":"","payment_id":"","invoice_id":"VWPe9OYbLy","credit_id":"","invitation_id":"","task_id":"","expense_id":"","activity_type_id":5,"ip":"","is_system":false,"notes":"","created_at":1620971761,"updated_at":1620971761,"token_id":"","quote_id":"","subscription_id":"","recurring_invoice_id":""},{"user_id":"WJxbojagwO","company_id":"gl9avmeG1v","client_id":"VWPe9xdLyw","client_contact_id":"","account_id":"","project_id":"","vendor_id":"","payment_id":"","invoice_id":"VWPe9OYbLy","credit_id":"","invitation_id":"","task_id":"","expense_id":"","activity_type_id":4,"ip":"","is_system":false,"notes":"","created_at":1620971762,"updated_at":1620971762,"token_id":"","quote_id":"","subscription_id":"","recurring_invoice_id":""},{"user_id":"WJxbojagwO","company_id":"gl9avmeG1v","client_id":"VWPe9xdLyw","client_contact_id":"","account_id":"","project_id":"","vendor_id":"","payment_id":"","invoice_id":"QnXe0O3dxr","credit_id":"","invitation_id":"","task_id":"","expense_id":"","activity_type_id":5,"ip":"","is_system":false,"notes":"","created_at":1620971762,"updated_at":1620971762,"token_id":"","quote_id":"","subscription_id":"","recurring_invoice_id":""},{"user_id":"WJxbojagwO","company_id":"gl9avmeG1v","client_id":"VWPe9xdLyw","client_contact_id":"","account_id":"","project_id":"","vendor_id":"","payment_id":"","invoice_id":"QnXe0O3dxr","credit_id":"","invitation_id":"","task_id":"","expense_id":"","activity_type_id":4,"ip":"","is_system":false,"notes":"","created_at":1620971763,"updated_at":1620971763,"token_id":"","quote_id":"","subscription_id":"","recurring_invoice_id":""},{"user_id":"WJxbojagwO","company_id":"gl9avmeG1v","client_id":"VWPe9xdLyw","client_contact_id":"","account_id":"","project_id":"","vendor_id":"","payment_id":"","invoice_id":"Wjneg6DdwZ","credit_id":"","invitation_id":"","task_id":"","expense_id":"","activity_type_id":5,"ip":"","is_system":false,"notes":"","created_at":1620971763,"updated_at":1620971763,"token_id":"","quote_id":"","subscription_id":"","recurring_invoice_id":""},{"user_id":"WJxbojagwO","company_id":"gl9avmeG1v","client_id":"VWPe9xdLyw","client_contact_id":"","account_id":"","project_id":"","vendor_id":"","payment_id":"","invoice_id":"Wjneg6DdwZ","credit_id":"","invitation_id":"","task_id":"","expense_id":"","activity_type_id":4,"ip":"","is_system":false,"notes":"","created_at":1620971764,"updated_at":1620971764,"token_id":"","quote_id":"","subscription_id":"","recurring_invoice_id":""},{"user_id":"WJxbojagwO","company_id":"gl9avmeG1v","client_id":"VWPe9xdLyw","client_contact_id":"","account_id":"","project_id":"","vendor_id":"","payment_id":"","invoice_id":"VolejLBbjN","credit_id":"","invitation_id":"","task_id":"","expense_id":"","activity_type_id":5,"ip":"","is_system":false,"notes":"","created_at":1620971764,"updated_at":1620971764,"token_id":"","quote_id":"","subscription_id":"","recurring_invoice_id":""},{"user_id":"WJxbojagwO","company_id":"gl9avmeG1v","client_id":"VWPe9xdLyw","client_contact_id":"","account_id":"","project_id":"","vendor_id":"","payment_id":"","invoice_id":"VolejLBbjN","credit_id":"","invitation_id":"","task_id":"","expense_id":"","activity_type_id":4,"ip":"","is_system":false,"notes":"","created_at":1620971765,"updated_at":1620971765,"token_id":"","quote_id":"","subscription_id":"","recurring_invoice_id":""},{"user_id":"WJxbojagwO","company_id":"gl9avmeG1v","client_id":"VWPe9xdLyw","client_contact_id":"","account_id":"","project_id":"","vendor_id":"","payment_id":"","invoice_id":"WpmbkDKdzJ","credit_id":"","invitation_id":"","task_id":"","expense_id":"","activity_type_id":5,"ip":"","is_system":false,"notes":"","created_at":1620971765,"updated_at":1620971765,"token_id":"","quote_id":"","subscription_id":"","recurring_invoice_id":""},{"user_id":"WJxbojagwO","company_id":"gl9avmeG1v","client_id":"VWPe9xdLyw","client_contact_id":"","account_id":"","project_id":"","vendor_id":"","payment_id":"","invoice_id":"WpmbkDKdzJ","credit_id":"","invitation_id":"","task_id":"","expense_id":"","activity_type_id":4,"ip":"","is_system":false,"notes":"","created_at":1620971766,"updated_at":1620971766,"token_id":"","quote_id":"","subscription_id":"","recurring_invoice_id":""},{"user_id":"WJxbojagwO","company_id":"gl9avmeG1v","client_id":"","client_contact_id":"","account_id":"","project_id":"","vendor_id":"","payment_id":"","invoice_id":"","credit_id":"","invitation_id":"","task_id":"","expense_id":"","activity_type_id":49,"ip":"","is_system":false,"notes":"Noe Reynolds Beatrice Reichel Updated user Noe Reynolds Beatrice Reichel","created_at":1620971766,"updated_at":1620971766,"token_id":"","quote_id":"","subscription_id":"","recurring_invoice_id":""}],"backups":[{"id":68,"activity_id":"kQBeXqoayK","json_backup":"","html_backup":"\n