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