Passed
Pull Request — master (#3236)
by Mark
11:30
created

testNamedFormulaUpdateOnHeadingColumnChange()   A

Complexity

Conditions 3
Paths 4

Size

Total Lines 24
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 14
c 1
b 0
f 0
dl 0
loc 24
rs 9.7998
cc 3
nc 4
nop 0
1
<?php
2
3
namespace PhpOffice\PhpSpreadsheetTests\Worksheet\Table;
4
5
use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
6
use PHPUnit\Framework\TestCase;
7
8
class FormulaTest extends TestCase
9
{
10
    public function testCellFormulaUpdateOnTableNameChange(): void
11
    {
12
        $reader = new Xlsx();
13
        $filename = 'tests/data/Worksheet/Table/TableFormulae.xlsx';
14
        $spreadsheet = $reader->load($filename);
15
        $worksheet = $spreadsheet->getActiveSheet();
16
17
        // Verify original formulae
18
        // Row Formula
19
        self::assertSame("=DeptSales[[#This Row],[Sales\u{a0}Amount]]*DeptSales[[#This Row],[% Commission]]", $worksheet->getCell('E2')->getValue());
20
        // Totals Formula
21
        self::assertSame('=SUBTOTAL(109,DeptSales[Commission Amount])', $worksheet->getCell('E8')->getValue());
22
23
        $table = $worksheet->getTableCollection()[0];
24
        if ($table === null) {
25
            self::markTestSkipped('Unable to read table for testing.');
26
        }
27
        $table->setName('tblSalesByDepartment');
28
29
        // Verify modified formulae
30
        // Row Formula
31
        self::assertSame("=tblSalesByDepartment[[#This Row],[Sales\u{a0}Amount]]*tblSalesByDepartment[[#This Row],[% Commission]]", $worksheet->getCell('E2')->getValue());
32
        // Totals Formula
33
        self::assertSame('=SUBTOTAL(109,tblSalesByDepartment[Commission Amount])', $worksheet->getCell('E8')->getValue());
34
35
        $spreadsheet->disconnectWorksheets();
36
    }
37
38
    public function testNamedFormulaUpdateOnTableNameChange(): void
39
    {
40
        $reader = new Xlsx();
41
        $filename = 'tests/data/Worksheet/Table/TableFormulae.xlsx';
42
        $spreadsheet = $reader->load($filename);
43
44
        $table = $spreadsheet->getActiveSheet()->getTableCollection()[0];
45
        if ($table === null) {
46
            self::markTestSkipped('Unable to read table for testing.');
47
        }
48
        $namedFormula = $spreadsheet->getNamedFormula('CommissionTotal');
49
        if ($namedFormula === null) {
50
            self::markTestSkipped('Unable to read named formula for testing.');
51
        }
52
53
        // Verify original formula
54
        self::assertSame('SUBTOTAL(109,DeptSales[Commission Amount])', $namedFormula->getFormula());
55
56
        $table->setName('tblSalesByDepartment');
57
        // Verify modified formula
58
        self::assertSame('SUBTOTAL(109,tblSalesByDepartment[Commission Amount])', $namedFormula->getFormula());
59
60
        $spreadsheet->disconnectWorksheets();
61
    }
62
63
    public function testCellFormulaUpdateOnHeadingColumnChange(): void
64
    {
65
        $reader = new Xlsx();
66
        $filename = 'tests/data/Worksheet/Table/TableFormulae.xlsx';
67
        $spreadsheet = $reader->load($filename);
68
        $worksheet = $spreadsheet->getActiveSheet();
69
70
        // Verify original formulae
71
        // Row Formula
72
        self::assertSame("=DeptSales[[#This Row],[Sales\u{a0}Amount]]*DeptSales[[#This Row],[% Commission]]", $worksheet->getCell('E2')->getValue());
73
        // Totals Formula
74
        self::assertSame('=SUBTOTAL(109,DeptSales[Commission Amount])', $worksheet->getCell('E8')->getValue());
75
76
        $worksheet->getCell('D1')->setValue('Commission %age');
77
        $worksheet->getCell('E1')->setValue('Commission');
78
79
        // Verify modified formulae
80
        // Row Formula
81
        self::assertSame("=DeptSales[[#This Row],[Sales\u{a0}Amount]]*DeptSales[[#This Row],[Commission %age]]", $worksheet->getCell('E2')->getValue());
82
        // Totals Formula
83
        self::assertSame('=SUBTOTAL(109,DeptSales[Commission])', $worksheet->getCell('E8')->getValue());
84
85
        $spreadsheet->disconnectWorksheets();
86
    }
87
88
    public function testNamedFormulaUpdateOnHeadingColumnChange(): void
89
    {
90
        $reader = new Xlsx();
91
        $filename = 'tests/data/Worksheet/Table/TableFormulae.xlsx';
92
        $spreadsheet = $reader->load($filename);
93
        $worksheet = $spreadsheet->getActiveSheet();
94
95
        $table = $spreadsheet->getActiveSheet()->getTableCollection()[0];
96
        if ($table === null) {
97
            self::markTestSkipped('Unable to read table for testing.');
98
        }
99
        $namedFormula = $spreadsheet->getNamedFormula('CommissionTotal');
100
        if ($namedFormula === null) {
101
            self::markTestSkipped('Unable to read named formula for testing.');
102
        }
103
104
        // Verify original formula
105
        self::assertSame('SUBTOTAL(109,DeptSales[Commission Amount])', $namedFormula->getFormula());
106
107
        $worksheet->getCell('E1')->setValue('Commission');
108
        // Verify modified formula
109
        self::assertSame('SUBTOTAL(109,DeptSales[Commission])', $namedFormula->getFormula());
110
111
        $spreadsheet->disconnectWorksheets();
112
    }
113
}
114