---
title: "Testovanie — Connections for Laravel | Roundly"
description: "Zaznamenajte každý zápis cez Connections::fake() — fasáda, injektovaný manažér aj trait — overte každú operáciu a pripravte riadky cez factory."
url: https://roundly-consulting.com/sk/open-source/navody/connections-for-laravel/testovanie
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Connections for Laravel](https://roundly-consulting.com/sk/open-source/navody/connections-for-laravel.md)

# Testovanie

Connections::fake() nahradí manažéra zaznamenávajúcim fake — vo fasáde aj v kontajneri, takže sa zaznamenajú aj injektované inštancie ConnectionManager, prístup permissions() a každý zápis cez trait HasConnections. Operácie naďalej zapisujú do testovacej databázy (čítanie teda funguje) a zaznamenajú sa až po úspechu — sloveso, ktoré vyhodí výnimku, nezaznamená nič — podobne ako pri Bus::fake():

```php
use RoundlyConsulting\Connections\Facades\Connections;

it('invites a member to a team', function () {
    $user = User::factory()->create();
    $team = Team::factory()->create();
    $otherTeam = Team::factory()->create();

    $fake = Connections::fake();

    Connections::between($user, $team)->withPermissions('view')->invite();
    $team->acceptConnectionFrom($user);                            // trait call — recorded too
    Connections::between($user, $team)->permissions()->grant('publish');

    $fake->assertInvited($user, $team);
    $fake->assertAccepted($user, $team);
    $fake->assertConnected($user, $team);                          // connect() or invite() recorded
    $fake->assertConnectedTimes(1);
    $fake->assertGranted($user, $team, 'publish');
    $fake->assertHasPermissionThrough($user, $team, 'view');
    $fake->assertNotConnected($user, $otherTeam);
    $fake->assertNothingDisconnected();

    // Pass-through: the rows were really written.
    expect($user->hasPermissionThroughConnection($team, 'publish'))->toBeTrue();
});
```

## Všetky asercie

Každý zápis má pozitívnu aserciu a náprotivok assertNothing\*:

| Operácia | Asercia | Negatívna asercia |
| --- | --- | --- |
| `connect() / connectTo() / connectAll() (per target)` | `assertConnected($a, $b) · assertConnectedTimes($n)` | `assertNotConnected($a, $b) · assertNothingConnected()` |
| `invite() / inviteConnection()` | `assertInvited($a, $b)` | `assertNothingInvited()` |
| `accept() / acceptConnectionFrom()` | `assertAccepted($a, $b)` | `assertNothingAccepted()` |
| `block() / blockConnectionFrom()` | `assertBlocked($a, $b)` | `assertNothingBlocked()` |
| `disconnect() / disconnectFrom() / disconnectAll()` | `assertDisconnected($a, $b)` | `assertNothingDisconnected()` |
| `reconnect() / restore() / reconnectTo()` | `assertReconnected($a, $b)` | `assertNothingReconnected()` |
| `extend()` | `assertExtended($a, $b)` | `assertNothingExtended()` |
| `permissions()->grant() / grantAll() / grantThroughConnection()` | `assertGranted($a, $b, ?$permission)` | `assertNothingGranted()` |
| `permissions()->revoke() / revokeAll() / revokeThroughConnection()` | `assertRevoked($a, $b, ?$permission)` | `assertNothingRevoked()` |
| `permissions()->sync() / clear() / syncConnectionPermissions()` | `assertPermissionsSynced($a, $b, ?$set) · assertPermissionsCleared($a, $b)` | `assertNothingPermissionsSynced()` |
| `from()->sync() / syncConnections()` | `assertSynced($connector, ?$set)` | `assertNothingSynced()` |
| `prune() / connections:prune` | `assertPruned()` | `assertNothingPruned()` |
| čokoľvek | `assertHasPermissionThrough($a, $b, $permission)` | `assertNothingRecorded()` |

connect() alebo connectAll(), po ktorom zostane čakajúca pozvánka, sa zaznamená ako invite, rovnako ako invite() — ak bolo pripravené asPending() alebo nebolo pripravené nič a nová dvojica dostala default\_status pending. Connect, ktorý len aktualizuje existujúci riadok, sa zaznamená ako connect.

toggle() sa zaznamená ako connect() alebo disconnect(), ktoré vykoná. Akcie, ktoré získate a zavoláte priamo, obchádzajú manažéra — prebehnú normálne, ale nezaznamenajú sa. $fake->recorded() vráti surový zoznam objektov RecordedOperation:

```php
$fake = Connections::fake();

Connections::from($user)->sync([$teamA, $teamB]);
Connections::between($user, $teamA)->extend(now()->addYear());
Connections::between($user, $teamA)->permissions()->sync('view', 'edit');
Connections::prune();

$fake->assertSynced($user, [$teamA, $teamB]);                        // the exact desired set
$fake->assertExtended($user, $teamA);
$fake->assertPermissionsSynced($user, $teamA, ['view', 'edit']);
$fake->assertPruned();
$fake->assertNothingRevoked();

$fake->recorded();   // list<RecordedOperation> — the raw log
```

## Factory

Model Connection má factory so stavmi pending(), blocked() a expired() — expired() nastaví expires\_at na včerajšok. Doplňte morph kľúče skutočných modelov:

```php
use RoundlyConsulting\Connections\Models\Connection;

$pair = [
    'connector_type' => $user->getMorphClass(),
    'connector_id' => $user->getKey(),
    'connectable_type' => $team->getMorphClass(),
    'connectable_id' => $team->getKey(),
];

Connection::factory()->pending()->create([...$pair, 'permissions' => ['view']]);   // an open invitation

// Without a state: accepted, no permissions, no expiry.
// Other states: ->blocked() (grants nothing), ->expired() (expires_at a day ago).
```

## Asercie eventov

```php
use Illuminate\Support\Facades\Event;
use RoundlyConsulting\Connections\Events\ConnectionInvited;
use RoundlyConsulting\Connections\Facades\Connections;

it('dispatches an invitation event', function () {
    Event::fake([ConnectionInvited::class]);

    Connections::between($user, $team)->invite();

    Event::assertDispatched(ConnectionInvited::class);
});
```

Testy spúšťajte s publikovanou migráciou (napríklad cez RefreshDatabase). Ak test medzi dvoma kontrolami oprávnení upraví riadok prepojenia priamo, použite force: true alebo zavolajte Connections::flushCache() — cache v rámci requestu sleduje len zápisy cez balík.

## Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

[Ďalšie spôsoby podpory vrátane kryptomien](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/connections-for-laravel.md)
