<?php

use \Mockery as m;

class ActivitiesTest extends PHPUnit_Framework_TestCase
{
    function testCreate()
    {
        $http = m::mock(new Services_Twilio_TinyHttp);
        $http->shouldReceive('post')->once()
            ->with('/v1/Workspaces/WS123/Activities',
                array('Content-Type' => 'application/x-www-form-urlencoded'),
                'FriendlyName=Test+Activity&Available=1')
            ->andReturn(array(200, array('Content-Type' => 'application/json'),
                json_encode(array('sid' => 'WA123'))
            ));
        $taskrouterClient = new TaskRouter_Services_Twilio('AC123', '123', 'WS123', 'v1', $http);
        $activity = $taskrouterClient->workspace->activities->create('Test Activity', true);
        $this->assertNotNull($activity);
    }

    function testGet()
    {
        $http = m::mock(new Services_Twilio_TinyHttp);
        $http->shouldReceive('get')->once()
            ->with('/v1/Workspaces/WS123/Activities/WA123')
            ->andReturn(array(200, array('Content-Type' => 'application/json'),
                json_encode(array('sid' => 'WA123', 'friendly_name' => 'Test Activity'))
            ));
        $taskrouterClient = new TaskRouter_Services_Twilio('AC123', '123', 'WS123', 'v1', $http);
        $activity = $taskrouterClient->workspace->activities->get('WA123');
        $this->assertNotNull($activity);
        $this->assertEquals('Test Activity', $activity->friendly_name);
    }

	function testGetPage() {
		$http = m::mock(new Services_Twilio_TinyHttp);
		$http->shouldReceive('get')->once()
			->with('/v1/Workspaces/WS123/Activities?Page=0&PageSize=50')
			->andReturn(array(200, array('Content-Type' => 'application/json'),
							json_encode(array(
								'meta' => array('key' => 'activities', 'next_page_url' => null),
								'activities' => array(array('sid' => 'WA123', 'friendly_name' => 'Test Activity'))
			))));
		$taskrouterClient = new TaskRouter_Services_Twilio('AC123', '123', 'WS123', 'v1', $http);
		$activities = $taskrouterClient->workspace->activities->getPage();
		$activityItems = $activities->getItems();
		$this->assertNotNull($activities);
		$this->assertEquals('Test Activity', $activityItems[0]->friendly_name);
	}

    function tearDown()
    {
        m::close();
    }
}