View source
<?php
namespace Drupal\Tests\farm_log\Kernel;
use Drupal\KernelTests\KernelTestBase;
class LogQueryTest extends KernelTestBase {
protected $logQueryFactory;
protected static $modules = [
'asset',
'log',
'farm_field',
'farm_log',
'farm_log_query_test',
'state_machine',
'user',
];
protected function setUp() : void {
parent::setUp();
$this->logQueryFactory = \Drupal::service('farm.log_query');
$this
->installEntitySchema('asset');
$this
->installEntitySchema('log');
$this
->installEntitySchema('user');
$this
->installConfig([
'farm_log_query_test',
]);
}
public function testLogQueryFactory() {
$asset_storage = \Drupal::service('entity_type.manager')
->getStorage('asset');
$log_storage = \Drupal::service('entity_type.manager')
->getStorage('log');
$asset = $asset_storage
->create([
'type' => 'test',
]);
$asset
->save();
$foo_log = $log_storage
->create([
'type' => 'foo',
]);
$foo_log
->save();
$bar_log = $log_storage
->create([
'type' => 'bar',
]);
$bar_log
->save();
$log_ids = $this->logQueryFactory
->getQuery()
->accessCheck(FALSE)
->execute();
$this
->assertContains($foo_log
->id(), $log_ids, 'Log 1 appears in log query results.');
$this
->assertContains($bar_log
->id(), $log_ids, 'Log 2 appears in log query results.');
$log_ids = $this->logQueryFactory
->getQuery([
'type' => 'foo',
])
->accessCheck(FALSE)
->execute();
$this
->assertContains($foo_log
->id(), $log_ids, 'Log query results can be filtered by type.');
$now = \Drupal::time()
->getRequestTime();
$foo_log->timestamp = $now + 86400;
$foo_log
->save();
$log_ids = $this->logQueryFactory
->getQuery([
'timestamp' => $now,
])
->accessCheck(FALSE)
->execute();
$this
->assertNotContains($foo_log
->id(), $log_ids, 'Log query results can be filtered by timestamp.');
$bar_log->status = 'complete';
$bar_log
->save();
$log_ids = $this->logQueryFactory
->getQuery([
'status' => 'pending',
])
->accessCheck(FALSE)
->execute();
$this
->assertNotContains($bar_log
->id(), $log_ids, 'Log query results can be filtered by status.');
$foo_log->asset[] = $asset;
$foo_log
->save();
$log_ids = $this->logQueryFactory
->getQuery([
'asset' => $asset,
])
->accessCheck(FALSE)
->execute();
$this
->assertContains($foo_log
->id(), $log_ids, 'Log that references asset is included in results.');
$this
->assertNotContains($bar_log
->id(), $log_ids, 'Log that does not reference asset is not included in results.');
$now = \Drupal::time()
->getRequestTime();
$foo_log->timestamp = $now;
$foo_log
->save();
$bar_log->timestamp = $now;
$bar_log
->save();
$log_ids = $this->logQueryFactory
->getQuery()
->accessCheck(FALSE)
->execute();
$this
->assertEquals($bar_log
->id(), reset($log_ids), 'Logs with the same timestamp are sorted by ID descending.');
$now = \Drupal::time()
->getRequestTime();
$foo_log->timestamp = $now + 86400;
$foo_log
->save();
$log_ids = $this->logQueryFactory
->getQuery()
->accessCheck(FALSE)
->execute();
$this
->assertEquals($foo_log
->id(), reset($log_ids), 'Logs are sorted by timestamp descending.');
$log_ids = $this->logQueryFactory
->getQuery([
'limit' => 1,
])
->accessCheck(FALSE)
->execute();
$this
->assertEquals(1, count($log_ids), 'Log query results can be limited.');
}
}