/** * @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)); }