public function testSearchFormDynamicAttributes() { $super = User::getByUsername('super'); Yii::app()->user->userModel = $super; $searchAttributes = array('aaaMember' => 'Vomitorio Corp', 'bbb' => array('relatedData' => true, 'ccc' => array('relatedData' => true, 'date__Date' => array('type' => MixedDateTypesSearchFormAttributeMappingRules::TYPE_AFTER, 'firstDate' => '1991-03-04'), 'dateTime__DateTime' => array('type' => MixedDateTypesSearchFormAttributeMappingRules::TYPE_TODAY), 'dateTime2__DateTime' => array('value' => null), 'eee' => array('relatedData' => true, 'eeeMember' => 'eeeMemberValue'), 'iii' => array('relatedData' => true, 'date__Date' => array('type' => MixedDateTypesSearchFormAttributeMappingRules::TYPE_AFTER, 'firstDate' => '1991-03-04'), 'dateTime__DateTime' => array('type' => MixedDateTypesSearchFormAttributeMappingRules::TYPE_TODAY), 'dateTime2__DateTime' => array('value' => null))))); $metadataAdapter = new SearchDataProviderMetadataAdapter(new AAA(false), 1, $searchAttributes); $todayDateTime = new DateTime(null, new DateTimeZone(Yii::app()->timeZoneHelper->getForCurrentUser())); $today = Yii::app()->dateFormatter->format(DatabaseCompatibilityUtil::getDateFormat(), $todayDateTime->getTimeStamp()); $todayPlus7Days = MixedDateTypesSearchFormAttributeMappingRules::calculateNewDateByDaysFromNow(7); $metadata = $metadataAdapter->getAdaptedMetadata(); $compareClauses = array(1 => array('attributeName' => 'aaaMember', 'operatorType' => 'startsWith', 'value' => 'Vomitorio Corp'), 2 => array('attributeName' => 'bbb', 'relatedModelData' => array('attributeName' => 'ccc', 'relatedModelData' => array('attributeName' => 'date', 'operatorType' => 'greaterThanOrEqualTo', 'value' => '1991-03-04'))), 3 => array('attributeName' => 'bbb', 'relatedModelData' => array('attributeName' => 'ccc', 'relatedModelData' => array('attributeName' => 'dateTime', 'operatorType' => 'greaterThanOrEqualTo', 'value' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeBeginningOfDay($today)))), 4 => array('attributeName' => 'bbb', 'relatedModelData' => array('attributeName' => 'ccc', 'relatedModelData' => array('attributeName' => 'dateTime', 'operatorType' => 'lessThanOrEqualTo', 'value' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeEndOfDay($today)))), 5 => array('attributeName' => 'bbb', 'relatedModelData' => array('attributeName' => 'ccc', 'relatedModelData' => array('attributeName' => 'eee', 'relatedModelData' => array('attributeName' => 'eeeMember', 'operatorType' => 'startsWith', 'value' => 'eeeMemberValue')))), 6 => array('attributeName' => 'bbb', 'relatedModelData' => array('attributeName' => 'ccc', 'relatedModelData' => array('attributeName' => 'iii', 'relatedModelData' => array('attributeName' => 'date', 'operatorType' => 'greaterThanOrEqualTo', 'value' => '1991-03-04')))), 7 => array('attributeName' => 'bbb', 'relatedModelData' => array('attributeName' => 'ccc', 'relatedModelData' => array('attributeName' => 'iii', 'relatedModelData' => array('attributeName' => 'dateTime', 'operatorType' => 'greaterThanOrEqualTo', 'value' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeBeginningOfDay($today))))), 8 => array('attributeName' => 'bbb', 'relatedModelData' => array('attributeName' => 'ccc', 'relatedModelData' => array('attributeName' => 'iii', 'relatedModelData' => array('attributeName' => 'dateTime', 'operatorType' => 'lessThanOrEqualTo', 'value' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeEndOfDay($today)))))); $compareStructure = '1 and (2) and (3 and 4) and 5 and (6) and (7 and 8)'; $this->assertEquals($compareClauses, $metadata['clauses']); $this->assertEquals($compareStructure, $metadata['structure']); }
public function testGetMetadataForDynamicDateTimeAttribute() { $super = User::getByUsername('super'); Yii::app()->user->userModel = $super; $searchForm = new ASearchFormTestModel(new MixedRelationsModel()); //Make sure the timeZone is different than UTC for testing. Yii::app()->user->userModel->timeZone = 'America/Chicago'; //TEST when no value present $metadata = SearchFormAttributesToSearchDataProviderMetadataUtil::getMetadata($searchForm, 'dateTime__DateTime', null); $compareData = array(array('dateTime' => array('value' => null))); $this->assertEquals($compareData, $metadata); //Test Date = Today $value = array(); $value['type'] = MixedDateTypesSearchFormAttributeMappingRules::TYPE_TODAY; $metadata = SearchFormAttributesToSearchDataProviderMetadataUtil::getMetadata($searchForm, 'dateTime__DateTime', $value); $todayDateTime = new DateTime(null, new DateTimeZone(Yii::app()->timeZoneHelper->getForCurrentUser())); $today = Yii::app()->dateFormatter->format(DatabaseCompatibilityUtil::getDateFormat(), $todayDateTime->getTimeStamp()); $compareData = array(array('dateTime' => array('value' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeBeginningOfDay($today), 'operatorType' => 'greaterThanOrEqualTo', 'appendStructureAsAnd' => true)), array('dateTime' => array('value' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeEndOfDay($today), 'operatorType' => 'lessThanOrEqualTo', 'appendStructureAsAnd' => true))); $this->assertEquals($compareData, $metadata); //Test Date = Tomorrow $value = array(); $value['type'] = MixedDateTypesSearchFormAttributeMappingRules::TYPE_TOMORROW; $metadata = SearchFormAttributesToSearchDataProviderMetadataUtil::getMetadata($searchForm, 'dateTime__DateTime', $value); $tomorrowDateTime = new DateTime(null, new DateTimeZone(Yii::app()->timeZoneHelper->getForCurrentUser())); $tomorrow = Yii::app()->dateFormatter->format(DatabaseCompatibilityUtil::getDateFormat(), $tomorrowDateTime->getTimeStamp() + 60 * 60 * 24); $compareData = array(array('dateTime' => array('value' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeBeginningOfDay($tomorrow), 'operatorType' => 'greaterThanOrEqualTo', 'appendStructureAsAnd' => true)), array('dateTime' => array('value' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeEndOfDay($tomorrow), 'operatorType' => 'lessThanOrEqualTo', 'appendStructureAsAnd' => true))); $this->assertEquals($compareData, $metadata); //Test Date = Yesterday $value = array(); $value['type'] = MixedDateTypesSearchFormAttributeMappingRules::TYPE_YESTERDAY; $metadata = SearchFormAttributesToSearchDataProviderMetadataUtil::getMetadata($searchForm, 'dateTime__DateTime', $value); $yesterdayDateTime = new DateTime(null, new DateTimeZone(Yii::app()->timeZoneHelper->getForCurrentUser())); $yesterday = Yii::app()->dateFormatter->format(DatabaseCompatibilityUtil::getDateFormat(), $yesterdayDateTime->getTimeStamp() - 60 * 60 * 24); $compareData = array(array('dateTime' => array('value' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeBeginningOfDay($yesterday), 'operatorType' => 'greaterThanOrEqualTo', 'appendStructureAsAnd' => true)), array('dateTime' => array('value' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeEndOfDay($yesterday), 'operatorType' => 'lessThanOrEqualTo', 'appendStructureAsAnd' => true))); $this->assertEquals($compareData, $metadata); //Test Date = After X $value = array(); $value['type'] = MixedDateTypesSearchFormAttributeMappingRules::TYPE_AFTER; $value['firstDate'] = '2011-05-05'; $metadata = SearchFormAttributesToSearchDataProviderMetadataUtil::getMetadata($searchForm, 'dateTime__DateTime', $value); $compareData = array(array('dateTime' => array('value' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeBeginningOfDay('2011-05-05'), 'operatorType' => 'greaterThanOrEqualTo'))); $this->assertEquals($compareData, $metadata); //Test Date = Before X $value = array(); $value['type'] = MixedDateTypesSearchFormAttributeMappingRules::TYPE_BEFORE; $value['firstDate'] = '2011-05-04'; $metadata = SearchFormAttributesToSearchDataProviderMetadataUtil::getMetadata($searchForm, 'dateTime__DateTime', $value); $compareData = array(array('dateTime' => array('value' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeEndOfDay('2011-05-04'), 'operatorType' => 'lessThanOrEqualTo'))); $this->assertEquals($compareData, $metadata); //Test Date next 7 days $value = array(); $value['type'] = MixedDateTypesSearchFormAttributeMappingRules::TYPE_NEXT_7_DAYS; $metadata = SearchFormAttributesToSearchDataProviderMetadataUtil::getMetadata($searchForm, 'dateTime__DateTime', $value); $todayDateTime = new DateTime(null, new DateTimeZone(Yii::app()->timeZoneHelper->getForCurrentUser())); $today = Yii::app()->dateFormatter->format(DatabaseCompatibilityUtil::getDateFormat(), $todayDateTime->getTimeStamp()); $todayPlus7Days = MixedDateTypesSearchFormAttributeMappingRules::calculateNewDateByDaysFromNow(7); $compareData = array(array('dateTime' => array('value' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeBeginningOfDay($today), 'operatorType' => 'greaterThanOrEqualTo', 'appendStructureAsAnd' => true)), array('dateTime' => array('value' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeEndOfDay($todayPlus7Days), 'operatorType' => 'lessThanOrEqualTo', 'appendStructureAsAnd' => true))); $this->assertEquals($compareData, $metadata); //Test Date last 7 days $value = array(); $value['type'] = MixedDateTypesSearchFormAttributeMappingRules::TYPE_LAST_7_DAYS; $metadata = SearchFormAttributesToSearchDataProviderMetadataUtil::getMetadata($searchForm, 'dateTime__DateTime', $value); $todayDateTime = new DateTime(null, new DateTimeZone(Yii::app()->timeZoneHelper->getForCurrentUser())); $today = Yii::app()->dateFormatter->format(DatabaseCompatibilityUtil::getDateFormat(), $todayDateTime->getTimeStamp()); $todayMinus7Days = MixedDateTypesSearchFormAttributeMappingRules::calculateNewDateByDaysFromNow(-7); $compareData = array(array('dateTime' => array('value' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeBeginningOfDay($todayMinus7Days), 'operatorType' => 'greaterThanOrEqualTo', 'appendStructureAsAnd' => true)), array('dateTime' => array('value' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeEndOfDay($today), 'operatorType' => 'lessThanOrEqualTo', 'appendStructureAsAnd' => true))); $this->assertEquals($compareData, $metadata); }
public function testSearchFormDynamicAttributes() { $super = User::getByUsername('super'); Yii::app()->user->userModel = $super; $searchAttributes = array('date__Date' => array('type' => MixedDateTypesSearchFormAttributeMappingRules::TYPE_AFTER, 'firstDate' => '1991-03-04'), 'dateTime__DateTime' => array('type' => MixedDateTypesSearchFormAttributeMappingRules::TYPE_TODAY), 'dateTime2__DateTime' => array('value' => null)); $searchForm = new MixedRelationsModelSearchFormTestModel(new MixedRelationsModel()); $metadataAdapter = new SearchDataProviderMetadataAdapter($searchForm, $super->id, $searchAttributes); $todayDateTime = new DateTime(null, new DateTimeZone(Yii::app()->timeZoneHelper->getForCurrentUser())); $today = Yii::app()->dateFormatter->format(DatabaseCompatibilityUtil::getDateFormat(), $todayDateTime->getTimeStamp()); $todayPlus7Days = MixedDateTypesSearchFormAttributeMappingRules::calculateNewDateByDaysFromNow(7); $metadata = $metadataAdapter->getAdaptedMetadata(); $compareClauses = array(1 => array('attributeName' => 'date', 'operatorType' => 'greaterThanOrEqualTo', 'value' => '1991-03-04'), 2 => array('attributeName' => 'dateTime', 'operatorType' => 'greaterThanOrEqualTo', 'value' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeBeginningOfDay($today)), 3 => array('attributeName' => 'dateTime', 'operatorType' => 'lessThanOrEqualTo', 'value' => DateTimeUtil::convertDateIntoTimeZoneAdjustedDateTimeEndOfDay($today))); $compareStructure = '(1) and (2 and 3)'; $this->assertEquals($compareClauses, $metadata['clauses']); $this->assertEquals($compareStructure, $metadata['structure']); }