Skip to content
Snippets Groups Projects
ExampleTest.php 2.79 KiB
Newer Older
Bilal Talhaoui's avatar
Bilal Talhaoui committed
<?php

namespace Tests\Unit;

Tibo's avatar
Tibo committed
use App\User;
use App\Organization;
Tibo's avatar
Tibo committed
use App\Server;
Thibault Debatty's avatar
Thibault Debatty committed
use App\Record;
Tibo's avatar
Tibo committed
use App\Status;

Bilal Talhaoui's avatar
Bilal Talhaoui committed
use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;

class ExampleTest extends TestCase
{
Tibo's avatar
Tibo committed

    use RefreshDatabase;

Tibo's avatar
Tibo committed
    public function testClassInstance()
    {
        $class = Server::class;
        $server = new $class;
        $this->assertEquals("App\Server", get_class($server));
    }

Tibo's avatar
Tibo committed
    public function testRelations()
    {
Tibo's avatar
Tibo committed
        $user = new User();
        $user->name = "test";
        $user->email = "test@example.com";
        $user->password = "abc123";
        $user->save();

        $organization = new Organization();
        $organization->name = "Org";
        $organization->save();

        $organization->users()->save($user);

Tibo's avatar
Tibo committed
        $this->assertEquals(
            "Org",
            $user->organizations()->first()->name
        );
Tibo's avatar
Tibo committed
    }
Tibo's avatar
Tibo committed
    
    /**
     * @group status
     */
    public function testStatusComparison()
    {
        $warning = Status::warning();
        $error = Status::error();
        
        $this->assertGreaterThan($warning, $error);
        $this->assertTrue($error > $warning);
        
        $this->assertEquals(Status::error(), max($warning, $error));
    }
Tibo's avatar
Tibo committed

Tibo's avatar
Tibo committed
    /**
     * @group status-change
     */
Tibo's avatar
Tibo committed
    public function testStatusChangeDetection()
    {
Tibo's avatar
Tibo committed
        $organization = new Organization();
        $organization->name = "ACME";
        $organization->save();

Tibo's avatar
Tibo committed
        $server = new \App\Server();
Tibo's avatar
Tibo committed
        $server->name = "My test server";
        $server->organization()->associate($organization);
        $server->save();

        $server_id = $server->id;
Thibault Debatty's avatar
Thibault Debatty committed
        
        $record = new Record();
        $record->server_id = $server_id;
        $record->time = time();
Thibault Debatty's avatar
Thibault Debatty committed
        $record->save();
        
        $record_id = $record->id;
Tibo's avatar
Tibo committed

        $user = new User();
        $user->name = "Test";
        $user->email = "thibault.debatty@gmail.com";
        $user->password = "qmlskdj";
        $user->save();
        $organization->users()->attach($user->id);
Tibo's avatar
Tibo committed

        // Insert a fake status change
        $change = new \App\StatusChange();
Thibault Debatty's avatar
Thibault Debatty committed
        $change->status = \App\Status::ERROR;
Thibault Debatty's avatar
Thibault Debatty committed
        $change->time = time();
Tibo's avatar
Tibo committed
        $change->server_id = $server_id;
Tibo's avatar
Tibo committed

Thibault Debatty's avatar
Thibault Debatty committed
        // Check if a new StatusChange was correctly saved
        $last_change = $server->lastChange();
Tibo's avatar
Tibo committed
        $this->assertEquals(
Thibault Debatty's avatar
Thibault Debatty committed
            $change->status,
Tibo's avatar
Tibo committed
            $last_change->status
        );

        // Insert multiple status changes to simulate bouncing
        for ($i = 0; $i < 4; $i++) {
            $change = new \App\StatusChange();
            $change->status = 155;
            $change->server_id = $server_id;
Thibault Debatty's avatar
Thibault Debatty committed
            $change->time = time() + $i;
            $change->save();
        }
Tibo's avatar
Tibo committed
    }