Skip to content

Commit 85b9511

Browse files
authored
Merge pull request #618 from FriendsOfCake/maintainance
Update dependencies and fix tests
2 parents 84212c8 + cee6819 commit 85b9511

15 files changed

Lines changed: 449 additions & 391 deletions

.phive/phars.xml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<phive xmlns="https://phar.io/phive">
3-
<phar name="phpstan" version="1.12.4" installed="1.12.4" location="./tools/phpstan" copy="false"/>
4-
<phar name="psalm" version="5.26.1" installed="5.26.1" location="./tools/psalm" copy="false"/>
3+
<phar name="phpstan" version="2.1.19" installed="2.1.19" location="./tools/phpstan" copy="false"/>
54
</phive>

composer.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@
1313
],
1414
"require": {
1515
"cakephp/orm": "^5.0",
16-
"league/flysystem": "^3.15.1.0"
16+
"league/flysystem": "^3.15.1"
1717
},
1818
"require-dev": {
1919
"cakephp/cakephp": "^5.0",
20-
"phpunit/phpunit": "^10.1.0",
20+
"phpunit/phpunit": "^10.5.58 || ^11.5.3 || ^12.4",
2121
"cakephp/cakephp-codesniffer": "^5.0",
2222
"league/flysystem-memory": "^3.15",
2323
"mikey179/vfsstream": "^1.6.10",

phpcs.xml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
<?xml version="1.0"?>
2-
<ruleset name="CakePHP Core">
3-
<config name="installed_paths" value="../../cakephp/cakephp-codesniffer" />
2+
<ruleset name="FriendsOfCake Upload">
3+
<file>config/</file>
4+
<file>src/</file>
5+
<file>tests/</file>
46

57
<rule ref="CakePHP" />
68

phpunit.xml.dist

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
<coverage/>
44
<php>
55
<ini name="memory_limit" value="-1"/>
6-
<ini name="apc.enable_cli" value="1"/>
76
<env name="FIXTURE_SCHEMA_METADATA" value="./tests/schema.php"/>
87
</php>
98
<!-- Add any additional test suites you want to run here -->

psalm.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,8 @@
1616
<directory name="vendor" />
1717
</ignoreFiles>
1818
</projectFiles>
19+
20+
<issueHandlers>
21+
<MissingOverrideAttribute errorLevel="info" />
22+
</issueHandlers>
1923
</psalm>

tests/Stub/ChildBehavior.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
class ChildBehavior extends UploadBehavior
1111
{
1212
protected array $_defaultConfig = ['key' => 'value'];
13+
public array $constructedFiles;
1314

1415
public function constructFiles(
1516
EntityInterface $entity,

tests/TestCase/File/Path/Basepath/DefaultTraitTest.php

Lines changed: 64 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -4,77 +4,87 @@
44
namespace Josegonzalez\Upload\Test\TestCase\File\Path\Basepath;
55

66
use Cake\TestSuite\TestCase;
7+
use Josegonzalez\Upload\File\Path\Basepath\DefaultTrait;
78

89
class DefaultTraitTest extends TestCase
910
{
11+
private function createTraitMock()
12+
{
13+
return new class {
14+
use DefaultTrait;
15+
16+
public $entity;
17+
public $table;
18+
public $settings;
19+
public $data;
20+
public $field;
21+
};
22+
}
23+
1024
public function testNoSpecialConfiguration()
1125
{
12-
$mock = $this->getMockForTrait('Josegonzalez\Upload\File\Path\Basepath\DefaultTrait');
13-
$mock->entity = $this->getMockBuilder('Cake\ORM\Entity')->getMock();
26+
$mock = $this->createTraitMock();
27+
$mock->entity = $this->createStub('Cake\ORM\Entity');
1428
$mock->table = $this->getMockBuilder('Cake\ORM\Table')->getMock();
1529
$mock->settings = [];
1630
$mock->data = ['name' => 'filename'];
1731
$mock->field = 'field';
18-
$mock->entity->expects($this->exactly(0))->method('get')->will($this->returnValue(1));
19-
$mock->table->expects($this->once())->method('getAlias')->will($this->returnValue('Table'));
20-
$mock->table->expects($this->exactly(0))->method('getPrimaryKey')->will($this->returnValue('id'));
32+
$mock->table->expects($this->once())->method('getAlias')->willReturn('Table');
2133
$this->assertEquals('webroot/files/Table/field/', $mock->basepath());
2234
}
2335

2436
public function testCustomPath()
2537
{
26-
$mock = $this->getMockForTrait('Josegonzalez\Upload\File\Path\Basepath\DefaultTrait');
27-
$mock->entity = $this->getMockBuilder('Cake\ORM\Entity')->getMock();
38+
$mock = $this->createTraitMock();
39+
$mock->entity = $this->createStub('Cake\ORM\Entity');
2840
$mock->table = $this->getMockBuilder('Cake\ORM\Table')->getMock();
2941
$mock->settings = ['path' => 'webroot{DS}files{DS}{model}-{field}{DS}'];
3042
$mock->data = ['name' => 'filename'];
3143
$mock->field = 'field';
32-
$mock->entity->expects($this->exactly(0))->method('get')->will($this->returnValue(1));
33-
$mock->table->expects($this->once())->method('getAlias')->will($this->returnValue('Table'));
34-
$mock->table->expects($this->exactly(0))->method('getPrimaryKey')->will($this->returnValue('id'));
44+
$mock->table->expects($this->once())->method('getAlias')->willReturn('Table');
3545
$this->assertEquals('webroot/files/Table-field/', $mock->basepath());
3646
}
3747

3848
public function testExistingEntityWithPrimaryKey()
3949
{
40-
$mock = $this->getMockForTrait('Josegonzalez\Upload\File\Path\Basepath\DefaultTrait');
50+
$mock = $this->createTraitMock();
4151
$mock->entity = $this->getMockBuilder('Cake\ORM\Entity')->getMock();
4252
$mock->table = $this->getMockBuilder('Cake\ORM\Table')->getMock();
4353
$mock->settings = ['path' => 'webroot{DS}files{DS}{model}-{field}{DS}{primaryKey}/'];
4454
$mock->data = ['name' => 'filename'];
4555
$mock->field = 'field';
46-
$mock->entity->expects($this->once())->method('get')->will($this->returnValue(1));
47-
$mock->table->expects($this->once())->method('getAlias')->will($this->returnValue('Table'));
48-
$mock->table->expects($this->exactly(2))->method('getPrimaryKey')->will($this->returnValue('id'));
56+
$mock->entity->expects($this->once())->method('get')->willReturn(1);
57+
$mock->table->expects($this->once())->method('getAlias')->willReturn('Table');
58+
$mock->table->expects($this->exactly(2))->method('getPrimaryKey')->willReturn('id');
4959
$this->assertEquals('webroot/files/Table-field/1/', $mock->basepath());
5060
}
5161

5262
public function testNewEntity()
5363
{
5464
$this->expectException('LogicException', '{primaryKey} substitution not allowed for new entities');
5565

56-
$mock = $this->getMockForTrait('Josegonzalez\Upload\File\Path\Basepath\DefaultTrait');
66+
$mock = $this->createTraitMock();
5767
$mock->entity = $this->getMockBuilder('Cake\ORM\Entity')->getMock();
58-
$mock->table = $this->getMockBuilder('Cake\ORM\Table')->getMock();
68+
$mock->table = $this->createStub('Cake\ORM\Table');
5969
$mock->settings = ['path' => 'webroot{DS}files{DS}{model}-{field}{DS}{primaryKey}/'];
6070
$mock->data = ['name' => 'filename'];
6171
$mock->field = 'field';
62-
$mock->entity->expects($this->once())->method('isNew')->will($this->returnValue(true));
72+
$mock->entity->expects($this->once())->method('isNew')->willReturn(true);
6373
$mock->basepath();
6474
}
6575

6676
public function testExitingEntityWithCompositePrimaryKey()
6777
{
6878
$this->expectException('LogicException', '{primaryKey} substitution not valid for composite primary keys');
6979

70-
$mock = $this->getMockForTrait('Josegonzalez\Upload\File\Path\Basepath\DefaultTrait');
80+
$mock = $this->createTraitMock();
7181
$mock->entity = $this->getMockBuilder('Cake\ORM\Entity')->getMock();
7282
$mock->table = $this->getMockBuilder('Cake\ORM\Table')->getMock();
7383
$mock->settings = ['path' => 'webroot{DS}files{DS}{model}-{field}{DS}{primaryKey}/'];
7484
$mock->data = ['name' => 'filename'];
7585
$mock->field = 'field';
76-
$mock->entity->expects($this->once())->method('isNew')->will($this->returnValue(false));
77-
$mock->table->expects($this->once())->method('getPrimaryKey')->will($this->returnValue(['id', 'other_id']));
86+
$mock->entity->expects($this->once())->method('isNew')->willReturn(false);
87+
$mock->table->expects($this->once())->method('getPrimaryKey')->willReturn(['id', 'other_id']);
7888
$mock->basepath();
7989
}
8090

@@ -83,22 +93,21 @@ public function testExitingEntityWithCompositePrimaryKey()
8393
*/
8494
public function testPathWithoutPrimaryKey()
8595
{
86-
$mock = $this->getMockForTrait('Josegonzalez\Upload\File\Path\Basepath\DefaultTrait');
87-
$mock->entity = $this->getMockBuilder('Cake\ORM\Entity')->getMock();
96+
$mock = $this->createTraitMock();
97+
$mock->entity = $this->createStub('Cake\ORM\Entity');
8898
$mock->table = $this->getMockBuilder('Cake\ORM\Table')->getMock();
8999
$mock->settings = ['path' => 'webroot{DS}files{DS}{model}-{field}{DS}'];
90100
$mock->data = ['name' => 'filename'];
91101
$mock->field = 'field';
92-
$mock->table->expects($this->exactly(0))->method('getPrimaryKey')->will($this->returnValue(['id', 'other_id']));
93-
$mock->table->expects($this->once())->method('getAlias')->will($this->returnValue('Table'));
102+
$mock->table->expects($this->once())->method('getAlias')->willReturn('Table');
94103
$this->assertEquals('webroot/files/Table-field/', $mock->basepath());
95104
}
96105

97106
public function testYearWithMonthPath()
98107
{
99-
$mock = $this->getMockForTrait('Josegonzalez\Upload\File\Path\Basepath\DefaultTrait');
100-
$mock->entity = $this->getMockBuilder('Cake\ORM\Entity')->getMock();
101-
$mock->table = $this->getMockBuilder('Cake\ORM\Table')->getMock();
108+
$mock = $this->createTraitMock();
109+
$mock->entity = $this->createStub('Cake\ORM\Entity');
110+
$mock->table = $this->createStub('Cake\ORM\Table');
102111
$mock->settings = ['path' => 'webroot{DS}files{DS}{year}{DS}{month}{DS}'];
103112
$mock->data = ['name' => 'filename'];
104113
$mock->field = 'field';
@@ -108,9 +117,9 @@ public function testYearWithMonthPath()
108117

109118
public function testYearWithMonthAndDayPath()
110119
{
111-
$mock = $this->getMockForTrait('Josegonzalez\Upload\File\Path\Basepath\DefaultTrait');
112-
$mock->entity = $this->getMockBuilder('Cake\ORM\Entity')->getMock();
113-
$mock->table = $this->getMockBuilder('Cake\ORM\Table')->getMock();
120+
$mock = $this->createTraitMock();
121+
$mock->entity = $this->createStub('Cake\ORM\Entity');
122+
$mock->table = $this->createStub('Cake\ORM\Table');
114123
$mock->settings = ['path' => 'webroot{DS}files{DS}{year}{DS}{month}{DS}{day}{DS}'];
115124
$mock->data = ['name' => 'filename'];
116125
$mock->field = 'field';
@@ -120,15 +129,14 @@ public function testYearWithMonthAndDayPath()
120129

121130
public function testModelFieldYearWithMonthAndDayPath()
122131
{
123-
$mock = $this->getMockForTrait('Josegonzalez\Upload\File\Path\Basepath\DefaultTrait');
124-
$mock->entity = $this->getMockBuilder('Cake\ORM\Entity')->getMock();
132+
$mock = $this->createTraitMock();
133+
$mock->entity = $this->createStub('Cake\ORM\Entity');
125134
$mock->table = $this->getMockBuilder('Cake\ORM\Table')->getMock();
126135
$mock->settings = ['path' => 'webroot{DS}files{DS}{model}{DS}{field}{DS}{year}{DS}{month}{DS}{day}{DS}'];
127136

128137
$mock->data = ['name' => 'filename'];
129138
$mock->field = 'field';
130-
$mock->entity->expects($this->exactly(0))->method('get')->will($this->returnValue(1));
131-
$mock->table->expects($this->once())->method('getAlias')->will($this->returnValue('Table'));
139+
$mock->table->expects($this->once())->method('getAlias')->willReturn('Table');
132140

133141
$this->assertEquals('webroot/files/Table/field/' . date('Y') . '/' . date('m') . '/' . date('d') . '/', $mock->basepath());
134142
}
@@ -137,54 +145,59 @@ public function testFieldValueMissing()
137145
{
138146
$this->expectException('LogicException', 'Field value for substitution is missing: field');
139147

140-
$mock = $this->getMockForTrait('Josegonzalez\Upload\File\Path\Basepath\DefaultTrait');
141-
$mock->entity = $this->getMockBuilder('Cake\ORM\Entity')->getMock();
142-
$mock->table = $this->getMockBuilder('Cake\ORM\Table')->getMock();
148+
$mock = $this->createTraitMock();
149+
$entity = $this->createStub('Cake\ORM\Entity');
150+
$entity->method('get')->willReturn(null);
151+
$mock->entity = $entity;
152+
$mock->table = $this->createStub('Cake\ORM\Table');
143153
$mock->settings = ['path' => 'webroot{DS}files{DS}{model}{DS}{field-value:field}{DS}'];
144154
$mock->data = ['name' => 'filename'];
145155
$mock->field = 'field';
146-
$mock->entity->expects($this->any())->method('get')->will($this->returnValue(null));
147156
$mock->basepath();
148157
}
149158

150159
public function testFieldValueNonScalar()
151160
{
152161
$this->expectException('LogicException', 'Field value for substitution must be a integer, float, string or boolean: field');
153162

154-
$mock = $this->getMockForTrait('Josegonzalez\Upload\File\Path\Basepath\DefaultTrait');
155-
$mock->entity = $this->getMockBuilder('Cake\ORM\Entity')->getMock();
156-
$mock->table = $this->getMockBuilder('Cake\ORM\Table')->getMock();
163+
$mock = $this->createTraitMock();
164+
$entity = $this->createStub('Cake\ORM\Entity');
165+
$entity->method('get')->willReturn([]);
166+
$mock->entity = $entity;
167+
$mock->table = $this->createStub('Cake\ORM\Table');
157168
$mock->settings = ['path' => 'webroot{DS}files{DS}{model}{DS}{field-value:field}{DS}'];
158169
$mock->data = ['name' => 'filename'];
159170
$mock->field = 'field';
160-
$mock->entity->expects($this->any())->method('get')->will($this->returnValue([]));
161171
$mock->basepath();
162172
}
163173

164174
public function testFieldValueZeroLength()
165175
{
166176
$this->expectException('LogicException', 'Field value for substitution must be non-zero in length: field');
167177

168-
$mock = $this->getMockForTrait('Josegonzalez\Upload\File\Path\Basepath\DefaultTrait');
169-
$mock->entity = $this->getMockBuilder('Cake\ORM\Entity')->getMock();
170-
$mock->table = $this->getMockBuilder('Cake\ORM\Table')->getMock();
178+
$mock = $this->createTraitMock();
179+
$entity = $this->createStub('Cake\ORM\Entity');
180+
$entity->method('get')->willReturn('');
181+
$mock->entity = $entity;
182+
$mock->table = $this->createStub('Cake\ORM\Table');
171183
$mock->settings = ['path' => 'webroot{DS}files{DS}{model}{DS}{field-value:field}{DS}'];
172184
$mock->data = ['name' => 'filename'];
173185
$mock->field = 'field';
174-
$mock->entity->expects($this->any())->method('get')->will($this->returnValue(''));
175186
$mock->basepath();
176187
}
177188

178189
public function testFieldValue()
179190
{
180-
$mock = $this->getMockForTrait('Josegonzalez\Upload\File\Path\Basepath\DefaultTrait');
181-
$mock->entity = $this->getMockBuilder('Cake\ORM\Entity')->getMock();
182-
$mock->table = $this->getMockBuilder('Cake\ORM\Table')->getMock();
191+
$mock = $this->createTraitMock();
192+
$entity = $this->createStub('Cake\ORM\Entity');
193+
$entity->method('get')->willReturn('value');
194+
$table = $this->getMockBuilder('Cake\ORM\Table')->getMock();
195+
$table->expects($this->once())->method('getAlias')->willReturn('Table');
196+
$mock->entity = $entity;
197+
$mock->table = $table;
183198
$mock->settings = ['path' => 'webroot{DS}files{DS}{model}{DS}{field-value:field}{DS}'];
184199
$mock->data = ['name' => 'filename'];
185200
$mock->field = 'field';
186-
$mock->entity->expects($this->any())->method('get')->will($this->returnValue('value'));
187-
$mock->table->expects($this->once())->method('getAlias')->will($this->returnValue('Table'));
188201
$this->assertEquals('webroot/files/Table/value/', $mock->basepath());
189202
}
190203
}

tests/TestCase/File/Path/DefaultProcessorTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ class DefaultProcessorTest extends TestCase
1111
{
1212
public function testIsProcessorInterface()
1313
{
14-
$entity = $this->getMockBuilder('Cake\ORM\Entity')->getMock();
15-
$table = $this->getMockBuilder('Cake\ORM\Table')->getMock();
14+
$entity = $this->createStub('Cake\ORM\Entity');
15+
$table = $this->createStub('Cake\ORM\Table');
1616
$data = new UploadedFile(fopen('php://temp', 'wb+'), 150, UPLOAD_ERR_OK);
1717
$field = 'field';
1818
$settings = [];

tests/TestCase/File/Path/Filename/DefaultTraitTest.php

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,41 @@
44
namespace Josegonzalez\Upload\Test\TestCase\File\Path\Filename;
55

66
use Cake\TestSuite\TestCase;
7+
use Josegonzalez\Upload\File\Path\Filename\DefaultTrait;
78
use Laminas\Diactoros\UploadedFile;
89

910
class DefaultTraitTest extends TestCase
1011
{
12+
private function createTraitMock()
13+
{
14+
return new class {
15+
use DefaultTrait;
16+
17+
public $entity;
18+
public $table;
19+
public $settings;
20+
public $data;
21+
public $field;
22+
};
23+
}
24+
1125
public function testFilename()
1226
{
13-
$mock = $this->getMockForTrait('Josegonzalez\Upload\File\Path\Filename\DefaultTrait');
27+
$mock = $this->createTraitMock();
1428
$mock->settings = [];
1529
$mock->data = new UploadedFile(fopen('php://temp', 'wb+'), 150, UPLOAD_ERR_OK, 'filename');
1630
$this->assertEquals('filename', $mock->filename());
1731

18-
$mock = $this->getMockForTrait('Josegonzalez\Upload\File\Path\Filename\DefaultTrait');
32+
$mock = $this->createTraitMock();
1933
$mock->settings = [
2034
'nameCallback' => 'not_callable',
2135
];
2236
$mock->data = new UploadedFile(fopen('php://temp', 'wb+'), 150, UPLOAD_ERR_OK, 'filename');
2337
$this->assertEquals('filename', $mock->filename());
2438

25-
$mock = $this->getMockForTrait('Josegonzalez\Upload\File\Path\Filename\DefaultTrait');
26-
$mock->entity = $this->getMockBuilder('Cake\ORM\Entity')->getMock();
27-
$mock->table = $this->getMockBuilder('Cake\ORM\Table')->getMock();
39+
$mock = $this->createTraitMock();
40+
$mock->entity = $this->createStub('Cake\ORM\Entity');
41+
$mock->table = $this->createStub('Cake\ORM\Table');
2842
$mock->field = 'field';
2943
$mock->settings = [
3044
'nameCallback' => function ($table, $entity, $data, $field, $settings) {

tests/TestCase/File/Transformer/DefaultTransformerTest.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,13 @@
99

1010
class DefaultTransformerTest extends TestCase
1111
{
12+
protected UploadedFile $uploadedFile;
13+
protected DefaultTransformer $transformer;
14+
1215
public function setUp(): void
1316
{
14-
$entity = $this->getMockBuilder('Cake\ORM\Entity')->getMock();
15-
$table = $this->getMockBuilder('Cake\ORM\Table')->getMock();
17+
$entity = $this->createStub('Cake\ORM\Entity');
18+
$table = $this->createStub('Cake\ORM\Table');
1619
$this->uploadedFile = new UploadedFile(fopen('php://temp', 'wb+'), 150, UPLOAD_ERR_OK, 'foo.txt');
1720

1821
$field = 'field';

0 commit comments

Comments
 (0)