<?php

use App\Container;
use App\Event;
use App\Item;

class ContainerTest extends TestCase
{
    /**
     * A basic test example.
     *
     * @return void
     */

    public function testEmpty()
    {
        $this->get('/1/boxes');
        $this->assertResponseOk();
        $this->assertEquals('[]',$this->response->getContent());
    }

    public function testMembers()
    {
        Container::create(['name'=>'BOX']);

        $this->get('/1/boxes');
        $response = $this->response->getOriginalContent();

        $this->assertResponseOk();
        $this->assertEquals(1, count($response));
        $this->assertEquals(1, $response[0]['cid']);
        $this->assertEquals('BOX', $response[0]['name']);
        $this->assertEquals(0, $response[0]['itemCount']);
    }

    public function testmultiMembers()
    {
        Container::create(['name'=>'BOX 1']);
        Container::create(['name'=>'BOX 2']);
        Container::create(['name'=>'BOX 3']);

        $this->get('/1/boxes');
        $response = $this->response->getOriginalContent();

        $this->assertResponseOk();
        $this->assertEquals(3, count($response));
    }

    public function testItemCount()
    {
        $event = Event::create(['slug'=>'EVENT','name'=>'Event']);
        $box = Container::create(['name'=>'BOX']);
        Item::create(['cid'=>$box->cid, 'eid' => $event->eid, 'item_uid'=>1, 'wann'=>'', 'wo'=>'','description'=>'1']);
        Item::create(['cid'=>$box->cid, 'eid' => $event->eid, 'item_uid'=>2, 'wann'=>'', 'wo'=>'','description'=>'2']);

        $this->get('/1/boxes');
        $response = $this->response->getOriginalContent();

        $this->assertResponseOk();
        $this->assertEquals(1, count($response));
        $this->assertEquals(2, $response[0]['itemCount']);
    }

    public function testCreateContainer(){
        $this->post('/1/box', ['name'=>'BOX']);
        $response = $this->response->getOriginalContent();

        $this->assertResponseStatus(201);
        $this->assertEquals(1, $response['cid']);
        $this->assertEquals('BOX', $response['name']);
        $this->assertEquals(0, $response['itemCount']);

        $boxes = Container::all();

        $this->assertEquals(1, count($boxes));
        $this->assertEquals(1, $boxes[0]['cid']);
        $this->assertEquals('BOX', $boxes[0]['name']);
        $this->assertEquals(0, $boxes[0]['itemCount']);
    }

    public function testUpdateContainer(){
        $box = Container::create(['name'=>'BOX 1']);

        $this->assertEquals(1, $box['cid']);
        $this->assertEquals('BOX 1', $box['name']);
        $this->assertEquals(0, $box['itemCount']);

        $this->put('/1/box/'.$box->cid, ['name'=>'BOX 2']);
        $response = $this->response->getOriginalContent();

        $this->assertResponseOk();
        $this->assertEquals(1, $response['cid']);
        $this->assertEquals('BOX 2', $response['name']);
        $this->assertEquals(0, $response['itemCount']);

        $boxes = Container::all();

        $this->assertEquals(1, count($boxes));
        $this->assertEquals(1, $boxes[0]['cid']);
        $this->assertEquals('BOX 2', $boxes[0]['name']);
        $this->assertEquals(0, $boxes[0]['itemCount']);
    }

    public function testDeleteContainer(){
        $box = Container::create(['name'=>'BOX 1']);
        Container::create(['name'=>'BOX 2']);

        $this->assertEquals(2, count(Container::all()));

        $this->delete('/1/box/'.$box->cid);

        $this->assertResponseOk();
        $this->assertEquals(1, count(Container::all()));
    }

}