public function LogQueryTest::testLogQueryFactory in farmOS 2.x
Test log query factory.
File
- modules/
core/ log/ tests/ src/ Kernel/ LogQueryTest.php, line 51
Class
- LogQueryTest
- Tests for farmOS log query factory.
Namespace
Drupal\Tests\farm_log\KernelCode
public function testLogQueryFactory() {
// Get asset and log storage.
$asset_storage = \Drupal::service('entity_type.manager')
->getStorage('asset');
$log_storage = \Drupal::service('entity_type.manager')
->getStorage('log');
// Create one asset and two logs of different types.
$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();
// Test that the logs are in default log query results.
$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.');
// Test that results can be filtered by log type.
$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.');
// Set the timestamp of one log to the future.
$now = \Drupal::time()
->getRequestTime();
$foo_log->timestamp = $now + 86400;
$foo_log
->save();
// Test that results can be filtered by timestamp.
$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.');
// Set the status of one log to complete.
$bar_log->status = 'complete';
$bar_log
->save();
// Test that results can be filtered by status.
$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.');
// Reference the asset in one of the logs.
$foo_log->asset[] = $asset;
$foo_log
->save();
// Test that results can be filtered by asset reference.
$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.');
// Set the timestamps of both logs to now.
$now = \Drupal::time()
->getRequestTime();
$foo_log->timestamp = $now;
$foo_log
->save();
$bar_log->timestamp = $now;
$bar_log
->save();
// Test that logs with the same timestamp are sorted by ID descending.
$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.');
// Set the timestamp of one log to the future.
$now = \Drupal::time()
->getRequestTime();
$foo_log->timestamp = $now + 86400;
$foo_log
->save();
// Test that logs are sorted by timestamp descending.
$log_ids = $this->logQueryFactory
->getQuery()
->accessCheck(FALSE)
->execute();
$this
->assertEquals($foo_log
->id(), reset($log_ids), 'Logs are sorted by timestamp descending.');
// Test that results can be limited.
$log_ids = $this->logQueryFactory
->getQuery([
'limit' => 1,
])
->accessCheck(FALSE)
->execute();
$this
->assertEquals(1, count($log_ids), 'Log query results can be limited.');
}