WIP: implement restoring checkbox inputs

This commit is contained in:
Marcus Moore 2023-11-30 18:15:04 -08:00
parent 505d601488
commit 5041c07c7e
No known key found for this signature in database
4 changed files with 55 additions and 13 deletions

View file

@ -9,13 +9,14 @@ class SavedReportsController extends Controller
{
public function store(Request $request)
{
// @todo: make this dynamic
$savedReport = SavedReport::first();
$savedReport->options = $request->except('_token');
$savedReport->save();
// @todo: should this redirect elsewhere?
// @todo: redirect back with the saved report pre-populated?
return redirect()->back();
}
}

View file

@ -37,6 +37,17 @@ class SavedReport extends Model
return $this->options[$property] ?? '0';
}
public function radioValue($property, $value, $return)
{
// @todo: this method feels more like "radioShouldBeChecked" or something...
if (array_has($this->options, $property) && $this->options[$property] === $value) {
return $return;
}
return null;
}
public function selectValue($property)
{
return $this->options[$property] ?? null;

View file

@ -336,17 +336,16 @@
</div>
<div class="col-md-9 col-md-offset-3">
<label class="form-control">
{{ Form::radio('deleted_assets', '', true, ['aria-label'=>'deleted_assets', 'id'=>'deleted_assets_exclude_deleted'])}}
{{ Form::radio('deleted_assets', '', $savedReport->radioValue('deleted_assets', null, true), ['aria-label'=>'deleted_assets', 'id'=>'deleted_assets_exclude_deleted'])}}
{{ trans('general.exclude_deleted') }}
</label>
<label class="form-control">
{{ Form::radio('deleted_assets', '1', old('deleted_assets'), ['aria-label'=>'deleted_assets', 'id'=>'deleted_assets_include_deleted']) }}
{{ Form::radio('deleted_assets', '1', $savedReport->radioValue('deleted_assets', '1', '1'), ['aria-label'=>'deleted_assets', 'id'=>'deleted_assets_include_deleted']) }}
{{ trans('general.include_deleted') }}
</label>
<label class="form-control">
{{ Form::radio('deleted_assets', '0', old('deleted_assets'), ['aria-label'=>'deleted_assets','id'=>'deleted_assets_only_deleted']) }}
{{ Form::radio('deleted_assets', '0', $savedReport->radioValue('deleted_assets', '0', '1'), ['aria-label'=>'deleted_assets','id'=>'deleted_assets_only_deleted']) }}
{{ trans('general.only_deleted') }}
</label>
</div>

View file

@ -11,40 +11,53 @@ class SavedReportTest extends TestCase
{
$savedReport = SavedReport::factory()->create([
'options' => [
'is_a_checkbox_value' => '1',
'is_a_checkbox_field' => '1',
],
]);
$this->assertEquals('1', $savedReport->checkmarkValue('is_a_checkbox_value'));
$this->assertEquals('1', $savedReport->checkmarkValue('is_a_checkbox_field'));
$this->assertEquals('0', $savedReport->checkmarkValue('non_existent_key'));
$this->assertEquals('1', (new SavedReport)->checkmarkValue('is_a_checkbox_value'));
$this->assertEquals('1', (new SavedReport)->checkmarkValue('is_a_checkbox_field'));
}
public function testParsingTextValue()
{
$savedReport = SavedReport::factory()->create([
'options' => [
'is_a_text_value' => 'some text',
'is_a_text_field' => 'some text',
],
]);
$this->assertEquals('some text', $savedReport->textValue('is_a_text_value'));
$this->assertEquals('some text', $savedReport->textValue('is_a_text_field'));
$this->assertEquals('', $savedReport->textValue('non_existent_key'));
$this->assertEquals('', (new SavedReport)->textValue('is_a_text_value'));
$this->assertEquals('', (new SavedReport)->textValue('is_a_text_field'));
}
public function testParsingRadioValue()
{
$savedReport = SavedReport::factory()->create([
'options' => [
'is_a_radio_field' => null,
],
]);
$this->assertEquals('return_value', $savedReport->radioValue('is_a_radio_field', null, 'return_value'));
$this->assertEquals(null, $savedReport->radioValue('is_a_radio_field', 'another_value', 'return_value'));
$this->assertNull($savedReport->radioValue('non_existent_key', '1', true));
}
public function testParsingSelectValue()
{
$savedReport = SavedReport::factory()->create([
'options' => [
'is_a_text_value_as_well' => '4',
'is_a_text_field_as_well' => '4',
'contains_a_null_value' => null,
],
]);
$this->assertEquals('4', $savedReport->selectValue('is_a_text_value_as_well'));
$this->assertEquals('4', $savedReport->selectValue('is_a_text_field_as_well'));
$this->assertEquals('', $savedReport->selectValue('non_existent_key'));
$this->assertNull($savedReport->selectValue('contains_a_null_value'));
}
@ -95,4 +108,22 @@ class SavedReportTest extends TestCase
// Another option would be to have checkbox that asks the user if they would like to save the dates?
// I'm not sure how helpful that is, and it would probably be a future feature if implemented.
}
public function testSavedReportHasDefaultValuesSet()
{
$this->markTestIncomplete();
// Quick thought: I think deleted_assets should be set to null so that
// "Exclude Deleted Assets" is selected when using a new'd up SavedReport.
}
public function testOldValuesStillWorkAfterTheseChanges()
{
$this->markTestIncomplete();
// Another marker that won't actually be a test case:
// We need to make sure that any behavior involving using "old" input.
// I explicitly removed the old()s from the "deleted_assets" radio buttons.
// The "x-selects" partials still include them, but I haven't tested them yet.
}
}