<?php 
 
class Server extends JSONful\Server { 
    public function handle(Array $request = []) { 
        return $this->process($request); 
    } 
} 
 
class SimpleTest extends \phpunit_framework_testcase 
{ 
    public static function requests() 
    { 
        $args = array(); 
        foreach (glob(__DIR__ . '/features/*.json') as $file) { 
            $arg = json_decode(file_get_contents($file), true); 
            $args[] = [$arg['request'], $arg['response']]; 
        } 
        return $args; 
    } 
 
    /** 
     *  @dataProvider requests 
     */ 
    public function testRouting(Array $request, $response) 
    { 
        $server = new Server(__DIR__ . '/apps'); 
        $server['session_storage'] = 'SessionStorage'; 
        $this->assertEquals($response, $server->handle($request)->getResponses()['responses']); 
    } 
 
    /** 
     *  @dataProvider requests 
     */ 
    public function testPreresponse(Array $request, $response) 
    { 
        $server = new Server(__DIR__ . '/apps'); 
        $GLOBALS['encrypt'] = true; 
        $response = ['responses' => $response]; 
        do_encrypt($response); 
        $this->assertEquals($response, $server->handle($request)->getResponses()); 
    } 
 
    protected function hasSessionHeader(Array $headers) 
    { 
        foreach ($headers as $header) { 
            if (preg_match("/X-Session-Id/", $header)) { 
                return true; 
            } 
        } 
 
        return false; 
    } 
 
    public function testSessionNoSession() 
    { 
        $GLOBALS['encrypt'] = false; 
 
        $requests = new JSONful\Client\Requests; 
        $requests->add('xxx', []); 
 
        /** server instance */ 
        $server = new Server(__DIR__ . '/apps'); 
        $server['session_storage'] = 'SessionStorage'; 
 
 
        $response = $server->handle($requests->toArray())->getResponses(); 
        $this->assertEquals([['foo' => 'bar']], $response['responses']); 
        $this->assertTrue(empty($response['session'])); 
 
        $requests = new JSONful\Client\Requests; 
        $requests->add('session', ['remember' => 1]); 
 
        $response = $server->handle($requests->toArray())->getResponses(); 
        $this->assertEquals([null], $response['responses']); 
        $this->assertFalse(empty($response['session'])); 
        define('X_SESSION', $response['session']); 
 
    } 
 
    /** 
     *  @dependsOn testSessionNoSession 
     */ 
    public function testSessionFirst() 
    { 
        $server = new Server(__DIR__ . '/apps'); 
        $server['session_storage'] = 'SessionStorage'; 
 
        $requests = new JSONful\Client\Requests; 
        $requests->add('session', ['remember' => 2]); 
        $requests->setSession(X_SESSION); 
 
        $response = $server->handle($requests->toArray())->getResponses(); 
        $this->assertEquals([1], $response['responses']); 
        $this->assertEquals(X_SESSION, $response['session']); 
    } 
 
    /** 
     *  @dependsOn testSessionNoSession 
     */ 
    public function testSessionSession() 
    { 
        /** new - server instance */ 
        $server = new Server; 
        $server->addDirectory(__DIR__ . '/apps'); 
        $server['session_storage'] = 'SessionStorage'; 
 
        $requests = new JSONful\Client\Requests; 
        $requests->add('session', ['remember' => 3]); 
        $requests->setSession(X_SESSION); 
 
        $response = $server->handle($requests->toArray())->getResponses(); 
        $this->assertEquals([2], $response['responses']); 
    } 
 
    /** @expectedException RuntimeException */ 
    public function testAddDirectoryException() 
    { 
        $server = new Server(__DIR__ . '/apps'); 
        $server->handle([]); 
 
        $server->addDirectory(__DIR__); 
    } 
} 
 
 |