Skip to content

Commit d49ef4e

Browse files
authored
Fix Pest generated tests (#726)
1 parent 6e9221b commit d49ef4e

15 files changed

+67
-2
lines changed

src/Generators/PestTestGenerator.php

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
use Blueprint\Blueprint;
66
use Blueprint\Concerns\HandlesImports;
7-
use Blueprint\Concerns\HandlesTraits;
87
use Blueprint\Contracts\Generator;
98
use Blueprint\Contracts\Model as BlueprintModel;
109
use Blueprint\Models\Column;
@@ -26,7 +25,7 @@
2625

2726
class PestTestGenerator extends AbstractClassGenerator implements Generator
2827
{
29-
use HandlesImports, HandlesTraits;
28+
use HandlesImports;
3029

3130
const TESTS_VIEW = 1;
3231

@@ -42,6 +41,8 @@ class PestTestGenerator extends AbstractClassGenerator implements Generator
4241

4342
protected array $types = ['controllers', 'tests'];
4443

44+
protected array $traits = [];
45+
4546
public function output(Tree $tree): array
4647
{
4748
$this->tree = $tree;
@@ -204,6 +205,9 @@ protected function buildTestCases(Controller $controller): string
204205
$class = $this->buildFormRequestName($controller, $name);
205206
$test_case = $this->buildFormRequestTestCase($controller->fullyQualifiedClassName(), $name, config('blueprint.namespace') . '\\Http\\Requests\\' . $class) . PHP_EOL . PHP_EOL . $test_case;
206207

208+
$this->addImport($controller, 'JMac\\Testing\\Traits\AdditionalAssertions');
209+
$this->addTrait($controller, 'AdditionalAssertions');
210+
207211
if ($statement->data()) {
208212
foreach ($statement->data() as $data) {
209213
[$qualifier, $column] = $this->splitField($data);
@@ -653,4 +657,23 @@ private function buildLines($lines): string
653657
{
654658
return str_pad(' ', 4) . implode(PHP_EOL . str_pad(' ', 4), $lines);
655659
}
660+
661+
protected function addTrait(BlueprintModel $model, $trait): void
662+
{
663+
$this->traits[$model->name()][] = $trait;
664+
}
665+
666+
protected function buildTraits(BlueprintModel $model): string
667+
{
668+
if (empty($this->traits[$model->name()])) {
669+
return '';
670+
}
671+
672+
$traits = collect($this->traits[$model->name()])
673+
->unique()
674+
->sort()
675+
->implode('::class)->use(');
676+
677+
return "pest()->use({$traits}::class);";
678+
}
656679
}

tests/fixtures/tests/pest/api-shorthand-validation.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,16 @@
55
use App\Models\Certificate;
66
use App\Models\CertificateType;
77
use Illuminate\Support\Carbon;
8+
use JMac\Testing\Traits\AdditionalAssertions;
89
use function Pest\Faker\fake;
910
use function Pest\Laravel\assertModelMissing;
1011
use function Pest\Laravel\delete;
1112
use function Pest\Laravel\get;
1213
use function Pest\Laravel\post;
1314
use function Pest\Laravel\put;
1415

16+
pest()->use(AdditionalAssertions::class);
17+
1518
test('index behaves as expected', function (): void {
1619
$certificates = Certificate::factory()->count(3)->create();
1720

tests/fixtures/tests/pest/call-to-a-member-function-columns-on-null-Api-PaymentControllerTest.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,13 @@
88
use App\Models\User;
99
use Illuminate\Support\Facades\Event;
1010
use Illuminate\Support\Facades\Mail;
11+
use JMac\Testing\Traits\AdditionalAssertions;
1112
use function Pest\Faker\fake;
1213
use function Pest\Laravel\get;
1314
use function Pest\Laravel\post;
1415

16+
pest()->use(AdditionalAssertions::class);
17+
1518
test('store uses form request validation')
1619
->assertActionUsesFormRequest(
1720
\App\Http\Controllers\Api\PaymentController::class,

tests/fixtures/tests/pest/call-to-a-member-function-columns-on-null-PaymentControllerTest.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,13 @@
88
use App\Models\User;
99
use Illuminate\Support\Facades\Event;
1010
use Illuminate\Support\Facades\Mail;
11+
use JMac\Testing\Traits\AdditionalAssertions;
1112
use function Pest\Faker\fake;
1213
use function Pest\Laravel\get;
1314
use function Pest\Laravel\post;
1415

16+
pest()->use(AdditionalAssertions::class);
17+
1518
test('create displays view', function (): void {
1619
$response = get(route('payments.create'));
1720

tests/fixtures/tests/pest/certificate-pascal-case-example.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,16 @@
55
use App\Models\Certificate;
66
use App\Models\CertificateType;
77
use Illuminate\Support\Carbon;
8+
use JMac\Testing\Traits\AdditionalAssertions;
89
use function Pest\Faker\fake;
910
use function Pest\Laravel\assertModelMissing;
1011
use function Pest\Laravel\delete;
1112
use function Pest\Laravel\get;
1213
use function Pest\Laravel\post;
1314
use function Pest\Laravel\put;
1415

16+
pest()->use(AdditionalAssertions::class);
17+
1518
test('index behaves as expected', function (): void {
1619
$certificates = Certificate::factory()->count(3)->create();
1720

tests/fixtures/tests/pest/certificate-type-pascal-case-example.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,16 @@
33
namespace Tests\Feature\Http\Controllers;
44

55
use App\Models\CertificateType;
6+
use JMac\Testing\Traits\AdditionalAssertions;
67
use function Pest\Faker\fake;
78
use function Pest\Laravel\assertModelMissing;
89
use function Pest\Laravel\delete;
910
use function Pest\Laravel\get;
1011
use function Pest\Laravel\post;
1112
use function Pest\Laravel\put;
1213

14+
pest()->use(AdditionalAssertions::class);
15+
1316
test('index behaves as expected', function (): void {
1417
$certificateTypes = CertificateType::factory()->count(3)->create();
1518

tests/fixtures/tests/pest/date-formats.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,16 @@
44

55
use App\Models\Date;
66
use Illuminate\Support\Carbon;
7+
use JMac\Testing\Traits\AdditionalAssertions;
78
use function Pest\Faker\fake;
89
use function Pest\Laravel\assertModelMissing;
910
use function Pest\Laravel\delete;
1011
use function Pest\Laravel\get;
1112
use function Pest\Laravel\post;
1213
use function Pest\Laravel\put;
1314

15+
pest()->use(AdditionalAssertions::class);
16+
1417
test('index displays view', function (): void {
1518
$dates = Date::factory()->count(3)->create();
1619

tests/fixtures/tests/pest/full-crud-example.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,16 @@
33
namespace Tests\Feature\Http\Controllers;
44

55
use App\Models\Post;
6+
use JMac\Testing\Traits\AdditionalAssertions;
67
use function Pest\Faker\fake;
78
use function Pest\Laravel\assertModelMissing;
89
use function Pest\Laravel\delete;
910
use function Pest\Laravel\get;
1011
use function Pest\Laravel\post;
1112
use function Pest\Laravel\put;
1213

14+
pest()->use(AdditionalAssertions::class);
15+
1316
test('index displays view', function (): void {
1417
$posts = Post::factory()->count(3)->create();
1518

tests/fixtures/tests/pest/models-with-custom-namespace.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,16 @@
33
namespace Tests\Feature\Http\Controllers;
44

55
use App\Models\Category;
6+
use JMac\Testing\Traits\AdditionalAssertions;
67
use function Pest\Faker\fake;
78
use function Pest\Laravel\assertSoftDeleted;
89
use function Pest\Laravel\delete;
910
use function Pest\Laravel\get;
1011
use function Pest\Laravel\post;
1112
use function Pest\Laravel\put;
1213

14+
pest()->use(AdditionalAssertions::class);
15+
1316
test('index behaves as expected', function (): void {
1417
$categories = Category::factory()->count(3)->create();
1518

tests/fixtures/tests/pest/readme-example-notification.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,13 @@
99
use Illuminate\Support\Facades\Event;
1010
use Illuminate\Support\Facades\Notification;
1111
use Illuminate\Support\Facades\Queue;
12+
use JMac\Testing\Traits\AdditionalAssertions;
1213
use function Pest\Faker\fake;
1314
use function Pest\Laravel\get;
1415
use function Pest\Laravel\post;
1516

17+
pest()->use(AdditionalAssertions::class);
18+
1619
test('index displays view', function (): void {
1720
$posts = Post::factory()->count(3)->create();
1821

0 commit comments

Comments
 (0)