dbudwin/RoboHome-Web

View on GitHub
tests/Unit/Model/UserTest.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace Tests\Unit\Model;

use App\Device;
use App\User;

class UserTest extends TestCaseWithRealDatabase
{
    public function testDevices_GivenNoDevicesExist_ReturnsZeroDevices(): void
    {
        $user = $this->createUser();

        $devices = $user->devices();

        $this->assertEquals(0, $devices->count());
    }

    public function testDevices_GivenUserHasSeveralDevices_ReturnsAllDevices(): void
    {
        $user = $this->createUser();
        $numberOfDevices = self::$faker->randomDigit();

        $this->createSeveralDevicesForUser($user, $numberOfDevices);

        $devices = $user->devices();

        $this->assertEquals($numberOfDevices, $devices->count());
    }

    public function testOwnsDevice_GivenFirstUserDoesNotOwnAnyDevices_ReturnsFalse(): void
    {
        $firstUser = $this->createUser();
        $secondUser = $this->createUser();

        $deviceIdForSecondUser = $this->createSingleDeviceForUser($secondUser)->id;

        $userOwnsDevice = $firstUser->ownsDevice($deviceIdForSecondUser);

        $this->assertFalse($userOwnsDevice);
    }

    public function testOwnsDevice_GivenUserOwnsDevice_ReturnsTrue(): void
    {
        $user = $this->createUser();
        $device = $this->createSingleDeviceForUser($user);

        $userOwnsDevice = $user->ownsDevice($device->id);

        $this->assertTrue($userOwnsDevice);
    }

    private function createUser(): User
    {
        return factory(User::class)->create();
    }

    private function createSingleDeviceForUser(User $user): Device
    {
        return factory(Device::class)->create([
            'user_id' => $user->id
        ]);
    }

    private function createSeveralDevicesForUser(User $user, int $numberOfDevicesForUser): void
    {
        factory(Device::class, $numberOfDevicesForUser)->create([
            'user_id' => $user->id
        ]);
    }
}