+ public function test_import_upload_success()
+ {
+ $admin = $this->users->admin();
+ $this->actingAs($admin);
+ $resp = $this->runImportFromFile($this->zipUploadFromData([
+ 'book' => [
+ 'name' => 'My great book name',
+ 'chapters' => [
+ [
+ 'name' => 'my chapter',
+ 'pages' => [
+ [
+ 'name' => 'my chapter page',
+ ]
+ ]
+ ]
+ ],
+ 'pages' => [
+ [
+ 'name' => 'My page',
+ ]
+ ],
+ ],
+ ]));
+
+ $this->assertDatabaseHas('imports', [
+ 'name' => 'My great book name',
+ 'book_count' => 1,
+ 'chapter_count' => 1,
+ 'page_count' => 2,
+ 'created_by' => $admin->id,
+ ]);
+
+ /** @var Import $import */
+ $import = Import::query()->latest()->first();
+ $resp->assertRedirect("/import/{$import->id}");
+ $this->assertFileExists(storage_path($import->path));
+ $this->assertActivityExists(ActivityType::IMPORT_CREATE);
+ }
+
+ public function test_import_show_page()
+ {
+ $import = Import::factory()->create(['name' => 'MySuperAdminImport']);
+
+ $resp = $this->asAdmin()->get("/import/{$import->id}");
+ $resp->assertOk();
+ $resp->assertSee('MySuperAdminImport');
+ }
+
+ public function test_import_show_page_access_limited()
+ {
+ $user = $this->users->viewer();
+ $admin = $this->users->admin();
+ $userImport = Import::factory()->create(['name' => 'MySuperUserImport', 'created_by' => $user->id]);
+ $adminImport = Import::factory()->create(['name' => 'MySuperAdminImport', 'created_by' => $admin->id]);
+ $this->actingAs($user);
+
+ $this->get("/import/{$userImport->id}")->assertRedirect('/');
+ $this->get("/import/{$adminImport->id}")->assertRedirect('/');
+
+ $this->permissions->grantUserRolePermissions($user, ['content-import']);
+
+ $this->get("/import/{$userImport->id}")->assertOk();
+ $this->get("/import/{$adminImport->id}")->assertStatus(404);
+
+ $this->permissions->grantUserRolePermissions($user, ['settings-manage']);
+
+ $this->get("/import/{$userImport->id}")->assertOk();
+ $this->get("/import/{$adminImport->id}")->assertOk();
+ }
+
+ public function test_import_delete()
+ {
+ $this->asAdmin();
+ $this->runImportFromFile($this->zipUploadFromData([
+ 'book' => [
+ 'name' => 'My great book name'
+ ],
+ ]));
+
+ /** @var Import $import */
+ $import = Import::query()->latest()->first();
+ $this->assertDatabaseHas('imports', [
+ 'id' => $import->id,
+ 'name' => 'My great book name'
+ ]);
+ $this->assertFileExists(storage_path($import->path));
+
+ $resp = $this->delete("/import/{$import->id}");
+
+ $resp->assertRedirect('/import');
+ $this->assertActivityExists(ActivityType::IMPORT_DELETE);
+ $this->assertDatabaseMissing('imports', [
+ 'id' => $import->id,
+ ]);
+ $this->assertFileDoesNotExist(storage_path($import->path));
+ }
+
+ public function test_import_delete_access_limited()
+ {
+ $user = $this->users->viewer();
+ $admin = $this->users->admin();
+ $userImport = Import::factory()->create(['name' => 'MySuperUserImport', 'created_by' => $user->id]);
+ $adminImport = Import::factory()->create(['name' => 'MySuperAdminImport', 'created_by' => $admin->id]);
+ $this->actingAs($user);
+
+ $this->delete("/import/{$userImport->id}")->assertRedirect('/');
+ $this->delete("/import/{$adminImport->id}")->assertRedirect('/');
+
+ $this->permissions->grantUserRolePermissions($user, ['content-import']);
+
+ $this->delete("/import/{$userImport->id}")->assertRedirect('/import');
+ $this->delete("/import/{$adminImport->id}")->assertStatus(404);
+
+ $this->permissions->grantUserRolePermissions($user, ['settings-manage']);
+
+ $this->delete("/import/{$adminImport->id}")->assertRedirect('/import');
+ }
+