diff --git a/config/data.php b/config/data.php index fcd99e1b955c..e24dacc8db61 100644 --- a/config/data.php +++ b/config/data.php @@ -1,7 +1,9 @@ [ + 'cast_and_transform_iterables' => true, - /* + /** + * When trying to set a computed property value, the package will throw an exception. + * You can disable this behaviour by setting this option to true, which will then just + * ignore the value being passed into the computed property and recalculate it. + */ + 'ignore_exception_when_trying_to_set_computed_property_value' => false, + ], + + /** * Global transformers will take complex types and transform them into simple * types. */ 'transformers' => [ DateTimeInterface::class => \Spatie\LaravelData\Transformers\DateTimeInterfaceTransformer::class, \Illuminate\Contracts\Support\Arrayable::class => \Spatie\LaravelData\Transformers\ArrayableTransformer::class, - BackedEnum::class => Spatie\LaravelData\Transformers\EnumTransformer::class + BackedEnum::class => Spatie\LaravelData\Transformers\EnumTransformer::class, ], - /* + /** * Global casts will cast values into complex types when creating a data * object from simple types. */ 'casts' => [ DateTimeInterface::class => Spatie\LaravelData\Casts\DateTimeInterfaceCast::class, BackedEnum::class => Spatie\LaravelData\Casts\EnumCast::class, + // Enumerable::class => Spatie\LaravelData\Casts\EnumerableCast::class, ], - /* + /** * Rule inferrers can be configured here. They will automatically add * validation rules to properties of a data object based upon * the type of the property. @@ -57,7 +75,7 @@ return [ Spatie\LaravelData\Normalizers\JsonNormalizer::class, ], - /* + /** * Data objects can be wrapped into a key like 'data' when used as a resource, * this key can be set globally here for all data objects. You can pass in * `null` if you want to disable wrapping. @@ -71,4 +89,94 @@ return [ * which will only enable the caster locally. */ 'var_dumper_caster_mode' => 'development', + + /** + * It is possible to skip the PHP reflection analysis of data objects + * when running in production. This will speed up the package. You + * can configure where data objects are stored and which cache + * store should be used. + * + * Structures are cached forever as they'll become stale when your + * application is deployed with changes. You can set a duration + * in seconds if you want the cache to clear after a certain + * timeframe. + */ + 'structure_caching' => [ + 'enabled' => true, + 'directories' => [app_path('Data')], + 'cache' => [ + 'store' => env('CACHE_STORE', env('CACHE_DRIVER', 'file')), + 'prefix' => 'laravel-data', + 'duration' => null, + ], + 'reflection_discovery' => [ + 'enabled' => true, + 'base_path' => base_path(), + 'root_namespace' => null, + ], + ], + + /** + * A data object can be validated when created using a factory or when calling the from + * method. By default, only when a request is passed the data is being validated. This + * behaviour can be changed to always validate or to completely disable validation. + */ + 'validation_strategy' => \Spatie\LaravelData\Support\Creation\ValidationStrategy::OnlyRequests->value, + + /** + * When using an invalid include, exclude, only or except partial, the package will + * throw an exception. You can disable this behaviour by setting this option to true. + */ + 'ignore_invalid_partials' => false, + + /** + * When transforming a nested chain of data objects, the package can end up in an infinite + * loop when including a recursive relationship. The max transformation depth can be + * set as a safety measure to prevent this from happening. When set to null, the + * package will not enforce a maximum depth. + */ + 'max_transformation_depth' => null, + + /** + * When the maximum transformation depth is reached, the package will throw an exception. + * You can disable this behaviour by setting this option to true which will return an + * empty array. + */ + 'throw_when_max_transformation_depth_reached' => true, + + /** + * When using the `make:data` command, the package will use these settings to generate + * the data classes. You can override these settings by passing options to the command. + */ + 'commands' => [ + /** + * Provides default configuration for the `make:data` command. These settings can be overridden with options + * passed directly to the `make:data` command for generating single Data classes, or if not set they will + * automatically fall back to these defaults. See `php artisan make:data --help` for more information + */ + 'make' => [ + /** + * The default namespace for generated Data classes. This exists under the application's root namespace, + * so the default 'Data` will end up as '\App\Data', and generated Data classes will be placed in the + * app/Data/ folder. Data classes can live anywhere, but this is where `make:data` will put them. + */ + 'namespace' => 'Data', + + /** + * This suffix will be appended to all data classes generated by make:data, so that they are less likely + * to conflict with other related classes, controllers or models with a similar name without resorting + * to adding an alias for the Data object. Set to a blank string (not null) to disable. + */ + 'suffix' => 'Data', + ], + ], + + /** + * When using Livewire, the package allows you to enable or disable the synths + * these synths will automatically handle the data objects and their + * properties when used in a Livewire component. + */ + 'livewire' => [ + 'enable_synths' => false, + ], ]; diff --git a/tests/Integration/Einvoice/FatturaPATest.php b/tests/Integration/Einvoice/FatturaPATest.php index 09cbce53bf65..0aafd34ed271 100644 --- a/tests/Integration/Einvoice/FatturaPATest.php +++ b/tests/Integration/Einvoice/FatturaPATest.php @@ -315,6 +315,51 @@ class FatturaPATest extends TestCase // } + public function testBulkValidationX() + { + +$files = [ + 'tests/Integration/Einvoice/samples/fatturapa0.xml', +]; + +foreach($files as $f) { + + $xmlstring = file_get_contents($f); + + $xml = simplexml_load_string($xmlstring, "SimpleXMLElement", LIBXML_NOCDATA); + $json = json_encode($xml); + $payload = json_decode($json, true); + + nlog($payload); + + $validation_array = false; + + nlog($f); + + $rules = FatturaElettronica::getValidationRules($this->payload); + nlog($rules); + + $this->assertIsArray($rules); + + $payload = FatturaElettronica::from($payload)->toArray(); + // nlog($payload); + + $this->assertIsArray($payload); + + $validation_array = FatturaElettronica::validate($payload); + + $this->assertIsArray($validation_array); + + // } catch(\Illuminate\Validation\ValidationException $e) { + + // nlog($e->errors()); + // } + + $this->assertIsArray($validation_array); + +} + + } public function testBulkValidation() { @@ -345,7 +390,7 @@ class FatturaPATest extends TestCase nlog($f); $rules = FatturaElettronica::getValidationRules($this->payload); - // nlog($rules); + nlog($rules); $this->assertIsArray($rules); diff --git a/tests/Integration/Einvoice/samples/fatturapa0.xml b/tests/Integration/Einvoice/samples/fatturapa0.xml index 23026d166193..5bf40dc4340c 100644 --- a/tests/Integration/Einvoice/samples/fatturapa0.xml +++ b/tests/Integration/Einvoice/samples/fatturapa0.xml @@ -105,12 +105,6 @@ 5.95 I - - 22.00 - 27.00 - 5.95 - I - TP01