|  | @@ -6,15 +6,14 @@ use StatonLab\TripalTestSuite\TripalTestCase;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  class sbo__relationship_widgetTest extends TripalTestCase {
 | 
	
		
			
				|  |  |    // Uncomment to auto start and rollback db transactions per test method.
 | 
	
		
			
				|  |  | -  // use DBTransaction;
 | 
	
		
			
				|  |  | +  use DBTransaction;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    /**
 | 
	
		
			
				|  |  |     * Create a fake sbo__relationship_widget field?
 | 
	
		
			
				|  |  |     */
 | 
	
		
			
				|  |  |    private function initializeWidgetClass($bundle_name, $field_name, $widget_name, $entity_id) {
 | 
	
		
			
				|  |  |      $vars = [];
 | 
	
		
			
				|  |  | -    $vars['bundle'] = $vars['field_info'] = $vars['instance_info'] = NULL;
 | 
	
		
			
				|  |  | -    $vars['widget_class'] = $vars['entity'] = NULL;
 | 
	
		
			
				|  |  | +    $vars['widget_class'] = $vars['bundle'] = $vars['entity'] = NULL;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      // First include the appropriate class.
 | 
	
		
			
				|  |  |      $widget_class_path = DRUPAL_ROOT . '/' . drupal_get_path('module', 'tripal_chado')
 | 
	
	
		
			
				|  | @@ -27,7 +26,7 @@ class sbo__relationship_widgetTest extends TripalTestCase {
 | 
	
		
			
				|  |  |        $vars['instance_info'] = field_info_instance('TripalEntity', $field_name, $bundle_name);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        // Create an instance of the widget class.
 | 
	
		
			
				|  |  | -      $vars['widget_class'] = new \sbo__relationship_widget($this->field_info, $this->instance_info);
 | 
	
		
			
				|  |  | +      $vars['widget_class'] = new \sbo__relationship_widget($vars['field_info'], $vars['instance_info']);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        // load an entity to pretend the widget is modifying.
 | 
	
		
			
				|  |  |        $vars['entity'] = entity_load('TripalEntity', [$entity_id]);
 | 
	
	
		
			
				|  | @@ -36,13 +35,56 @@ class sbo__relationship_widgetTest extends TripalTestCase {
 | 
	
		
			
				|  |  |      return $vars;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +  /**
 | 
	
		
			
				|  |  | +   * Data Provider: provides entities matching important test cases.
 | 
	
		
			
				|  |  | +   *
 | 
	
		
			
				|  |  | +   * Specifically, we will cover three relationship tables, which represent
 | 
	
		
			
				|  |  | +   * the diversity in the chado schema v1.3:
 | 
	
		
			
				|  |  | +   *  organism_relationship: subject_id, type_id, object_id,
 | 
	
		
			
				|  |  | +   *  stock_relationship: subject_id, type_id, object_id, value, rank,
 | 
	
		
			
				|  |  | +   *  project_relationship: project_subject_id, type_id, project_object_id, rank
 | 
	
		
			
				|  |  | +   *
 | 
	
		
			
				|  |  | +   * @returns
 | 
	
		
			
				|  |  | +   *   Returns an array where each item to be tested has the paramaters 
 | 
	
		
			
				|  |  | +   *   needed for initializeWidgetClass(). Specfically, $bundle_name, 
 | 
	
		
			
				|  |  | +   *   $field_name, $widget_name, $entity_id.
 | 
	
		
			
				|  |  | +   */
 | 
	
		
			
				|  |  | +  public function provideEntities() {
 | 
	
		
			
				|  |  | +     $data = [];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +     foreach (['organism', 'stock', 'project'] as $base_table) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +       $field_name = 'sbo__relationship';
 | 
	
		
			
				|  |  | +       $widget_name = 'sbo__relationship_widget';
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +       // find a bundle which stores it's data in the given base table.
 | 
	
		
			
				|  |  | +       // This will work on Travis since Tripal creates matching bundles by default.
 | 
	
		
			
				|  |  | +       // @todo ideally we would create a fake bundle here.
 | 
	
		
			
				|  |  | +       $bundle_id = db_query('SELECT bundle_id FROM chado_bundle WHERE data_table=:table LIMIT 1',
 | 
	
		
			
				|  |  | +         array(':table' => $base_table))->fetchField();
 | 
	
		
			
				|  |  | +       $bundle_name = 'bio_data_'.$bundle_id;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +       // Find an entity from the above bundle.
 | 
	
		
			
				|  |  | +       // @todo find a way to create a fake entity for use here.
 | 
	
		
			
				|  |  | +       $entity_id = db_query('SELECT id FROM tripal_entity WHERE bundle=:bundle LIMIT 1',
 | 
	
		
			
				|  |  | +         array(':bundle' => $bundle_name))->fetchField();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +       $data[] = [$bundle_name, $field_name, $widget_name, $entity_id];
 | 
	
		
			
				|  |  | +     }
 | 
	
		
			
				|  |  | +     return $data;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |    /**
 | 
	
		
			
				|  |  |     * Test that we can initialize the widget properly.
 | 
	
		
			
				|  |  | +   *
 | 
	
		
			
				|  |  | +   * @dataProvider provideEntities()
 | 
	
		
			
				|  |  | +   *
 | 
	
		
			
				|  |  | +   * @group lacey
 | 
	
		
			
				|  |  |     */
 | 
	
		
			
				|  |  | -  public function testWidgetClassInitialization() {
 | 
	
		
			
				|  |  | +  public function testWidgetClassInitialization($bundle_name, $field_name, $widget_name, $entity_id) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      // Initialize our variables.
 | 
	
		
			
				|  |  | -    $vars = $this->initializeWidgetClass('bio_data_1', 'sbo__relationship', 'sbo__relationship_widget', 8);
 | 
	
		
			
				|  |  | +    $vars = $this->initializeWidgetClass($bundle_name, $field_name, $widget_name, $entity_id);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      // Check we have the variables we initialized.
 | 
	
		
			
				|  |  |      $this->assertNotEmpty($vars['bundle'], "Could not load the bundle.");
 | 
	
	
		
			
				|  | @@ -56,14 +98,12 @@ class sbo__relationship_widgetTest extends TripalTestCase {
 | 
	
		
			
				|  |  |    /**
 | 
	
		
			
				|  |  |     * Test the widget Form.
 | 
	
		
			
				|  |  |     *
 | 
	
		
			
				|  |  | +   * @dataProvider provideEntities()
 | 
	
		
			
				|  |  | +   *
 | 
	
		
			
				|  |  |     * @group lacey
 | 
	
		
			
				|  |  |     */
 | 
	
		
			
				|  |  | -  public function testWidgetForm() {
 | 
	
		
			
				|  |  | +  public function testWidgetForm($bundle_name, $field_name, $widget_name, $entity_id) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    $field_name = 'sbo__relationship';
 | 
	
		
			
				|  |  | -    $bundle_name = 'bio_data_1';
 | 
	
		
			
				|  |  | -    $widget_name = 'sbo__relationship_widget';
 | 
	
		
			
				|  |  | -    $entity_id = 8;
 | 
	
		
			
				|  |  |      $vars = $this->initializeWidgetClass($bundle_name, $field_name, $widget_name, $entity_id);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      // Stub out a fake $widget object.
 |