public function testGetValidOperatorTypesForAllAttributeTypes()
 {
     $model = new TestOperatorTypeModel();
     $this->assertEquals('equals', ModelAttributeToOperatorTypeUtil::getOperatorType($model, 'integerStandard'));
     $this->assertEquals('equals', ModelAttributeToOperatorTypeUtil::getOperatorType($model, 'dateStandard'));
     $this->assertEquals('equals', ModelAttributeToOperatorTypeUtil::getOperatorType($model, 'dateTimeStandard'));
     $this->assertEquals('equals', ModelAttributeToOperatorTypeUtil::getOperatorType($model, 'floatStandard'));
     $this->assertEquals('equals', ModelAttributeToOperatorTypeUtil::getOperatorType($model, 'timeStandard'));
     $this->assertEquals('startsWith', ModelAttributeToOperatorTypeUtil::getOperatorType($model, 'emailStandard'));
     $this->assertEquals('equals', ModelAttributeToOperatorTypeUtil::getOperatorType($model, 'booleanStandard'));
     $this->assertEquals('contains', ModelAttributeToOperatorTypeUtil::getOperatorType($model, 'urlStandard'));
     //Test all custom fields
     $this->assertEquals('equals', ModelAttributeToOperatorTypeUtil::getOperatorType($model, 'checkBoxCstm'));
     $this->assertEquals('equals', ModelAttributeToOperatorTypeUtil::getOperatorType($model, 'currencyCstm'));
     $this->assertEquals('equals', ModelAttributeToOperatorTypeUtil::getOperatorType($model, 'dateCstm'));
     $this->assertEquals('equals', ModelAttributeToOperatorTypeUtil::getOperatorType($model, 'dateTimeCstm'));
     $this->assertEquals('equals', ModelAttributeToOperatorTypeUtil::getOperatorType($model, 'decimalCstm'));
     $this->assertEquals('equals', ModelAttributeToOperatorTypeUtil::getOperatorType($model, 'dropDownCstm'));
     $this->assertEquals('equals', ModelAttributeToOperatorTypeUtil::getOperatorType($model, 'integerCstm'));
     $this->assertEquals('startsWith', ModelAttributeToOperatorTypeUtil::getOperatorType($model, 'phoneCstm'));
     $this->assertEquals('equals', ModelAttributeToOperatorTypeUtil::getOperatorType($model, 'radioCstm'));
     $this->assertEquals('startsWith', ModelAttributeToOperatorTypeUtil::getOperatorType($model, 'textCstm'));
     $this->assertEquals('contains', ModelAttributeToOperatorTypeUtil::getOperatorType($model, 'textAreaCstm'));
     $this->assertEquals('contains', ModelAttributeToOperatorTypeUtil::getOperatorType($model, 'urlCstm'));
 }
 /**
  * Method for populating clauses for concated attributes.  The first concated attribute $attributeNames[0]
  * will be used to determine the operator types.
  */
 protected function populateClausesAndStructureForConcatedAttributes($model, $attributeNames, $value, &$adaptedMetadataClauseBasePart, &$clauseCount, &$structure, $operatorType = null)
 {
     assert('is_array($attributeNames) && count($attributeNames) == 2');
     assert('is_array($adaptedMetadataClauseBasePart)');
     assert('is_int($clauseCount)');
     assert('$structure == null || is_string($structure)');
     if ($value !== null) {
         if ($operatorType == null) {
             $operatorType = ModelAttributeToOperatorTypeUtil::getOperatorType($model, $attributeNames[0]);
             $operatorTypeCompare = ModelAttributeToOperatorTypeUtil::getOperatorType($model, $attributeNames[1]);
             if ($operatorType != $operatorTypeCompare) {
                 throw new NotSupportedException();
             }
         }
         $value = ModelAttributeToCastTypeUtil::resolveValueForCast($model, $attributeNames[0], $value);
         $adaptedMetadataClauseBasePart = array('concatedAttributeNames' => $attributeNames, 'operatorType' => $operatorType, 'value' => $value);
         if ($this->appendStructureAsAnd) {
             static::appendClauseAsAndToStructureString($structure, $clauseCount);
         } else {
             static::appendClauseAsOrToStructureString($structure, $clauseCount);
         }
         $clauseCount++;
     }
 }