Ejemplo n.º 1
0
 /**
  * @depends testCustomField
  */
 public function testSetAttributesWithPostForCustomField()
 {
     $values = array('Automotive', 'Adult Entertainment', 'Financial Services', 'Mercenaries & Armaments');
     $industryFieldData = CustomFieldData::getByName('Industries');
     $industryFieldData->defaultValue = $values[1];
     $industryFieldData->serializedData = serialize($values);
     $this->assertTrue($industryFieldData->save());
     $model = new TestCustomFieldsModel();
     $this->assertEquals($values[1], $model->industry->value);
     $this->assertTrue($model->validate());
     $_FAKEPOST = array('industry' => array('value' => $values[2]));
     $model->setAttributes($_FAKEPOST);
     $this->assertEquals($values[2], $model->industry->value);
 }
 /**
  * @depends testMultipleValuesCustomField
  */
 public function testSetAttributesWithPostForMultipleValuesCustomField()
 {
     $values = array('Automotive', 'Adult Entertainment', 'Financial Services', 'Mercenaries & Armaments');
     $industryFieldData = CustomFieldData::getByName('MultipleIndustries');
     $industryFieldData->defaultValue = $values[1];
     $industryFieldData->serializedData = serialize($values);
     $this->assertTrue($industryFieldData->save());
     $model = new TestCustomFieldsModel();
     $this->assertEquals(1, $model->multipleIndustries->values->count());
     $this->assertEquals($values[1], $model->multipleIndustries->values[0]->value);
     $this->assertTrue($model->validate());
     //Test populating with a single value
     $_FAKEPOST = array('multipleIndustries' => array('values' => array($values[2])));
     $model->setAttributes($_FAKEPOST);
     $this->assertEquals(1, $model->multipleIndustries->values->count());
     $this->assertEquals($values[2], $model->multipleIndustries->values[0]->value);
     $this->assertEquals('Financial Services', strval($model->multipleIndustries));
     //Now test populating more than one value
     $_FAKEPOST = array('multipleIndustries' => array('values' => array($values[1], $values[3])));
     $model->setAttributes($_FAKEPOST);
     $this->assertEquals(2, $model->multipleIndustries->values->count());
     $this->assertEquals($values[1], $model->multipleIndustries->values[0]->value);
     $this->assertEquals($values[3], $model->multipleIndustries->values[1]->value);
     $this->assertEquals('Adult Entertainment, Mercenaries & Armaments', strval($model->multipleIndustries));
     //Test clearing out the values
     $_FAKEPOST = array('multipleIndustries' => array('values' => array()));
     $model->setAttributes($_FAKEPOST);
     $this->assertEquals(0, $model->multipleIndustries->values->count());
     $this->assertEquals('(None)', strval($model->multipleIndustries));
 }
 /**
  * @depends testSearchByMultipleValuesCustomField
  */
 public function testSearchByTwoMultipleValuesCustomField()
 {
     $quote = DatabaseCompatibilityUtil::getQuote();
     //Test where relatioon id is in a joining table.  Many to Many relationship
     $_FAKEPOST['TestCustomFieldsModel'] = array();
     $_FAKEPOST['TestCustomFieldsModel']['multipleIndustries']['values'] = array('A', 'B', 'C');
     $_FAKEPOST['TestCustomFieldsModel']['multipleSomethings']['values'] = array('D', 'E', 'F');
     $metadataAdapter = new SearchDataProviderMetadataAdapter(new TestCustomFieldsModel(false), 1, $_FAKEPOST['TestCustomFieldsModel']);
     $searchAttributeData = $metadataAdapter->getAdaptedMetadata();
     $joinTablesAdapter = new RedBeanModelJoinTablesQueryAdapter('TestCustomFieldsModel');
     $where = RedBeanModelDataProvider::makeWhere('TestCustomFieldsModel', $searchAttributeData, $joinTablesAdapter);
     $compareWhere = "(1 = (select 1 from {$quote}customfieldvalue{$quote} customfieldvalue " . "where {$quote}customfieldvalue{$quote}.{$quote}multiplevaluescustomfield_id{$quote} = " . "{$quote}multiplevaluescustomfield{$quote}.id " . "and {$quote}customfieldvalue{$quote}.{$quote}value{$quote} IN('A','B','C') limit 1))";
     // Not Coding Standard
     $compareWhere .= " and (1 = (select 1 from {$quote}customfieldvalue{$quote} customfieldvalue " . "where {$quote}customfieldvalue{$quote}.{$quote}multiplevaluescustomfield_id{$quote} = " . "{$quote}multiplevaluescustomfield1{$quote}.id " . "and {$quote}customfieldvalue{$quote}.{$quote}value{$quote} IN('D','E','F') limit 1))";
     // Not Coding Standard
     $this->assertEquals($compareWhere, $where);
     //Now test that the joinTablesAdapter has correct information.
     $this->assertEquals(0, $joinTablesAdapter->getFromTableJoinCount());
     $this->assertEquals(2, $joinTablesAdapter->getLeftTableJoinCount());
     $leftTables = $joinTablesAdapter->getLeftTablesAndAliases();
     $this->assertEquals('multiplevaluescustomfield', $leftTables[0]['tableName']);
     $this->assertEquals('multiplevaluescustomfield', $leftTables[1]['tableName']);
     //Now test that the subsetSQL query produced is correct.
     $subsetSql = TestCustomFieldsModel::makeSubsetOrCountSqlQuery('testcustomfieldsmodel', $joinTablesAdapter, 1, 5, $where, null);
     $compareSubsetSql = "select {$quote}testcustomfieldsmodel{$quote}.{$quote}id{$quote} id ";
     $compareSubsetSql .= "from {$quote}testcustomfieldsmodel{$quote} ";
     $compareSubsetSql .= "left join {$quote}multiplevaluescustomfield{$quote} on ";
     $compareSubsetSql .= "{$quote}multiplevaluescustomfield{$quote}.{$quote}id{$quote} = ";
     $compareSubsetSql .= "{$quote}testcustomfieldsmodel{$quote}.{$quote}multipleindustries_multiplevaluescustomfield_id{$quote} ";
     $compareSubsetSql .= "left join {$quote}multiplevaluescustomfield{$quote} multiplevaluescustomfield1 on ";
     $compareSubsetSql .= "{$quote}multiplevaluescustomfield1{$quote}.{$quote}id{$quote} = ";
     $compareSubsetSql .= "{$quote}testcustomfieldsmodel{$quote}.{$quote}multiplesomethings_multiplevaluescustomfield_id{$quote} ";
     $compareSubsetSql .= "where " . $compareWhere . ' ';
     $compareSubsetSql .= 'limit 5 offset 1';
     $this->assertEquals($compareSubsetSql, $subsetSql);
     //Make sure the sql runs properly.
     $dataProvider = new RedBeanModelDataProvider('TestCustomFieldsModel', null, false, $searchAttributeData);
     $data = $dataProvider->getData();
     $this->assertEquals(1, count($data));
 }