/**
  * @depends testSearchByCustomFieldWithMultipleValues
  */
 public function testSearchByMultipleValuesCustomField()
 {
     //Save a sample model.
     $model = new TestCustomFieldsModel();
     $customFieldValue = new CustomFieldValue();
     $customFieldValue->value = 'A';
     $model->multipleIndustries->values->add($customFieldValue);
     $customFieldValue = new CustomFieldValue();
     $customFieldValue->value = 'D';
     $model->multipleSomethings->values->add($customFieldValue);
     $this->assertTrue($model->save());
     //Save a second model with nothing.
     $model = new TestCustomFieldsModel();
     $this->assertTrue($model->save());
     $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');
     $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
     $this->assertEquals($compareWhere, $where);
     //Now test that the joinTablesAdapter has correct information.
     $this->assertEquals(0, $joinTablesAdapter->getFromTableJoinCount());
     $this->assertEquals(1, $joinTablesAdapter->getLeftTableJoinCount());
     $leftTables = $joinTablesAdapter->getLeftTablesAndAliases();
     $this->assertEquals('multiplevaluescustomfield', $leftTables[0]['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 .= "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));
 }