tenant = Tenant::factory()->create(); $this->user = User::factory()->create(['tenant_id' => $this->tenant->id]); $this->actingAs($this->user); }); /** @return array валидный payload создания кампании по списку. */ function lenStorePayload(array $overrides = []): array { return array_merge([ 'ad_text' => 'Приходите к нам в канал', 'ad_link' => 'https://t.me/example_channel', 'audience_kind' => 'list', 'budget_cap_rub' => '1000.00', 'phones' => ['79990000001', '79990000002'], ], $overrides); } it('имя отправителя длиннее 64 символов — ошибка поля name, не 500', function () { $this->postJson('/api/telegram/sender', ['name' => str_repeat('и', 65)]) ->assertStatus(422) ->assertJsonValidationErrors('name'); }); it('имя отправителя ровно 64 символа — не ложное срабатывание валидатора', function () { // На 64 валидатор пропускает; дальше сервис (в песочнице деньги не трогает). $this->postJson('/api/telegram/sender', ['name' => str_repeat('и', 64)]) ->assertStatus(201); }); it('ad_link длиннее 500 символов — ошибка поля ad_link, не 500', function () { Queue::fake(); $this->postJson('/api/telegram/campaigns', lenStorePayload([ 'ad_link' => 'https://t.me/'.str_repeat('a', 500), // валидный url длиной 513 ]))->assertStatus(422)->assertJsonValidationErrors('ad_link'); }); it('ord_category длиннее 200 символов — ошибка поля ord_category, не 500', function () { Queue::fake(); $this->postJson('/api/telegram/campaigns', lenStorePayload([ 'ord_category' => str_repeat('к', 201), ]))->assertStatus(422)->assertJsonValidationErrors('ord_category'); });