<?php

/*
 * @copyright NetMonsters <team@netmonsters.ru>
 * @link http://netmonsters.ru
 * @package Majestic
 * @subpackage UnitTests
 * @since 2011-11-1
 * 
 * Unit tests for AjaxAction class
 */

require_once dirname(__FILE__) . '/Action_TestCase.php';
require_once dirname(__FILE__) . '/../../app/AjaxAction.php';

class AjaxActionTest extends Action_TestCase
{

    /**
     * @runInSeparateProcess
     */
    public function testConstruct()
    {
        if(!defined('DEBUG')) {
            define('DEBUG', false);
        }
        Env::setParams(array('ajax' => 'AjaxTemplate', 'param2' => 'value2'));
        $action = $this->getMockForAbstractClass('AjaxAction' );
        $this->assertAttributeEquals('ajax', 'template', $action);
    }

    /**
     * @runInSeparateProcess
     */
    public function testFetchWithEncode()
    {
        if(!defined('DEBUG')) {
            define('DEBUG', false);
        }
        $controller = FrontController::getInstance();
        $controller->setView('SomeView');
        $action = $this->getMockForAbstractClass('AjaxAction' );
        $action->data = array('var' => 'val');
        $result = $action->fetch();
        $this->assertEquals('/actions//ajax', $result['template']);
        $this->assertEquals('{"var":"val"}', $result['data']);
    }

    /**
     * @runInSeparateProcess
     */
    public function testFetchNoEncode()
    {
        if(!defined('DEBUG')) {
            define('DEBUG', false);
        }
        Env::setParams(array('encode' => false));
        $controller = FrontController::getInstance();
        $controller->setView('SomeView');
        $action = $this->getMockForAbstractClass('AjaxAction' );
        $action->data = array('var' => 'val');
        $result = $action->fetch();
        $this->assertEquals('/actions//ajax', $result['template']);
        $this->assertEquals( $action->data, $result['data']);
    }
}