Spaces:
No application file
No application file
declare(strict_types=1); | |
namespace Mautic\LeadBundle\Tests\Controller; | |
use Doctrine\ORM\Exception\ORMException; | |
use Mautic\CoreBundle\Test\MauticMysqlTestCase; | |
use Mautic\LeadBundle\Entity\Lead; | |
use PHPUnit\Framework\Assert; | |
final class LeadControllerListingPageTest extends MauticMysqlTestCase | |
{ | |
protected function setUp(): void | |
{ | |
$this->configParams['contact_columns'] = ['name', 'location', 'email']; | |
parent::setUp(); | |
} | |
/** | |
* @param string[] $location | |
* | |
* @dataProvider dataForContactListing | |
* | |
* @throws ORMException | |
*/ | |
public function testContactListingForLocation(array $location, string $expected): void | |
{ | |
$this->createContact($location); | |
$crawler = $this->client->request('GET', 's/contacts'); | |
$rowContent = $crawler->filterXPath("//table[@id='leadTable']//tbody//tr"); | |
Assert::assertStringEndsWith($expected, $rowContent->text()); | |
} | |
/** | |
* @return iterable<string, array<int, string|string[]>> | |
*/ | |
public function dataForContactListing(): iterable | |
{ | |
yield 'With no location' => [ | |
// Location Details | |
[ | |
'setCity' => '', | |
'setState' => '', | |
'setCountry' => '', | |
], | |
// Expected suffice | |
'John Doe [email protected]', | |
]; | |
yield 'With whole location details' => [ | |
// Location Details | |
[ | |
'setCity' => 'Pune', | |
'setState' => 'MH', | |
'setCountry' => 'India', | |
], | |
// Expected suffice | |
'John Doe Pune, MH [email protected]', | |
]; | |
yield 'With only City for location' => [ | |
// Location Details | |
[ | |
'setCity' => 'Pune', | |
'setState' => '', | |
'setCountry' => '', | |
], | |
// Expected suffice | |
'John Doe Pune [email protected]', | |
]; | |
} | |
/** | |
* @param string[] $location | |
* | |
* @throws ORMException | |
*/ | |
private function createContact(array $location = []): void | |
{ | |
$contact = new Lead(); | |
$contact->setFirstname('John'); | |
$contact->setLastname('Doe'); | |
$contact->setEmail('[email protected]'); | |
foreach ($location as $name => $value) { | |
if (empty($value)) { | |
continue; | |
} | |
$contact->$name($value); | |
} | |
$this->em->persist($contact); | |
$this->em->flush(); | |
} | |
} | |