/**
  * @depends testCreateAndGetMarketingListMemberById
  */
 public function testGetByMarketingListIdAndContactId()
 {
     $marketingList = MarketingListTestHelper::createMarketingListByName('test marketing List 07');
     $this->assertNotNull($marketingList);
     $super = User::getByUsername('super');
     $contact = ContactTestHelper::createContactByNameForOwner('contact 02', $super);
     $marketingListMember = MarketingListMember::getByMarketingListIdAndContactId($marketingList->id, $contact->id);
     $this->assertFalse($marketingListMember);
     MarketingListMemberTestHelper::createMarketingListMember(0, $marketingList, $contact);
     $marketingListMember = MarketingListMember::getByMarketingListIdAndContactId($marketingList->id, $contact->id);
     $this->assertTrue($marketingListMember[0] instanceof MarketingListMember);
 }
 public function skipMessage(Contact $contact, Item $itemOwnerModel)
 {
     // TODO: @Shoaibi: Critical0: We could use SQL for getByMarketingListIdContactIdandUnsubscribed to save further performance here.
     if ($contact->primaryEmail->optOut) {
         return true;
     }
     $marketingListMember = MarketingListMember::getByMarketingListIdAndContactId($itemOwnerModel->marketingList->id, $contact->id);
     if ($marketingListMember === false) {
         return true;
     } else {
         $marketingListMemberObject = $marketingListMember[0];
         $itemOwnerModelClassName = get_class($itemOwnerModel);
         if ($itemOwnerModelClassName === "Campaign" && $marketingListMemberObject->unsubscribed == true) {
             return true;
         } elseif ($itemOwnerModelClassName === "Autoresponder") {
             if ($itemOwnerModel->operationType == Autoresponder::OPERATION_SUBSCRIBE && $marketingListMemberObject->unsubscribed == true) {
                 return true;
             } elseif ($itemOwnerModel->operationType == Autoresponder::OPERATION_UNSUBSCRIBE && $marketingListMemberObject->unsubscribed == false) {
                 return true;
             }
         }
     }
     return false;
 }