CampaignORMTest.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. <?php
  2. namespace Dotdigitalgroup\Email\Model;
  3. use Dotdigitalgroup\Email\Model\ResourceModel\Campaign\Collection as CampaignCollection;
  4. use Dotdigitalgroup\Email\Setup\Schema;
  5. use Magento\Framework\App\ResourceConnection;
  6. use Magento\TestFramework\ObjectManager;
  7. class CampaignORMTest extends \PHPUnit\Framework\TestCase
  8. {
  9. /**
  10. * @var \Dotdigitalgroup\Email\Model\ResourceModel\Campaign
  11. */
  12. protected $campaignResource;
  13. /**
  14. * @return Campaign
  15. */
  16. private function createCampaignModel()
  17. {
  18. return ObjectManager::getInstance()->create(Campaign::class);
  19. }
  20. /**
  21. * @param int|string $customerId
  22. * @param string $email
  23. * @return Campaign
  24. */
  25. private function createCampaign($customerId, $email)
  26. {
  27. $model = $this->createCampaignModel();
  28. $model->setData('email', $email);
  29. $model->setData('customer_id', $customerId);
  30. $model->setData('message', 'Test Message');
  31. $this->campaignResource->save($model);
  32. return $model;
  33. }
  34. /**
  35. * @param Campaign $campaign
  36. * @param CampaignCollection $collection
  37. * @return void
  38. */
  39. private function assertCollectionContains(Campaign $campaign, CampaignCollection $collection)
  40. {
  41. $message = sprintf('Expected campaign with ID "%s" not found in collection', $campaign->getId());
  42. $this->assertContains($campaign->getId(), array_keys($collection->getItems()), $message);
  43. }
  44. /**
  45. * @return void
  46. */
  47. protected function setUp()
  48. {
  49. /** @var CampaignCollection $collection */
  50. $collection = ObjectManager::getInstance()->create(CampaignCollection::class);
  51. $this->campaignResource = ObjectManager::getInstance()->create(
  52. \Dotdigitalgroup\Email\Model\ResourceModel\Campaign::class
  53. );
  54. $collection->walk(function (Campaign $campaign) {
  55. $this->campaignResource->delete($campaign);
  56. });
  57. }
  58. /**
  59. * @return void
  60. */
  61. public function testCampaignTableExists()
  62. {
  63. /** @var ResourceConnection $resource */
  64. $resource = ObjectManager::getInstance()->get(ResourceConnection::class);
  65. $tableName = $resource->getTableName(Schema::EMAIL_CAMPAIGN_TABLE);
  66. $this->assertTrue($resource->getConnection('default')->isTableExists($tableName));
  67. }
  68. /**
  69. * @magentoDbIsolation enabled
  70. * @return void
  71. */
  72. public function testModelAndResourceModelORMConfiguration()
  73. {
  74. $model = $this->createCampaign('1', 'test@example.com');
  75. $loadedModel = $this->createCampaignModel();
  76. $this->campaignResource->load($loadedModel, $model->getId());
  77. $this->assertNotNull($model->getId());
  78. $this->assertSame($model->getData('email'), $loadedModel->getData('email'));
  79. }
  80. /**
  81. * @magentoDbIsolation enabled
  82. * @return void
  83. */
  84. public function testCollectionORMConfiguration()
  85. {
  86. $campaignA = $this->createCampaign(1, 'customerA@example.com');
  87. $campaignB = $this->createCampaign(2, 'customerB@example.com');
  88. /** @var CampaignCollection $collection */
  89. $collection = ObjectManager::getInstance()->create(CampaignCollection::class);
  90. $collection->load();
  91. $this->assertCollectionContains($campaignA, $collection);
  92. $this->assertCollectionContains($campaignB, $collection);
  93. }
  94. /**
  95. * @magentoDbIsolation enabled
  96. * @return void
  97. */
  98. public function testCanBeLoadedByQuoteId()
  99. {
  100. $storeId = 1;
  101. $dummyQuoteId = 3;
  102. $model = $this->createCampaign(1, 'foo@example.com');
  103. $model->setData('store_id', $storeId);
  104. $model->setData('quote_id', $dummyQuoteId);
  105. $this->campaignResource->save($model);
  106. /** @var Campaign $emptyModel */
  107. $emptyModel = ObjectManager::getInstance()->create(Campaign::class);
  108. $loadedModel = $emptyModel->loadByQuoteId($dummyQuoteId, $storeId);
  109. $this->assertSame($model->getId(), $loadedModel->getId());
  110. }
  111. }