View source
<?php
namespace Drupal\crm_core_contact\Tests;
use Drupal\crm_core_contact\Entity\Organization;
use Drupal\crm_core_contact\Entity\OrganizationType;
use Drupal\simpletest\WebTestBase;
class OrganizationUiTest extends WebTestBase {
public static $modules = [
'crm_core_contact',
'crm_core_activity',
'crm_core_tests',
'block',
'datetime',
'options',
];
public function setUp() {
parent::setUp();
OrganizationType::create([
'label' => 'Supplier',
'id' => 'supplier',
'description' => 'A person or company that supplies goods or services.',
'primary_fields' => [],
])
->save();
OrganizationType::create([
'label' => 'Household',
'id' => 'household',
'description' => 'A collection of individuals generally located at the same residence.',
'primary_fields' => [],
])
->save();
$this
->drupalPlaceBlock('local_actions_block');
$this
->drupalPlaceBlock('local_tasks_block');
}
public function testOrganizationOperations() {
$user = $this
->drupalCreateUser([
'administer crm_core_organization entities',
'administer organization types',
'create crm_core_organization entities of bundle supplier',
'view any crm_core_organization entity',
'view any crm_core_activity entity',
]);
$this
->drupalLogin($user);
$this
->drupalGet('crm-core');
$this
->assertLink(t('CRM Organizations'));
$this
->clickLink(t('CRM Organizations'));
$this
->assertText(t('There are no organizations available.'), 'No organizations available after fresh installation.');
$this
->assertLink(t('Add an organization'));
$household_node = [
'name[0][value]' => 'Fam. Johnson',
];
$this
->drupalPostForm('crm-core/organization/add/household', $household_node, 'Save Household');
$this
->assertUrl('crm-core/organization');
$this
->assertText('Fam. Johnson', 0, 'Newly created organization title listed.');
$this
->assertText(t('Household'), 'Newly created organization type listed.');
$household_node = [
'name[0][value]' => 'Fam. Bane',
];
$households = \Drupal::entityTypeManager()
->getStorage('crm_core_organization')
->loadByProperties([
'name' => 'Fam. Johnson',
]);
$household = current($households);
$this
->drupalPostForm('crm-core/organization/' . $household
->id() . '/edit', $household_node, 'Save Household');
$this
->assertUrl('crm-core/organization/' . $household
->id());
$this
->assertText('Fam. Bane', 0, 'Organization updated.');
$this
->assertRaw('Fam. Bane</div>');
$this
->drupalGet('crm-core/organization');
$this
->assertText('Fam. Bane', 0, 'Updated organization title listed.');
$supplier_node = [
'name[0][value]' => 'Example ltd',
];
$this
->drupalPostForm('crm-core/organization/add/supplier', $supplier_node, 'Save Supplier');
$this
->drupalPostForm('crm-core/organization/add/supplier', [], 'Save Supplier');
$this
->assertUrl('crm-core/organization');
$this
->assertLink('Example ltd', 0, 'Newly created organization title listed.');
$this
->assertLink('Nameless #3', 0, 'Nameless organization title listed.');
$this
->assertText(t('Supplier'), 'Newly created organization type listed.');
$this
->assertLink('Name');
$this
->assertLink('Organization type');
$this
->assertLink('Updated');
$this
->assertText('Operations');
$count = $this
->xpath('//form[@class="views-exposed-form"]/div/div/label[text()="Type"]');
$this
->assertTrue($count, 1, 'Individual type is an exposed filter.');
$count = $this
->xpath('//form[@class="views-exposed-form"]/div/div/label[text()="Name"]');
$this
->assertTrue($count, 1, 'Name is an exposed filter.');
$organizations = \Drupal::entityTypeManager()
->getStorage('crm_core_organization')
->loadByProperties([
'name' => 'Example ltd',
]);
$organization = current($organizations);
$new_user = $this
->drupalCreateUser();
$this
->assertEqual($organization
->getOwnerId(), $user
->id());
$this
->assertEqual($organization
->getOwner()
->id(), $user
->id());
$organization
->setOwner($new_user);
$this
->assertEqual($organization
->getOwnerId(), $new_user
->id());
$this
->assertEqual($organization
->getOwner()
->id(), $new_user
->id());
$organization
->setOwnerId($user
->id());
$this
->assertEqual($organization
->getOwnerId(), $user
->id());
$this
->assertEqual($organization
->getOwner()
->id(), $user
->id());
$this
->assertRaw('crm-core/organization/' . $organization
->id() . '/edit', 'Edit link is available.');
$this
->assertRaw('crm-core/organization/' . $organization
->id() . '/delete', 'Delete link is available.');
$this
->assertText($this->container
->get('date.formatter')
->format($organization
->get('changed')->value, 'short'), 'Organization updated date is available.');
$supplier_node = [
'name[0][value]' => 'Another Example ltd',
];
$this
->drupalPostForm('crm-core/organization/' . $organization
->id() . '/edit', $supplier_node, 'Save Supplier');
$this
->assertUrl('crm-core/organization/' . $organization
->id());
$this
->assertText('Another Example ltd', 0, 'Organization updated.');
$this
->drupalGet('crm-core/organization/1/edit');
$this
->assertRaw('data-drupal-link-system-path="crm-core/organization/1/delete"', 'Local task "Delete" is available.');
$this
->assertRaw('crm-core/organization/1/delete" class="button button--danger" data-drupal-selector="edit-delete" id="edit-delete"', 'Delete link is available.');
$this
->drupalGet('crm-core/organization');
$this
->assertLink('Another Example ltd', 0, 'Updated organization title listed.');
$this
->drupalPostForm('crm-core/organization/1/delete', [], t('Delete'));
$this
->drupalPostForm('crm-core/organization/2/delete', [], t('Delete'));
$this
->drupalPostForm('crm-core/organization/3/delete', [], t('Delete'));
$this
->assertUrl('crm-core/organization');
$this
->assertNoLink('Another Example ltd', 0, 'Deleted organization title no more listed.');
$this
->assertText(t('There are no organizations available.'), 'No organizations available.');
}
public function testOrganizationTypeOperations() {
$user = $this
->drupalCreateUser([
'administer organization types',
]);
$this
->drupalLogin($user);
$this
->drupalGet('admin/structure/crm-core/organization-types');
$this
->assertOrganizationTypeLink('supplier', 'Edit link for supplier.');
$this
->assertOrganizationTypeLink('supplier/delete', 'Delete link for supplier.');
$this
->assertOrganizationTypeLink('household', 'Edit link for household.');
$this
->assertOrganizationTypeLink('household/delete', 'Delete link for household.');
$second_organization_type = OrganizationType::create([
'id' => 'new_organization_type',
'label' => 'New organization type',
'primary_fields' => [],
]);
$second_organization_type
->save();
$this
->drupalGet('admin/structure/crm-core/organization-types');
Organization::create([
'type' => 'supplier',
])
->save();
$this
->drupalGet('admin/structure/crm-core/organization-types');
$this
->assertNoOrganizationTypeLink('supplier/delete', 'No delete link for supplier.');
$this
->drupalGet('admin/structure/crm-core/organization-types/supplier/delete');
$this
->assertResponse(403);
$this
->drupalGet('admin/structure/crm-core/organization-types/supplier');
$this
->assertNoOrganizationTypeLink('supplier/delete', 'No delete link on supplier type form.');
}
public function testFieldsUi() {
$user = $this
->drupalCreateUser([
'administer crm_core_organization display',
'administer crm_core_organization form display',
'administer crm_core_organization fields',
]);
$this
->drupalLogin($user);
$this
->drupalGet('admin/structure/crm-core/organization-types/supplier/fields');
$this
->assertText(t('Manage fields'), 'Manage fields local task is available.');
$this
->assertText(t('Manage form display'), 'Manage form display local task is available.');
$this
->assertText(t('Manage display'), 'Manage display local task is available.');
$this
->drupalGet('admin/structure/crm-core/organization-types/supplier/form-display');
$this
->assertText(t('Name'), 'Name field is available on form display.');
$this
->drupalGet('admin/structure/crm-core/organization-types/supplier/display');
$this
->assertText(t('Name'), 'Name field is available on manage display.');
}
public function testOrganizationRevisions() {
$user = $this
->drupalCreateUser([
'administer crm_core_organization entities',
'view all crm_core_organization revisions',
]);
$this
->drupalLogin($user);
$organization = [
'name[0][value]' => 'rev',
];
$this
->drupalPostForm('crm-core/organization/add/supplier', $organization, 'Save Supplier');
$organization_1 = [
'name[0][value]' => 'rev1',
];
$this
->drupalPostForm('crm-core/organization/1/edit', $organization_1, 'Save Supplier');
$organization_2 = [
'name[0][value]' => 'rev2',
];
$this
->drupalPostForm('crm-core/organization/1/edit', $organization_2, 'Save Supplier');
$this
->clickLink('Revisions');
$this
->assertLinkByHref('crm-core/organization/1');
$this
->assertLinkByHref('crm-core/organization/1/revisions/1/view');
$this
->assertLinkByHref('crm-core/organization/1/revisions/2/view');
$this
->drupalGet('crm-core/organization/1/revisions/1/view');
$this
->assertText('rev');
$this
->drupalGet('crm-core/organization/1/revisions/2/view');
$this
->assertText('rev1');
}
public function assertOrganizationTypeLink($href, $message = '') {
$this
->assertLinkByHref('admin/structure/crm-core/organization-types/' . $href, 0, $message);
}
public function assertNoOrganizationTypeLink($href, $message = '') {
$this
->assertNoLinkByHref('admin/structure/crm-core/organization-types/' . $href, $message);
}
}