],
[
// Yes, the relationship mapping really does use url whereas non relationship uses website because... legacy
- ['name' => 'Url', 'contact_type' => 'Individual', 'column_number' => 0, 'website_type_id', 'relationship_type_id' => 1, 'relationship_direction' => 'a_b'],
- "document.forms.MapField['mapper[0][2]'].style.display = 'none';
-document.forms.MapField['mapper[0][3]'].style.display = 'none';\n",
- ['mapper[0]' => ['1_a_b', 'url', 0, NULL]],
+ ['name' => 'Url', 'contact_type' => 'Individual', 'column_number' => 0, 'website_type_id' => 1, 'relationship_type_id' => 1, 'relationship_direction' => 'a_b'],
+ "document.forms.MapField['mapper[0][3]'].style.display = 'none';\n",
+ ['mapper[0]' => ['1_a_b', 'url', 1]],
],
+ [
+ ['name' => 'Phone', 'contact_type' => 'Individual', 'column_number' => 0, 'phone_type_id' => 1, 'relationship_type_id' => 1, 'relationship_direction' => 'b_a'],
+ '',
+ ['mapper[0]' => ['1_b_a', 'phone', 'Primary', 1]],
+ ],
+ ];
+ }
+
+ /**
+ * Test the MapField function getting defaults from column names.
+ *
+ * @dataProvider getHeaderMatchDataProvider
+ *
+ * @throws \CiviCRM_API3_Exception
+ * @throws \CRM_Core_Exception
+ */
+ public function testDefaultFromColumnNames($columnHeader, $mapsTo) {
+ $this->setUpMapFieldForm();
+ $this->assertEquals($mapsTo, $this->form->defaultFromColumnName($columnHeader, $this->getHeaderPatterns()));
+ }
+
+ /**
+ * Get data to use for default from column names.
+ *
+ * @return array
+ */
+ public function getHeaderMatchDataProvider() {
+ return [
+ ['Contact Id', 'id'],
+ ['Contact ID', 'id'],
+ ['contact id', 'id'],
+ ['contact_id', 'id'],
+ // Yes, really... id wins the day here.
+ ['external id', 'id'],
+ ['external ident', 'external_identifier'],
+ ['external idg', 'external_identifier'],
];
}