'host', 'gprint_format' => 'on', 'aggregate_graph_type' => 1, 'aggregate_total' => 1, 'aggregate_total_type' => 1, 'aggregate_total_prefix' => 'Total', 'aggregate_order_type' => 1, ]; $ag_data = build_ag_data_no_template($request); expect($ag_data)->toHaveKey('gprint_format') ->and($ag_data['gprint_format'])->toBe('on'); }); // --- Non-template path: gprint_format checkbox absent --- test('non-template path sets gprint_format to empty when checkbox is absent', function () { $request = [ 'gprint_prefix' => 'host', 'aggregate_graph_type' => 1, 'aggregate_total' => 0, 'aggregate_total_type' => 0, 'aggregate_total_prefix' => '', 'aggregate_order_type' => 1, ]; $ag_data = build_ag_data_no_template($request); expect($ag_data)->toHaveKey('gprint_format') ->and($ag_data['gprint_format'])->toBe(''); }); // --- Template path: gprint_format copied from template row --- test('template path copies gprint_format on from template data', function () { $template_data = [ 'id' => 5, 'gprint_prefix' => 'host', 'gprint_format' => 'on', 'graph_type' => 1, 'total' => 1, 'total_type' => 1, 'total_prefix' => 'Total', 'order_type' => 1, ]; $ag_data = build_ag_data_from_template($template_data); expect($ag_data)->toHaveKey('gprint_format') ->and($ag_data['gprint_format'])->toBe('on'); }); test('template path copies gprint_format empty from template data', function () { $template_data = [ 'id' => 7, 'gprint_prefix' => 'host', 'gprint_format' => '', 'graph_type' => 1, 'total' => 0, 'total_type' => 0, 'total_prefix' => '', 'order_type' => 1, ]; $ag_data = build_ag_data_from_template($template_data); expect($ag_data)->toHaveKey('gprint_format') ->and($ag_data['gprint_format'])->toBe(''); }); // --- Both paths produce the same field set --- test('both paths produce identical ag_data keys', function () { $request = [ 'gprint_prefix' => 'host', 'gprint_format' => 'on', 'aggregate_graph_type' => 1, 'aggregate_total' => 1, 'aggregate_total_type' => 1, 'aggregate_total_prefix' => 'Total', 'aggregate_order_type' => 1, ]; $template_data = [ 'id' => 5, 'gprint_prefix' => 'host', 'gprint_format' => 'on', 'graph_type' => 1, 'total' => 1, 'total_type' => 1, 'total_prefix' => 'Total', 'order_type' => 1, ]; $no_tpl = build_ag_data_no_template($request); $from_tpl = build_ag_data_from_template($template_data); $no_tpl_keys = array_keys($no_tpl); $from_tpl_keys = array_keys($from_tpl); sort($no_tpl_keys); sort($from_tpl_keys); expect($no_tpl_keys)->toBe($from_tpl_keys); }); // --- Non-template checkbox: isset vs empty distinction --- test('non-template path treats empty string gprint_format as present', function () { /* HTML checkboxes submit 'on', but test that isset() catches any value */ $request = [ 'gprint_prefix' => '', 'gprint_format' => '', 'aggregate_graph_type' => 0, 'aggregate_total' => 0, 'aggregate_total_type' => 0, 'aggregate_total_prefix' => '', 'aggregate_order_type' => 0, ]; $ag_data = build_ag_data_no_template($request); /* key is set in the array, so isset() returns true -> 'on' */ expect($ag_data['gprint_format'])->toBe('on'); });