mautic / app /bundles /LeadBundle /Tests /Model /CompanyModelTest.php
chrisbryan17's picture
Upload folder using huggingface_hub
d2897cd verified
<?php
namespace Mautic\LeadBundle\Tests\Model;
use Mautic\EmailBundle\Helper\EmailValidator;
use Mautic\LeadBundle\Deduplicate\CompanyDeduper;
use Mautic\LeadBundle\Entity\Company;
use Mautic\LeadBundle\Model\CompanyModel;
use Mautic\LeadBundle\Model\FieldModel;
use Symfony\Component\HttpFoundation\Session\Session;
class CompanyModelTest extends \PHPUnit\Framework\TestCase
{
/**
* @var FieldModel|\PHPUnit\Framework\MockObject\MockObject
*/
private \PHPUnit\Framework\MockObject\MockObject $leadFieldModel;
/**
* @var \PHPUnit\Framework\MockObject\MockObject|Session
*/
private \PHPUnit\Framework\MockObject\MockObject $session;
/**
* @var EmailValidator|\PHPUnit\Framework\MockObject\MockObject
*/
private \PHPUnit\Framework\MockObject\MockObject $emailValidator;
/**
* @var CompanyDeduper|\PHPUnit\Framework\MockObject\MockObject
*/
private \PHPUnit\Framework\MockObject\MockObject $companyDeduper;
public function setUp(): void
{
$this->leadFieldModel = $this->createMock(FieldModel::class);
$this->session = $this->createMock(Session::class);
$this->emailValidator = $this->createMock(EmailValidator::class);
$this->companyDeduper = $this->createMock(CompanyDeduper::class);
}
/**
* @testdox Ensure that an array value is flattened before saving
*
* @covers \Mautic\CoreBundle\Helper\AbstractFormFieldHelper::parseList
*/
public function testArrayValueIsFlattenedBeforeSave(): void
{
/** @var CompanyModel $companyModel */
$companyModel = $this->getMockBuilder(CompanyModel::class)
->disableOriginalConstructor()
->onlyMethods([])
->getMock();
$company = new Company();
$company->setFields(
[
'core' => [
'multiselect' => [
'type' => 'multiselect',
'alias' => 'multiselect',
'value' => 'abc|123',
],
],
]
);
$companyModel->setFieldValues($company, ['multiselect' => ['abc', 'def']]);
$updatedFields = $company->getUpdatedFields();
$this->assertEquals(
[
'multiselect' => 'abc|def',
],
$updatedFields
);
}
public function testImportCompanySkipIfExistsTrue(): void
{
$companyModel = $this->getCompanyModelForImport();
$duplicatedCompany = $this->createMock(Company::class);
$duplicatedCompany->method('getProfileFields')->willReturn(['companyfield'=> 'xxx']);
$companyDeduper = $this->getCompanyDeduperForImport($duplicatedCompany);
$this->setProperty($companyModel, CompanyModel::class, 'companyDeduper', $companyDeduper);
$duplicatedCompany->expects($this->exactly(0))->method('addUpdatedField');
$companyModel->importCompany([], [], null, false, true);
}
public function testImportCompanySkipIfExistsFalse(): void
{
$companyModel = $this->getCompanyModelForImport();
$duplicatedCompany = $this->createMock(Company::class);
$duplicatedCompany->method('getProfileFields')->willReturn(['companyfield'=> 'xxx']);
$companyDeduper = $this->getCompanyDeduperForImport($duplicatedCompany);
$this->setProperty($companyModel, CompanyModel::class, 'companyDeduper', $companyDeduper);
$duplicatedCompany->expects($this->exactly(1))->method('addUpdatedField');
$companyModel->importCompany([], [], null, false, false);
}
private function getCompanyModelForImport()
{
$companyModel = $this->getMockBuilder(CompanyModel::class)
->disableOriginalConstructor()
->onlyMethods(['fetchCompanyFields', 'getFieldData'])
->getMock();
$companyModel->method('fetchCompanyFields')->willReturn(
[
[
'alias' => 'companyfield',
'defaultValue' => '',
'type' => 'text',
],
]
);
$companyModel->method('getFieldData')->willReturn(['companyfield' => 'xxx']);
return $companyModel;
}
private function getCompanyDeduperForImport(Company $duplicatedCompany)
{
$companyDeduper = $this->createMock(CompanyDeduper::class);
$companyDeduper->method('checkForDuplicateCompanies')->willReturn([$duplicatedCompany]);
return $companyDeduper;
}
/**
* Set protected property to an object.
*
* @param object $object
* @param string $class
* @param string $property
* @param mixed $value
*/
private function setProperty($object, $class, $property, $value): void
{
$reflectedProp = new \ReflectionProperty($class, $property);
$reflectedProp->setAccessible(true);
$reflectedProp->setValue($object, $value);
}
public function testExtractCompanyDataFromImport(): void
{
/** @var CompanyModel $companyModel */
$companyModel = $this->getMockBuilder(CompanyModel::class)
->disableOriginalConstructor()
->onlyMethods(['fetchCompanyFields'])
->getMock();
$companyModel->method('fetchCompanyFields')
->will($this->returnValue([
['alias' => 'companyname'],
['alias' => 'companyemail'],
['alias' => 'companyindustry'],
]));
$fields = [
'email' => 'i_contact_email',
'companyemail' => 'i_company_email',
'company' => 'i_company_name',
'companyindustry' => 'i_company_industry',
];
$data= [
'i_contact_email' => '[email protected]',
'i_company_email' => '[email protected]',
'i_company_name' => 'Turbo chicken',
'i_company_industry' => 'Biotechnology',
];
[$companyFields, $companyData] = $companyModel->extractCompanyDataFromImport($fields, $data);
$expectedCompanyFields = [
'companyemail' => 'i_company_email',
'companyindustry' => 'i_company_industry',
'companyname' => 'i_company_name',
];
$expectedCompanyData = [
'i_company_email' => '[email protected]',
'i_company_industry' => 'Biotechnology',
'i_company_name' => 'Turbo chicken',
];
$this->assertSame($expectedCompanyFields, $companyFields);
$this->assertSame($expectedCompanyData, $companyData);
}
}