Yii2 framework backup
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

140 lines
3.7 KiB

<?php
namespace yiiunit\extensions\mongodb;
use yii\mongodb\Session;
use Yii;
class SessionTest extends MongoDbTestCase
{
/**
* @var string test session collection name.
*/
protected static $sessionCollection = '_test_session';
protected function tearDown()
{
$this->dropCollection(static::$sessionCollection);
parent::tearDown();
}
/**
* Creates test session instance.
* @return Session session instance.
*/
protected function createSession()
{
return Yii::createObject([
'class' => Session::className(),
'db' => $this->getConnection(),
'sessionCollection' => static::$sessionCollection,
]);
}
// Tests:
public function testWriteSession()
{
$session = $this->createSession();
$id = uniqid();
$data = [
'name' => 'value'
];
$dataSerialized = serialize($data);
$this->assertTrue($session->writeSession($id, $dataSerialized), 'Unable to write session!');
$collection = $session->db->getCollection($session->sessionCollection);
$rows = $this->findAll($collection);
$this->assertCount(1, $rows, 'No session record!');
$row = array_shift($rows);
$this->assertEquals($id, $row['id'], 'Wrong session id!');
$this->assertEquals($dataSerialized, $row['data'], 'Wrong session data!');
$this->assertTrue($row['expire'] > time(), 'Wrong session expire!');
$newData = [
'name' => 'new value'
];
$newDataSerialized = serialize($newData);
$this->assertTrue($session->writeSession($id, $newDataSerialized), 'Unable to update session!');
$rows = $this->findAll($collection);
$this->assertCount(1, $rows, 'Wrong session records after update!');
$newRow = array_shift($rows);
$this->assertEquals($id, $newRow['id'], 'Wrong session id after update!');
$this->assertEquals($newDataSerialized, $newRow['data'], 'Wrong session data after update!');
$this->assertTrue($newRow['expire'] >= $row['expire'], 'Wrong session expire after update!');
}
/**
* @depends testWriteSession
*/
public function testDestroySession()
{
$session = $this->createSession();
$id = uniqid();
$data = [
'name' => 'value'
];
$dataSerialized = serialize($data);
$session->writeSession($id, $dataSerialized);
$this->assertTrue($session->destroySession($id), 'Unable to destroy session!');
$collection = $session->db->getCollection($session->sessionCollection);
$rows = $this->findAll($collection);
$this->assertEmpty($rows, 'Session record not deleted!');
}
/**
* @depends testWriteSession
*/
public function testReadSession()
{
$session = $this->createSession();
$id = uniqid();
$data = [
'name' => 'value'
];
$dataSerialized = serialize($data);
$session->writeSession($id, $dataSerialized);
$sessionData = $session->readSession($id);
$this->assertEquals($dataSerialized, $sessionData, 'Unable to read session!');
$collection = $session->db->getCollection($session->sessionCollection);
list($row) = $this->findAll($collection);
$newRow = $row;
$newRow['expire'] = time() - 1;
unset($newRow['_id']);
$collection->update(['_id' => $row['_id']], $newRow);
$sessionData = $session->readSession($id);
$this->assertEquals('', $sessionData, 'Expired session read!');
}
public function testGcSession()
{
$session = $this->createSession();
$collection = $session->db->getCollection($session->sessionCollection);
$collection->batchInsert([
[
'id' => uniqid(),
'expire' => time() + 10,
'data' => 'actual',
],
[
'id' => uniqid(),
'expire' => time() - 10,
'data' => 'expired',
],
]);
$this->assertTrue($session->gcSession(10), 'Unable to collection garbage session!');
$rows = $this->findAll($collection);
$this->assertCount(1, $rows, 'Wrong records count!');
}
}