farmOS/modules/quick/movement/tests/src/Kernel/QuickMovementTest.php

157 lines
4.4 KiB
PHP

<?php
namespace Drupal\Tests\farm_quick_movement\Kernel;
use Drupal\asset\Entity\Asset;
use Drupal\Core\Datetime\DrupalDateTime;
use Drupal\Tests\farm_quick\Kernel\QuickFormTestBase;
/**
* Tests for farmOS movement quick form.
*
* @group farm
*/
class QuickMovementTest extends QuickFormTestBase {
/**
* Quick form ID.
*
* @var string
*/
protected $quickFormId = 'movement';
/**
* {@inheritdoc}
*/
protected static $modules = [
'farm_equipment',
'farm_activity',
'farm_land',
'farm_quick_movement',
];
/**
* {@inheritdoc}
*/
protected function setUp(): void {
parent::setUp();
$this->installConfig([
'farm_activity',
'farm_equipment',
'farm_land',
]);
}
/**
* Test movement quick form submission.
*/
public function testQuickMovement() {
// Get today's date.
$today = new DrupalDateTime('midnight');
// Create two equipment assets and two land assets.
$equipment1 = Asset::create([
'name' => 'Tractor',
'type' => 'equipment',
'status' => 'active',
]);
$equipment1->save();
$equipment2 = Asset::create([
'name' => "Mike's Combine",
'type' => 'equipment',
'status' => 'active',
]);
$equipment2->save();
$location1 = Asset::create([
'name' => 'Field A',
'type' => 'land',
'land_type' => 'field',
'is_fixed' => TRUE,
'is_location' => TRUE,
'intrinsic_geometry' => 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))',
'status' => 'active',
]);
$location1->save();
$location2 = Asset::create([
'name' => 'Field B',
'type' => 'land',
'land_type' => 'field',
'is_fixed' => TRUE,
'is_location' => TRUE,
'intrinsic_geometry' => 'POLYGON ((20 40, 40 80, 60 60, 10 20, 20 40))',
'status' => 'active',
]);
$location2->save();
// Programmatically submit the movement quick form.
$form_values = [
'date' => [
'date' => $today->format('Y-m-d'),
'time' => $today->format('H:i:s'),
],
'asset' => [
['target_id' => $equipment1->id()],
['target_id' => $equipment2->id()],
],
'location' => [
['target_id' => $location1->id()],
['target_id' => $location2->id()],
],
'notes' => [
'value' => 'Lorem ipsum',
'format' => 'default',
],
'done' => TRUE,
];
$this->submitQuickForm($form_values);
// Load logs.
$logs = $this->logStorage->loadMultiple();
// Confirm that one log exists.
$this->assertCount(1, $logs);
// Check that the activity log's fields were populated correctly.
$log = $logs[1];
$this->assertEquals('activity', $log->bundle());
$this->assertEquals($today->getTimestamp(), $log->get('timestamp')->value);
$this->assertEquals("Move Tractor, Mike's Combine to Field A, Field B", $log->label());
$this->assertEquals($equipment1->id(), $log->get('asset')->referencedEntities()[0]->id());
$this->assertEquals($equipment2->id(), $log->get('asset')->referencedEntities()[1]->id());
$this->assertEquals($location1->id(), $log->get('location')->referencedEntities()[0]->id());
$this->assertEquals($location2->id(), $log->get('location')->referencedEntities()[1]->id());
$this->assertEquals('Lorem ipsum', $log->get('notes')->value);
$this->assertEquals('GEOMETRYCOLLECTION (POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10)),POLYGON ((20 40, 40 80, 60 60, 10 20, 20 40)))', $log->get('geometry')->value);
$this->assertEquals('done', $log->get('status')->value);
// Programmatically submit the movement quick form again, but this time
// override the geometry.
$form_values['geometry']['value'] = 'POINT (30 10)';
$this->submitQuickForm($form_values);
// Load logs.
$logs = $this->logStorage->loadMultiple();
// Confirm that two logs exist.
$this->assertCount(2, $logs);
// Check that the geometry was overridden.
$log = $logs[2];
$this->assertEquals($form_values['geometry']['value'], $log->get('geometry')->value);
// Programmatically submit the movement quick form again, but this time
// remove the location without removing geometry. This should fail
// validation.
$form_values['location'] = NULL;
$this->submitQuickForm($form_values);
// Load logs.
$logs = $this->logStorage->loadMultiple();
// Confirm that only two logs still exist.
$this->assertCount(2, $logs);
}
}