diff --git a/.gitignore b/.gitignore index a7f372d..e26945a 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ phpstan.neon testbench.yaml vendor node_modules +.DS_Store diff --git a/composer.json b/composer.json index ecd0bd7..d7e2bdc 100644 --- a/composer.json +++ b/composer.json @@ -18,7 +18,7 @@ "require": { "php": "^8.2", "illuminate/contracts": "^10.0", - "spatie/laravel-data": "^3.5", + "spatie/laravel-data": "^4", "spatie/laravel-package-tools": "^1.14.0" }, "require-dev": { diff --git a/database/factories/IxItemFactory.php b/database/factories/IxItemFactory.php index 4e5c56e..a1d7163 100644 --- a/database/factories/IxItemFactory.php +++ b/database/factories/IxItemFactory.php @@ -17,7 +17,7 @@ public function definition() return [ 'name' => fake()->name, 'description' => fake()->text, - 'unitPrice' => fake()->randomFloat(2), + 'unit_price' => fake()->randomFloat(2), 'unit' => 'unit', 'tax' => IxTaxFactory::new()->make()->toArray(), ]; diff --git a/src/API/Data/ClientData.php b/src/API/Data/ClientData.php index 1f5973a..7c52848 100644 --- a/src/API/Data/ClientData.php +++ b/src/API/Data/ClientData.php @@ -19,7 +19,7 @@ class ClientData extends EntityData 'unitPrice', 'unit', 'quantity', - 'tax.name', + // 'tax.name', ]; public function __construct( @@ -44,8 +44,7 @@ public function __construct( #[WithCast(EnumCast::class)] public null|Optional|TaxExemptionCodeEnum $taxExemptionCode, public null|Optional|string $openAccountLink, - ) { - } + ) {} public static function getUseProperties(): array { diff --git a/src/API/Data/Transformers/BoolToIntTransformer.php b/src/API/Data/Transformers/BoolToIntTransformer.php index b1e61cf..4aebe0d 100644 --- a/src/API/Data/Transformers/BoolToIntTransformer.php +++ b/src/API/Data/Transformers/BoolToIntTransformer.php @@ -3,11 +3,12 @@ namespace Squarebit\InvoiceXpress\API\Data\Transformers; use Spatie\LaravelData\Support\DataProperty; +use Spatie\LaravelData\Support\Transformation\TransformationContext; use Spatie\LaravelData\Transformers\Transformer; class BoolToIntTransformer implements Transformer { - public function transform(DataProperty $property, mixed $value): int + public function transform(DataProperty $property, mixed $value, TransformationContext $context): int { return (int) $value; } diff --git a/src/API/Data/Transformers/BoolToNumericStringTransformer.php b/src/API/Data/Transformers/BoolToNumericStringTransformer.php index 84bf487..d3258ac 100644 --- a/src/API/Data/Transformers/BoolToNumericStringTransformer.php +++ b/src/API/Data/Transformers/BoolToNumericStringTransformer.php @@ -3,11 +3,12 @@ namespace Squarebit\InvoiceXpress\API\Data\Transformers; use Spatie\LaravelData\Support\DataProperty; +use Spatie\LaravelData\Support\Transformation\TransformationContext; use Spatie\LaravelData\Transformers\Transformer; class BoolToNumericStringTransformer implements Transformer { - public function transform(DataProperty $property, mixed $value): string + public function transform(DataProperty $property, mixed $value, TransformationContext $context): string { return $value; } diff --git a/src/API/Data/Transformers/BoolToStringTransformer.php b/src/API/Data/Transformers/BoolToStringTransformer.php index 9e73ca4..990b3e5 100644 --- a/src/API/Data/Transformers/BoolToStringTransformer.php +++ b/src/API/Data/Transformers/BoolToStringTransformer.php @@ -3,11 +3,12 @@ namespace Squarebit\InvoiceXpress\API\Data\Transformers; use Spatie\LaravelData\Support\DataProperty; +use Spatie\LaravelData\Support\Transformation\TransformationContext; use Spatie\LaravelData\Transformers\Transformer; class BoolToStringTransformer implements Transformer { - public function transform(DataProperty $property, mixed $value): string + public function transform(DataProperty $property, mixed $value, TransformationContext $context): string { return $value ? 'true' : 'false'; } diff --git a/src/API/Data/Transformers/EnumArrayTransformer.php b/src/API/Data/Transformers/EnumArrayTransformer.php index 0d98903..1e9b3c5 100644 --- a/src/API/Data/Transformers/EnumArrayTransformer.php +++ b/src/API/Data/Transformers/EnumArrayTransformer.php @@ -3,11 +3,12 @@ namespace Squarebit\InvoiceXpress\API\Data\Transformers; use Spatie\LaravelData\Support\DataProperty; +use Spatie\LaravelData\Support\Transformation\TransformationContext; use Spatie\LaravelData\Transformers\Transformer; class EnumArrayTransformer implements Transformer { - public function transform(DataProperty $property, mixed $value): array + public function transform(DataProperty $property, mixed $value, TransformationContext $context): array { return array_map(fn ($case) => $case->value, $value); } diff --git a/src/API/Data/Transformers/FloatToStringTransformer.php b/src/API/Data/Transformers/FloatToStringTransformer.php index c32d8f0..6ae7826 100644 --- a/src/API/Data/Transformers/FloatToStringTransformer.php +++ b/src/API/Data/Transformers/FloatToStringTransformer.php @@ -3,11 +3,12 @@ namespace Squarebit\InvoiceXpress\API\Data\Transformers; use Spatie\LaravelData\Support\DataProperty; +use Spatie\LaravelData\Support\Transformation\TransformationContext; use Spatie\LaravelData\Transformers\Transformer; class FloatToStringTransformer implements Transformer { - public function transform(DataProperty $property, mixed $value): string + public function transform(DataProperty $property, mixed $value, TransformationContext $context): mixed { return number_format($value, 2, '.', ''); } diff --git a/tests/API_REAL/ClientTest.php b/tests/API_REAL/ClientTest.php index f8c3fd5..edd67eb 100644 --- a/tests/API_REAL/ClientTest.php +++ b/tests/API_REAL/ClientTest.php @@ -32,7 +32,7 @@ ->toThrow(RequestException::class); // list invoices - expect(fn () => InvoiceXpress::clients()->listInvoices()) + expect(fn () => InvoiceXpress::clients()->listInvoices($client->id)) ->not()->toThrow(RequestException::class); // list diff --git a/tests/API_REAL/EstimateTest.php b/tests/API_REAL/EstimateTest.php index e34dddc..3883985 100644 --- a/tests/API_REAL/EstimateTest.php +++ b/tests/API_REAL/EstimateTest.php @@ -53,7 +53,7 @@ [ 'date' => now()->format(\Squarebit\InvoiceXpress\InvoiceXpress::DATE_FORMAT), 'due_date' => now()->addDays(random_int(10, 30))->format(\Squarebit\InvoiceXpress\InvoiceXpress::DATE_FORMAT), - 'reference' => fake()->colorName, + 'reference' => fake()->colorName(), 'observations' => fake()->text(128), 'client' => [ 'name' => 'Some Client Name', diff --git a/tests/API_REAL/GuideTest.php b/tests/API_REAL/GuideTest.php index 8bda5ff..3f555d1 100644 --- a/tests/API_REAL/GuideTest.php +++ b/tests/API_REAL/GuideTest.php @@ -51,7 +51,7 @@ 'date' => now()->addDay()->format(\Squarebit\InvoiceXpress\InvoiceXpress::DATE_FORMAT), 'due_date' => now()->addDays(random_int(10, 30))->format(\Squarebit\InvoiceXpress\InvoiceXpress::DATE_FORMAT), - 'reference' => fake()->colorName, + 'reference' => fake()->colorName(), 'observations' => fake()->text(128), 'address_from' => [ 'detail' => 'Rua 5', diff --git a/tests/API_REAL/ItemTest.php b/tests/API_REAL/ItemTest.php index 9bc5233..51836cc 100644 --- a/tests/API_REAL/ItemTest.php +++ b/tests/API_REAL/ItemTest.php @@ -39,7 +39,7 @@ })->with([ [ [ - 'name' => fake()->colorName, + 'name' => fake()->colorName(), 'description' => fake()->text(128), 'unit_price' => fake()->randomFloat(2, 0, 100), 'unit' => collect(ItemUnitEnum::values())->random(), diff --git a/tests/API_REAL/SequenceTest.php b/tests/API_REAL/SequenceTest.php index 4c4e8b8..3b4c820 100644 --- a/tests/API_REAL/SequenceTest.php +++ b/tests/API_REAL/SequenceTest.php @@ -24,5 +24,5 @@ ->not()->toThrow(RequestException::class); })->with([ - fake()->colorName, + fake()->colorName(), ])->skip(! TEST_REAL_API); diff --git a/tests/TestCase.php b/tests/TestCase.php index 252725c..4c4bc80 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -20,7 +20,7 @@ protected function setUp(): void fn (string $modelName) => 'Squarebit\\InvoiceXpress\\Database\\Factories\\'.class_basename($modelName).'Factory' ); - Http::preventStrayRequests()->fake([]); + TEST_REAL_API === false && Http::preventStrayRequests()->fake([]); } protected function getPackageProviders($app) diff --git a/tests/Unit/HasClientTest.php b/tests/Unit/HasClientTest.php index c5a48be..f17726d 100644 --- a/tests/Unit/HasClientTest.php +++ b/tests/Unit/HasClientTest.php @@ -6,16 +6,34 @@ it('can set a client', function () { - $invoice = new IxSimplifiedInvoice(); + $invoice = new IxSimplifiedInvoice; $client = IxClientFactory::new()->make(); expect($invoice->setClient($client)) ->client->toBeInstanceOf(ClientData::class); }); +it('can set a client from ClientData', function () { + + $invoice = new IxSimplifiedInvoice; + $client = IxClientFactory::new()->make()->getData(); + + expect($invoice->setClient($client)) + ->client->toBeInstanceOf(ClientData::class); +}); + +it('can set a client from array', function () { + + $invoice = new IxSimplifiedInvoice; + $client = IxClientFactory::new()->make()->toArray(); + + expect($invoice->setClient($client)) + ->client->toBeInstanceOf(ClientData::class); +}); + it('can get a client', function () { - $invoice = new IxSimplifiedInvoice(); + $invoice = new IxSimplifiedInvoice; $client = IxClientFactory::new()->make(); $invoice->client = $client->getData(); diff --git a/tests/Unit/HasItemsTest.php b/tests/Unit/HasItemsTest.php index 9dcd339..b9ce487 100644 --- a/tests/Unit/HasItemsTest.php +++ b/tests/Unit/HasItemsTest.php @@ -5,7 +5,7 @@ it('can add an Item', function () { - $invoice = new IxSimplifiedInvoice(); + $invoice = new IxSimplifiedInvoice; $item = IxItemFactory::new()->make(); $invoice->addItem($item); @@ -14,9 +14,20 @@ ->items->toHaveCount(1); }); +it('can add an Item from array', function () { + + $invoice = new IxSimplifiedInvoice; + $item = IxItemFactory::new()->make()->toArray(); + + $invoice->addItem($item); + + expect($invoice) + ->items->toHaveCount(1); +}); + it('can add Items', function () { - $invoice = new IxSimplifiedInvoice(); + $invoice = new IxSimplifiedInvoice; $item = IxItemFactory::new()->make(); $invoice->addItems([$item, $item, $item]);