You are here

function MerciTest::testMerciQuantityResources in MERCI (Manage Equipment Reservations, Checkout and Inventory) 8.2

Check quantity field logic.

File

src/Tests/MerciTest.php, line 294
Contains \Drupal\merci\Tests\MerciTest.

Class

MerciTest
Tests pager functionality.

Namespace

Drupal\merci\Tests

Code

function testMerciQuantityResources() {
  $settings = array(
    'type' => 'merci_resource',
    'field_merci_grouping' => array(
      'target_id' => $this->term
        ->id(),
    ),
    'field_merci_location' => array(
      'target_id' => $this->office_hours
        ->id(),
    ),
    'field_reservable_quantity' => 2,
  );
  $resource = $this
    ->createNode($settings);
  $this
    ->drupalGet("/node/" . $resource
    ->id() . "/edit");

  // Login the merci user.
  $this
    ->drupalLogin($this->merci_user);

  // Reserve one of the item.
  $settings = array(
    'field_quantity' => 2,
    'merci_reservation_items' => array(
      'target_id' => $resource
        ->id(),
    ),
  );
  $node = $this
    ->merciCreateReservation("Sunday 3pm", "Sunday 4pm", $settings);
  $violations = $node
    ->validate();
  $this
    ->assertFalse($violations
    ->has(0));

  // Reserve two of the item.
  $settings = array(
    'field_quantity' => 3,
    'merci_reservation_items' => array(
      'target_id' => $resource
        ->id(),
    ),
  );
  $node = $this
    ->merciCreateReservation("Sunday 3pm", "Sunday 4pm", $settings);
  $violations = $node
    ->validate();
  $this
    ->assert(TRUE, $violations
    ->count());
  $pattern = '@You have selected too many of the same item@';
  $this
    ->assert((bool) preg_match($pattern, $violations
    ->get(0)
    ->getMessage()
    ->render()), $violations
    ->get(0)
    ->getMessage()
    ->render());

  // Reserve one of the item.
  $settings = array(
    'field_quantity' => 1,
    'merci_reservation_items' => array(
      'target_id' => $resource
        ->id(),
    ),
  );
  $node = $this
    ->merciCreateReservation("Sunday 3pm", "Sunday 4pm", $settings);
  $violations = $node
    ->validate();
  $this
    ->assertFalse($violations
    ->has(0));
  $node
    ->save();

  // Reserve one of the item.
  $settings = array(
    'field_quantity' => 1,
    'merci_reservation_items' => array(
      'target_id' => $resource
        ->id(),
    ),
  );
  $node = $this
    ->merciCreateReservation("Sunday 3pm", "Sunday 4pm", $settings);
  $violations = $node
    ->validate();
  $this
    ->assertFalse($violations
    ->has(0));

  // Reserve two of the item.
  $settings = array(
    'field_quantity' => 2,
    'merci_reservation_items' => array(
      'target_id' => $resource
        ->id(),
    ),
  );
  $node = $this
    ->merciCreateReservation("Sunday 3pm", "Sunday 4pm", $settings);
  $violations = $node
    ->validate();
  $pattern = '@is already reserved by:@';
  $this
    ->assert((bool) preg_match($pattern, $violations
    ->get(0)
    ->getMessage()
    ->render()), $violations
    ->get(0)
    ->getMessage()
    ->render());

  // Reserve two of the item.
  $settings = array(
    'field_quantity' => 2,
    'merci_reservation_items' => array(
      'target_id' => $resource
        ->id(),
    ),
  );
  $node = $this
    ->merciCreateReservation("Monday 3pm", "Monday 4pm", $settings);
  $violations = $node
    ->validate();
  $this
    ->assertFalse($violations
    ->has(0));
  $node
    ->save();
  $this
    ->drupalGet("/admin/structure/merci_line_item/" . $node
    ->id() . "/edit");

  // Should fail.
  // Reserve one of the item.
  $settings = array(
    'field_quantity' => 1,
    'merci_reservation_items' => array(
      'target_id' => $resource
        ->id(),
    ),
  );
  $node = $this
    ->merciCreateReservation("Monday 3pm", "Monday 4pm", $settings);
  $violations = $node
    ->validate();
  $node
    ->save();
  $this
    ->drupalGet("/admin/structure/merci_line_item/" . $node
    ->id() . "/edit");
  $pattern = '@is already reserved by:@';
  $message = "There is a conflict";
  $this
    ->assert((bool) preg_match($pattern, $violations
    ->get(0)
    ->getMessage()
    ->render()), $message);
}