/**
  * @depends testCreateAndGetAutoresponderItemActivityById
  */
 public function testRequiredAttributes()
 {
     $autoresponderItemActivity = new AutoresponderItemActivity();
     $this->assertFalse($autoresponderItemActivity->save());
     $errors = $autoresponderItemActivity->getErrors();
     $this->assertNotEmpty($errors);
     $this->assertCount(2, $errors);
     $this->assertArrayHasKey('type', $errors);
     $this->assertEquals('Type cannot be blank.', $errors['type'][0]);
     $this->assertArrayHasKey('quantity', $errors);
     $this->assertEquals('Quantity cannot be blank.', $errors['quantity'][0]);
     $autoresponderItemActivity->type = AutoresponderItemActivity::TYPE_CLICK;
     $autoresponderItemActivity->quantity = 5;
     $emailMessageUrl = new EmailMessageUrl();
     $emailMessageUrl->url = 'http://www.example.com';
     $autoresponderItemActivity->emailMessageUrl = $emailMessageUrl;
     $autoresponderItemActivity->latestSourceIP = '12.13.14.15';
     $this->assertTrue($autoresponderItemActivity->save());
     $id = $autoresponderItemActivity->id;
     unset($autoresponderItemActivity);
     $autoresponderItemActivity = AutoresponderItemActivity::getById($id);
     $this->assertEquals(AutoresponderItemActivity::TYPE_CLICK, $autoresponderItemActivity->type);
     $this->assertEquals(5, $autoresponderItemActivity->quantity);
     $this->assertEquals('12.13.14.15', $autoresponderItemActivity->latestSourceIP);
     $this->assertEquals('http://www.example.com', $autoresponderItemActivity->emailMessageUrl->url);
 }
 /**
  * @depends testCreateAndGetAutoresponderById
  */
 public function testDeleteAutoresponder()
 {
     $autoresponders = Autoresponder::getAll();
     $this->assertCount(7, $autoresponders);
     $autoresponderId = $autoresponders[0]->id;
     $processDateTime = DateTimeUtil::convertTimestampToDbFormatDateTime(time());
     $contact = ContactTestHelper::createContactByNameForOwner('autoresponderContact', Yii::app()->user->userModel);
     $saved = AutoresponderItem::addNewItem(0, $processDateTime, $contact, $autoresponders[0]);
     $this->assertTrue($saved);
     $autoresponderItems = AutoresponderItem::getByProcessedAndAutoresponderId(0, $autoresponderId);
     //print_r($autoresponderItems[0]->id);
     $this->assertNotEmpty($autoresponderItems);
     $this->assertCount(1, $autoresponderItems);
     $autoresponderItemActivity = new AutoresponderItemActivity();
     $autoresponderItemActivity->type = AutoresponderItemActivity::TYPE_OPEN;
     $autoresponderItemActivity->quantity = 10;
     $autoresponderItemActivity->latestSourceIP = '10.11.12.13';
     $autoresponderItemActivity->autoresponderItem = $autoresponderItems[0];
     $this->assertTrue($autoresponderItemActivity->save());
     //print_r($autoresponderItemActivity->id);
     $autoresponderItemActivities = AutoresponderItemActivity::getAll();
     $this->assertCount(1, $autoresponderItemActivities);
     $autoresponders[0]->delete();
     $autoresponders = Autoresponder::getAll();
     $this->assertEquals(6, count($autoresponders));
     $autoresponderitems = AutoresponderItem::getByProcessedAndAutoresponderId(0, $autoresponderId);
     $this->assertEquals(0, count($autoresponderitems));
     $autoresponderItemActivities = AutoresponderItemActivity::getAll();
     $this->assertCount(0, $autoresponderItemActivities);
 }
 /**
  * @depends testResolveQueryStringFromUrlAndCreateOrUpdateActivityThrowsExceptionForInvalidPersonIdForUrlClickTracking
  * @expectedException NotSupportedException
  */
 public function testResolveQueryStringFromUrlAndCreateOrUpdateActivityThrowsExceptionForDuplicateActivityForUrlClickTracking()
 {
     // setup pre-req data
     $autoresponderItemActivities = AutoresponderItemActivity::getByType(AutoresponderItemActivity::TYPE_CLICK);
     $this->assertNotEmpty($autoresponderItemActivities);
     $autoresponderActivity = new AutoresponderItemActivity();
     $autoresponderActivity->quantity = $autoresponderItemActivities[0]->quantity;
     $autoresponderActivity->type = $autoresponderItemActivities[0]->type;
     $autoresponderActivity->autoresponderItem = $autoresponderItemActivities[0]->autoresponderItem;
     $autoresponderActivity->person = $autoresponderItemActivities[0]->person;
     $autoresponderActivity->emailMessageUrl = $autoresponderItemActivities[0]->emailMessageUrl;
     $this->assertTrue($autoresponderActivity->save());
     $modelId = $autoresponderItemActivities[0]->autoresponderItem->id;
     $modelType = get_class($autoresponderItemActivities[0]->autoresponderItem);
     $personId = $autoresponderItemActivities[0]->person->id;
     // get the modelClassName to use for activity object tests
     $className = 'AutoresponderItemActivityUtil';
     $resolveModelClassNameByModelTypeFunction = static::getProtectedMethod($className, 'resolveModelClassNameByModelType');
     $modelClassName = $resolveModelClassNameByModelTypeFunction->invokeArgs(null, array($modelType));
     $type = $modelClassName::TYPE_CLICK;
     $existingActivities = $modelClassName::getByType($type);
     $this->assertCount(2, $existingActivities);
     // get base query string
     $resolveBaseQueryStringArrayFunction = static::getProtectedMethod('ContentTrackingUtil', 'resolveBaseQueryStringArray');
     $queryStringArray = $resolveBaseQueryStringArrayFunction->invokeArgs(null, array($modelId, $modelType, $personId));
     $this->assertNotEmpty($queryStringArray);
     $this->assertCount(3, $queryStringArray);
     $this->assertArrayHasKey('modelId', $queryStringArray);
     $this->assertArrayHasKey('modelType', $queryStringArray);
     $this->assertArrayHasKey('personId', $queryStringArray);
     $queryStringArray['url'] = 'http://www.zurmo.com';
     // get hash for query string and ensure its what we expect it to be.
     $queryStringArrayHash = StringUtil::resolveHashForQueryStringArray($queryStringArray);
     $queryStringArrayDecoded = $className::resolveQueryStringArrayForHash($queryStringArrayHash);
     $this->assertNotEmpty($queryStringArrayDecoded);
     $this->assertCount(5, $queryStringArrayDecoded);
     $this->assertArrayHasKey('modelId', $queryStringArrayDecoded);
     $this->assertArrayHasKey('modelType', $queryStringArrayDecoded);
     $this->assertArrayHasKey('personId', $queryStringArrayDecoded);
     $this->assertArrayHasKey('url', $queryStringArrayDecoded);
     $this->assertArrayHasKey('type', $queryStringArrayDecoded);
     $this->assertEquals($queryStringArray['modelId'], $queryStringArrayDecoded['modelId']);
     $this->assertEquals($queryStringArray['modelType'], $queryStringArrayDecoded['modelType']);
     $this->assertEquals($queryStringArray['personId'], $queryStringArrayDecoded['personId']);
     $this->assertEquals($queryStringArray['url'], $queryStringArrayDecoded['url']);
     $this->assertNull($queryStringArrayDecoded['type']);
     // do the magic, confirm magic worked by checking return value.
     $_GET['id'] = $queryStringArrayHash;
     $result = $className::resolveQueryStringFromUrlAndCreateOrUpdateActivity();
 }
 /**
  * @depends testCreateAndGetAutoresponderItemById
  */
 public function testDeleteAutoresponderItem()
 {
     $autoresponderItems = AutoresponderItem::getAll();
     $this->assertCount(37, $autoresponderItems);
     $autoresponderItemActivity = new AutoresponderItemActivity();
     $autoresponderItemActivity->type = AutoresponderItemActivity::TYPE_OPEN;
     $autoresponderItemActivity->quantity = 10;
     $autoresponderItemActivity->latestSourceIP = '10.11.12.13';
     $autoresponderItemActivity->autoresponderItem = $autoresponderItems[0];
     $this->assertTrue($autoresponderItemActivity->save());
     $autoresponderItemActivities = AutoresponderItemActivity::getAll();
     $this->assertCount(1, $autoresponderItemActivities);
     $autoresponderItems[0]->delete();
     $autoresponderItems = AutoresponderItem::getAll();
     $this->assertEquals(36, count($autoresponderItems));
     $autoresponderItemActivities = AutoresponderItemActivity::getAll();
     $this->assertCount(0, $autoresponderItemActivities);
 }