Files
saifulislamferoz 5efba3ee64 Increase pivot table test coverage
Cover the previously-unexercised code paths flagged by Coveralls:
- writer: month and year date grouping, and a fractional numeric interval
  (the non-integer num() path);
- reader: reading an explicit dataField subtotal attribute back from a saved
  file;
- worksheet: the getPivotTables() alias, addPivotTable(), case-insensitive
  getPivotTableByName(), the no-match lookup, and removePivotTableCollection().
2026-08-03 11:52:58 +06:00

134 lines
4.9 KiB
PHP

<?php
declare(strict_types=1);
namespace PhpOffice\PhpSpreadsheetTests\Worksheet;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Worksheet\PivotTable\PivotCacheDefinition;
use PhpOffice\PhpSpreadsheet\Worksheet\PivotTable\PivotField;
use PhpOffice\PhpSpreadsheet\Worksheet\PivotTable\PivotFieldGroup;
use PhpOffice\PhpSpreadsheet\Worksheet\PivotTable\PivotTable;
use PHPUnit\Framework\TestCase;
class PivotTableModelTest extends TestCase
{
public function testNumericFieldGroupAccessors(): void
{
$group = PivotFieldGroup::numeric(10.0, 0.0, 100.0);
self::assertSame(PivotFieldGroup::TYPE_NUMERIC, $group->getType());
self::assertTrue($group->isNumeric());
self::assertFalse($group->isDate());
self::assertSame(10.0, $group->getInterval());
self::assertSame(0.0, $group->getStartNum());
self::assertSame(100.0, $group->getEndNum());
self::assertSame([], $group->getGroupBy());
self::assertNull($group->getStartDate());
self::assertNull($group->getEndDate());
}
public function testNumericFieldGroupDefaults(): void
{
$group = PivotFieldGroup::numeric(5.0);
self::assertSame(5.0, $group->getInterval());
self::assertNull($group->getStartNum());
self::assertNull($group->getEndNum());
}
public function testDateFieldGroupWithSingleUnit(): void
{
$group = PivotFieldGroup::date(PivotFieldGroup::GROUP_BY_MONTHS);
self::assertSame(PivotFieldGroup::TYPE_DATE, $group->getType());
self::assertTrue($group->isDate());
self::assertFalse($group->isNumeric());
self::assertSame([PivotFieldGroup::GROUP_BY_MONTHS], $group->getGroupBy());
self::assertNull($group->getStartDate());
self::assertNull($group->getEndDate());
}
public function testDateFieldGroupWithMultipleUnitsAndBounds(): void
{
$group = PivotFieldGroup::date(
[PivotFieldGroup::GROUP_BY_YEARS, PivotFieldGroup::GROUP_BY_QUARTERS],
'2024-01-01',
'2025-12-31'
);
self::assertSame(
[PivotFieldGroup::GROUP_BY_YEARS, PivotFieldGroup::GROUP_BY_QUARTERS],
$group->getGroupBy()
);
self::assertSame('2024-01-01', $group->getStartDate());
self::assertSame('2025-12-31', $group->getEndDate());
}
public function testCacheDefinitionFieldGroup(): void
{
$cache = new PivotCacheDefinition(1);
self::assertNull($cache->getFieldGroup('Age'));
$group = PivotFieldGroup::numeric(10.0);
self::assertSame($cache, $cache->setFieldGroup('Age', $group));
self::assertSame($group, $cache->getFieldGroup('Age'));
}
public function testPivotTableToStringReturnsName(): void
{
$pivotTable = new PivotTable('MyPivot');
self::assertSame('MyPivot', (string) $pivotTable);
self::assertSame('MyPivot', $pivotTable->__toString());
}
public function testWorksheetPivotTableCollection(): void
{
$spreadsheet = new Spreadsheet();
$worksheet = $spreadsheet->getActiveSheet();
self::assertCount(0, $worksheet->getPivotTableCollection());
self::assertSame([], $worksheet->getPivotTableNames());
self::assertNull($worksheet->getPivotTableByName('Missing'));
$pivotTable = new PivotTable('First');
self::assertSame($worksheet, $worksheet->addPivotTable($pivotTable));
// addPivotTable attaches the worksheet to the pivot table.
self::assertSame($worksheet, $pivotTable->getWorksheet());
// getPivotTables() is an alias of getPivotTableCollection().
self::assertCount(1, $worksheet->getPivotTables());
self::assertSame(['First'], $worksheet->getPivotTableNames());
self::assertSame($pivotTable, $worksheet->getPivotTableByName('First'));
// Name lookup is case-insensitive.
self::assertSame($pivotTable, $worksheet->getPivotTableByName('FIRST'));
self::assertSame($worksheet, $worksheet->removePivotTableCollection());
self::assertCount(0, $worksheet->getPivotTableCollection());
$spreadsheet->disconnectWorksheets();
}
public function testPivotFieldSetters(): void
{
$field = new PivotField(2, 'Amount');
self::assertSame(2, $field->getIndex());
self::assertSame('Amount', $field->getName());
$field->setName('Total')
->setAxis(PivotField::AXIS_VALUES)
->setDataField(true)
->setSubtotal('count')
->setDataFieldCaption('Count of Amount');
self::assertSame('Total', $field->getName());
self::assertSame(PivotField::AXIS_VALUES, $field->getAxis());
self::assertTrue($field->isDataField());
self::assertSame('count', $field->getSubtotal());
self::assertSame('Count of Amount', $field->getDataFieldCaption());
}
}