mirror of
https://github.com/snipe/snipe-it.git
synced 2026-08-18 11:15:42 +00:00
WIP: Component report scaffolding
This commit is contained in:
@ -32,9 +32,10 @@ class CustomAccessoryReportController extends Controller
|
||||
|
||||
public function run()
|
||||
{
|
||||
ini_set('max_execution_time', env('REPORT_TIME_LIMIT', 12000)); // 12000 seconds = 200 minutes
|
||||
$this->authorize('reports.view');
|
||||
|
||||
ini_set('max_execution_time', env('REPORT_TIME_LIMIT', 12000)); // 12000 seconds = 200 minutes
|
||||
|
||||
$this->disableDebugbar();
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Reports;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\ReportTemplate;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class CustomComponentReportController extends Controller
|
||||
{
|
||||
public function show(Request $request)
|
||||
{
|
||||
$this->authorize('reports.view');
|
||||
|
||||
$report_templates = ReportTemplate::where('type', 'component')->orderBy('name')->get();
|
||||
|
||||
// The view needs a template to render correctly, even if it is empty...
|
||||
$template = new ReportTemplate;
|
||||
|
||||
// Set the report's input values in the cases we were redirected back
|
||||
// with validation errors so the report is populated as expected.
|
||||
if ($request->old()) {
|
||||
$template->name = $request->old('name');
|
||||
$template->options = $request->old();
|
||||
}
|
||||
|
||||
return view('reports.custom.component', [
|
||||
'report_templates' => $report_templates,
|
||||
'template' => $template,
|
||||
]);
|
||||
}
|
||||
|
||||
public function run(Request $request)
|
||||
{
|
||||
$this->authorize('reports.view');
|
||||
|
||||
ini_set('max_execution_time', env('REPORT_TIME_LIMIT', 12000)); // 12000 seconds = 200 minutes
|
||||
|
||||
$this->disableDebugbar();
|
||||
}
|
||||
}
|
||||
@ -1843,6 +1843,11 @@
|
||||
Custom Accessory Report
|
||||
</a>
|
||||
</li>
|
||||
<li {{!! (request()->is('reports.custom.component') ? ' class="active"' : '') !!}}>
|
||||
<a href="{{ route('reports.custom.component') }}">
|
||||
Custom Component Report
|
||||
</a>
|
||||
</li>
|
||||
<li {{!! (request()->is('reports/audit') ? ' class="active"' : '') !!}}>
|
||||
<a href="{{ route('reports.audit') }}">
|
||||
{{ trans('general.audit_report') }}</a>
|
||||
|
||||
0
resources/views/reports/custom/component.blade.php
Normal file
0
resources/views/reports/custom/component.blade.php
Normal file
@ -22,6 +22,7 @@ use App\Http\Controllers\ModalController;
|
||||
use App\Http\Controllers\NotesController;
|
||||
use App\Http\Controllers\ProfileController;
|
||||
use App\Http\Controllers\Reports\CustomAccessoryReportController;
|
||||
use App\Http\Controllers\Reports\CustomComponentReportController;
|
||||
use App\Http\Controllers\ReportsController;
|
||||
use App\Http\Controllers\ReportTemplatesController;
|
||||
use App\Http\Controllers\SettingsController;
|
||||
@ -518,6 +519,14 @@ Route::group(['prefix' => 'reports', 'middleware' => ['auth']], function () {
|
||||
|
||||
Route::post('accessory', [CustomAccessoryReportController::class, 'run'])
|
||||
->name('reports.custom.accessory.run');
|
||||
|
||||
Route::get('component', [CustomComponentReportController::class, 'show'])
|
||||
->name('reports.custom.component')
|
||||
->breadcrumbs(fn (Trail $trail) => $trail->parent('home')
|
||||
->push('Custom Component Report', route('reports.custom.component')));
|
||||
|
||||
Route::post('component', [CustomComponentReportController::class, 'run'])
|
||||
->name('reports.custom.component.run');
|
||||
});
|
||||
|
||||
Route::prefix('templates')
|
||||
|
||||
@ -40,11 +40,13 @@ class CustomAccessoryReportTest extends TestCase
|
||||
// Given there are saved templates for one user
|
||||
ReportTemplate::factory()->create(['type' => 'asset', 'name' => 'Another User: Asset']);
|
||||
ReportTemplate::factory()->create(['type' => 'accessory', 'name' => 'Another User: Accessory']);
|
||||
ReportTemplate::factory()->create(['type' => 'component', 'name' => 'Another User: Component']);
|
||||
|
||||
// When loading reports.custom.accessory while acting as another user that also has saved templates
|
||||
$user = User::factory()->canViewReports()
|
||||
->has(ReportTemplate::factory(['type' => 'asset', 'name' => 'User: Asset']))
|
||||
->has(ReportTemplate::factory(['type' => 'accessory', 'name' => 'User: Accessory']))
|
||||
->has(ReportTemplate::factory(['type' => 'component', 'name' => 'User: Component']))
|
||||
->create();
|
||||
|
||||
$response = $this->actingAs($user)->get(route('reports.custom.accessory'));
|
||||
@ -54,8 +56,10 @@ class CustomAccessoryReportTest extends TestCase
|
||||
// The user should only see their accessory template
|
||||
$this->assertTrue($viewTemplateNames->contains('User: Accessory'));
|
||||
$this->assertTrue($viewTemplateNames->doesntContain('User: Asset'));
|
||||
$this->assertTrue($viewTemplateNames->doesntContain('User: Component'));
|
||||
$this->assertTrue($viewTemplateNames->doesntContain('Another User: Asset'));
|
||||
$this->assertTrue($viewTemplateNames->doesntContain('Another User: Accessory'));
|
||||
$this->assertTrue($viewTemplateNames->doesntContain('Another User: Component'));
|
||||
}
|
||||
|
||||
public function test_custom_accessory_report()
|
||||
|
||||
@ -2,51 +2,85 @@
|
||||
|
||||
namespace Tests\Feature\Reporting\Custom;
|
||||
|
||||
use App\Models\ReportTemplate;
|
||||
use App\Models\User;
|
||||
use PHPUnit\Framework\Attributes\Group;
|
||||
use Tests\TestCase;
|
||||
|
||||
#[Group('custom-reporting')]
|
||||
class CustomComponentReportTest extends TestCase
|
||||
{
|
||||
public function test_requires_permission_to_view_page()
|
||||
{
|
||||
$this->markTestIncomplete();
|
||||
$this->actingAs(User::factory()->create())
|
||||
->get(route('reports.custom.component'))
|
||||
->assertForbidden();
|
||||
}
|
||||
|
||||
public function test_requires_permission_to_run_report()
|
||||
{
|
||||
$this->markTestIncomplete();
|
||||
$this->actingAs(User::factory()->create())
|
||||
->post(route('reports.custom.component.run'), [
|
||||
//
|
||||
])
|
||||
->assertForbidden();
|
||||
}
|
||||
|
||||
public function test_can_load_custom_report_page()
|
||||
{
|
||||
$this->markTestIncomplete();
|
||||
$this->actingAs(User::factory()->canViewReports()->create())
|
||||
->get(route('reports.custom.component'))
|
||||
->assertOk();
|
||||
}
|
||||
|
||||
public function test_saved_templates_on_page_are_scoped_to_the_user_and_type()
|
||||
{
|
||||
$this->markTestIncomplete();
|
||||
// Given there are saved templates for one user
|
||||
ReportTemplate::factory()->create(['type' => 'asset', 'name' => 'Another User: Asset']);
|
||||
ReportTemplate::factory()->create(['type' => 'accessory', 'name' => 'Another User: Accessory']);
|
||||
ReportTemplate::factory()->create(['type' => 'component', 'name' => 'Another User: Component']);
|
||||
|
||||
// When loading reports.custom.component while acting as another user that also has saved templates
|
||||
$user = User::factory()->canViewReports()
|
||||
->has(ReportTemplate::factory(['type' => 'asset', 'name' => 'User: Asset']))
|
||||
->has(ReportTemplate::factory(['type' => 'accessory', 'name' => 'User: Accessory']))
|
||||
->has(ReportTemplate::factory(['type' => 'component', 'name' => 'User: Component']))
|
||||
->create();
|
||||
|
||||
$response = $this->actingAs($user)->get(route('reports.custom.component'));
|
||||
|
||||
$viewTemplateNames = $response->viewData('report_templates')->pluck('name');
|
||||
|
||||
// The user should only see their component template
|
||||
$this->assertTrue($viewTemplateNames->contains('User: Component'));
|
||||
$this->assertTrue($viewTemplateNames->doesntContain('User: Accessory'));
|
||||
$this->assertTrue($viewTemplateNames->doesntContain('User: Asset'));
|
||||
$this->assertTrue($viewTemplateNames->doesntContain('Another User: Asset'));
|
||||
$this->assertTrue($viewTemplateNames->doesntContain('Another User: Accessory'));
|
||||
$this->assertTrue($viewTemplateNames->doesntContain('Another User: Component'));
|
||||
}
|
||||
|
||||
public function test_custom_accessory_report()
|
||||
public function test_custom_component_report()
|
||||
{
|
||||
$this->markTestIncomplete();
|
||||
}
|
||||
|
||||
public function test_custom_accessory_report_headers()
|
||||
public function test_custom_component_report_headers()
|
||||
{
|
||||
$this->markTestIncomplete();
|
||||
}
|
||||
|
||||
public function test_custom_accessory_report_content()
|
||||
public function test_custom_component_report_content()
|
||||
{
|
||||
$this->markTestIncomplete();
|
||||
}
|
||||
|
||||
public function test_custom_accessory_report_exclude_deleted()
|
||||
public function test_custom_component_report_exclude_deleted()
|
||||
{
|
||||
$this->markTestIncomplete();
|
||||
}
|
||||
|
||||
public function test_custom_accessory_report_adheres_to_company_scoping()
|
||||
public function test_custom_component_report_adheres_to_company_scoping()
|
||||
{
|
||||
$this->markTestIncomplete();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user