Skip to content

Commit 6459dd6

Browse files
authored
Merge pull request #20 from eclipxe13/master
Fix double extension on cfdi zip archives
2 parents a565fb1 + 231e3fb commit 6459dd6

File tree

5 files changed

+58
-11
lines changed

5 files changed

+58
-11
lines changed

docs/CHANGELOG.md

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,29 @@
11
# CHANGELOG
22

3-
## About SemVer
3+
## Acerca de los números de versiones
44

5-
In summary, [SemVer](https://semver.org/) can be viewed as ` Breaking . Feature . Fix `, where:
5+
Respetamos el estándar [Versionado Semántico 2.0.0](https://semver.org/lang/es/).
66

7-
- Breaking version = includes incompatible changes to the API
8-
- Feature version = adds new feature(s) in a backwards-compatible manner
9-
- Fix version = includes backwards-compatible bug fixes
7+
En resumen, [SemVer](https://semver.org/) es un sistema de versiones de tres componentes `X.Y.Z`
8+
que nombraremos así: ` Breaking . Feature . Fix `, donde:
109

11-
**Version `0.x.x` doesn't have to apply any of the SemVer rules**
10+
- `Breaking`: Rompe la compatibilidad de código con versiones anteriores.
11+
- `Feature`: Agrega una nueva característica que es compatible con lo anterior.
12+
- `Fix`: Incluye algún cambio (generalmente correcciones) que no agregan nueva funcionalidad.
13+
14+
**Importante:** Las reglas de SEMVER no aplican si estás usando una rama (por ejemplo `master-dev`)
15+
o estás usando una versión cero (por ejemplo `0.18.4`).
16+
17+
## Version 0.3.1 2020-06-04
18+
19+
- Se corrige el problema de que recientemente los archivos ZIP de consultas de CFDI vienen con doble extensión,
20+
por ejemplo `aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee.xml.xml`.
1221

1322
## Version 0.3.0 2020-05-01
1423

1524
- Se actualizan las dependencias `php: >=7.3` y `phpunit: ^9.1`.
1625
- Se actualiza `php-cs-fixer` para usar `@PHP73Migration`.
1726

18-
1927
## Version 0.2.6 2020-04-11
2028

2129
- Se actualizan los tests para que usen el RFC `EKU9003173C9`.
@@ -61,7 +69,7 @@ In summary, [SemVer](https://semver.org/) can be viewed as ` Breaking . Feature
6169

6270
## Version 0.2.2 2019-08-20
6371

64-
- Make sure that when constructing a `DateTime` it fails with an exception.
72+
- Make sure when constructing a `DateTime` that it fails with an exception.
6573
- Improve code coverage.
6674

6775

docs/TODO.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
# phpcfdi/sat-ws-descarga-masiva To Do List
22

3-
- Generar excepciones del proyecto en lugar de excepciones genéricas
3+
- Generar excepciones del proyecto en lugar de excepciones genéricas.
44

55
- Mover el script de consumo con credenciales válidas a su propio proyecto dependiente de este.
66

7+
- Los objetos CfdiPackageReader y MetadataPackageReader deberían de utilizar objetos independientes para
8+
el filtrado, las forma de estructurarlo a través de un AbstractPackageReader no es la mejor opción.
9+
Un ejemplo claro es la imposibilidad de crear tests unitarios correctos, porque el objeto encargado
10+
de leer las entradas del archivo zip comparte la responsabilidad de filtrar por nombre o por contenido, estas
11+
últimas dos responsabilidades deberían ser independientes.
12+
713
- Llevar el code coverage a 100% con test unitarios
814
2020-05-01: Version 0.3.0 93%
915
2019-12-06: Version 0.2.4 92%

src/PackageReader/CfdiPackageReader.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ class CfdiPackageReader extends AbstractPackageReader
88
{
99
protected function filterEntryFilename(string $filename): bool
1010
{
11-
if (boolval(preg_match('/^[\w\-]{36}\.xml$/i', $filename))) {
11+
// this regexp means that start with al least 1 char that is not "/" or "\"
12+
// and continues and ends with ".xml". So x.xml x.xml.xml are valid, but not a/x.xml
13+
if (boolval(preg_match('/^[^\/\\\\]+\.xml$/i', $filename))) {
1214
return true;
1315
}
1416
return false;

tests/Unit/PackageReader/CfdiPackageReaderTest.php

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,18 @@
88
use PhpCfdi\SatWsDescargaMasiva\Tests\TestCase;
99
use RuntimeException;
1010

11+
/**
12+
* This tests uses the Zip file located at tests/_files/zip/cfdi.zip that contains:
13+
*
14+
* __MACOSX/ // commonly generated by MacOS when open the file
15+
* __MACOSX/.aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee.xml // commonly generated by MacOS when open the file
16+
* aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee.xml // valid cfdi with common name
17+
* aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee.xml.xml // valid cfdi with double extension (oh my SAT!)
18+
* 00000000-0000-0000-0000-000000000000.xml // file with correct name but not a cfdi
19+
* empty-file // zero bytes file
20+
* other.txt // file with incorrect extension and incorrect content
21+
*
22+
*/
1123
class CfdiPackageReaderTest extends TestCase
1224
{
1325
public function testReaderZipWhenTheContentIsInvalid(): void
@@ -32,14 +44,33 @@ public function testReaderZipWhenTheContentValid(): void
3244

3345
public function testReaderZipWithOtherFiles(): void
3446
{
35-
$expectedNumberCfdis = 1;
47+
$expectedNumberCfdis = 2;
3648

3749
$filename = $this->filePath('zip/cfdi.zip');
3850
$cfdiPackageReader = new CfdiPackageReader($filename);
3951

4052
$this->assertCount($expectedNumberCfdis, $cfdiPackageReader);
4153
}
4254

55+
public function testReaderZipWithOtherFilesAndDoubleXmlExtension(): void
56+
{
57+
// there are 2 valid files:
58+
// "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee.xml" and
59+
// "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee.xml.xml"
60+
$expectedFilenames = [
61+
'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee.xml',
62+
'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee.xml.xml',
63+
];
64+
sort($expectedFilenames);
65+
66+
$filename = $this->filePath('zip/cfdi.zip');
67+
$cfdiPackageReader = new CfdiPackageReader($filename);
68+
69+
$filenames = array_keys(iterator_to_array($cfdiPackageReader->fileContents()));
70+
sort($filenames);
71+
$this->assertEquals($expectedFilenames, $filenames);
72+
}
73+
4374
public function testReaderCfdiInZip(): void
4475
{
4576
$expectedCfdi = $this->fileContents('zip/cfdi.xml');

tests/_files/zip/cfdi.zip

1.26 KB
Binary file not shown.

0 commit comments

Comments
 (0)