<?php

namespace yiiunit\extensions\mongodb;

use yii\mongodb\Collection;
use yii\mongodb\file\Collection as FileCollection;

/**
 * @group mongodb
 */
class DatabaseTest extends MongoDbTestCase
{
    protected function tearDown()
    {
        $this->dropCollection('customer');
        $this->dropFileCollection('testfs');
        parent::tearDown();
    }

    // Tests :

    public function testGetCollection()
    {
        $database = $connection = $this->getConnection()->getDatabase();

        $collection = $database->getCollection('customer');
        $this->assertTrue($collection instanceof Collection);
        $this->assertTrue($collection->mongoCollection instanceof \MongoCollection);

        $collection2 = $database->getCollection('customer');
        $this->assertTrue($collection === $collection2);

        $collectionRefreshed = $database->getCollection('customer', true);
        $this->assertFalse($collection === $collectionRefreshed);
    }

    public function testGetFileCollection()
    {
        $database = $connection = $this->getConnection()->getDatabase();

        $collection = $database->getFileCollection('testfs');
        $this->assertTrue($collection instanceof FileCollection);
        $this->assertTrue($collection->mongoCollection instanceof \MongoGridFS);

        $collection2 = $database->getFileCollection('testfs');
        $this->assertTrue($collection === $collection2);

        $collectionRefreshed = $database->getFileCollection('testfs', true);
        $this->assertFalse($collection === $collectionRefreshed);
    }

    public function testExecuteCommand()
    {
        $database = $connection = $this->getConnection()->getDatabase();

        $result = $database->executeCommand([
            'distinct' => 'customer',
            'key' => 'name'
        ]);
        $this->assertTrue(array_key_exists('ok', $result));
        $this->assertTrue(array_key_exists('values', $result));
    }

    public function testCreateCollection()
    {
        $database = $connection = $this->getConnection()->getDatabase();
        $collection = $database->createCollection('customer');
        $this->assertTrue($collection instanceof \MongoCollection);
    }
}