def test_constructor_and__str__(self):
        ne = NetworkEdge()
        self.assertEqual(None, ne.get_attributes())
        self.assertEqual(None, ne.get_id())
        self.assertEqual(None, ne.get_source_node_id())
        self.assertEqual(None, ne.get_target_node_id())
        self.assertEqual(None, ne.get_interaction())
        self.assertEqual(None, ne.get_source_node_name())
        self.assertEqual(None, ne.get_target_node_name())

        self.assertEqual('po=None, s=None (None), t=None (None), i=None',
                         str(ne))

        # try with values set
        ne = NetworkEdge(edge_id=1,
                         source_node_id=2,
                         source_node_name='src',
                         target_node_id=3,
                         target_node_name='target',
                         interaction='interaction',
                         attributes=[])
        self.assertEqual([], ne.get_attributes())
        self.assertEqual(1, ne.get_id())
        self.assertEqual(2, ne.get_source_node_id())
        self.assertEqual(3, ne.get_target_node_id())
        self.assertEqual('interaction', ne.get_interaction())
        self.assertEqual('src', ne.get_source_node_name())
        self.assertEqual('target', ne.get_target_node_name())

        self.assertEqual('po=1, s=2 (src), t=3 (target), i=interaction',
                         str(ne))
 def test_remove_identical_attributes_one_attr(self):
     ne = NetworkEdge()
     # test where there is 1 attribute
     attrs = [Attribute(name='foo', value='bar')]
     ne.set_attributes(attrs)
     self.assertEqual([], ne.remove_identical_attributes())
     self.assertEqual(1, len(ne.get_attributes()))
    def test_merge_duplicate_attributes(self):

        # test merge with None for attributes
        ne = NetworkEdge()
        ne.merge_duplicate_attributes()

        # test merge with only 1 attribute
        ne.set_attributes([Attribute(name='foo', value='bar')])
        ne.merge_duplicate_attributes()
        self.assertEqual(1, len(ne.get_attributes()))
        self.assertEqual('foo', ne.get_attributes()[0].get_name())

        # test merge with two identical attributes
        ne.set_attributes([
            Attribute(name='foo', value='bar'),
            Attribute(name='foo', value='bar')
        ])

        ne.merge_duplicate_attributes()
        self.assertEqual(1, len(ne.get_attributes()))
        self.assertEqual('foo', ne.get_attributes()[0].get_name())

        # test merge with two identical and 1 different
        ne.set_attributes([
            Attribute(name='foo', value='bar'),
            Attribute(name='foo', value='bar'),
            Attribute(name='other', value='yo')
        ])

        ne.merge_duplicate_attributes()
        self.assertEqual(2, len(ne.get_attributes()))
        a_names = set(x.get_name() for x in ne.get_attributes())
        self.assertTrue('foo' in a_names)
        self.assertTrue('other' in a_names)
 def test_remove_identical_attributes_four_attrs_two_same(self):
     ne = NetworkEdge()
     # test where there is 1 attribute
     attrs = [
         Attribute(name='foo', value='bar'),
         Attribute(name='blah', value='yo'),
         Attribute(name='blah', value='yo'),
         Attribute(name='ha', value='well')
     ]
     ne.set_attributes(attrs)
     merged = ne.remove_identical_attributes()
     self.assertEqual(1, len(merged))
     self.assertEqual('blah', merged[0].get_name())
     self.assertEqual(3, len(ne.get_attributes()))
    def test_getters_and_setters(self):
        ne = NetworkEdge()
        ne.set_attributes([])
        ne.set_id(1)
        ne.set_source_node_id(2)
        ne.set_target_node_id(3)
        ne.set_source_node_name('src')
        ne.set_target_node_name('target')
        ne.set_interaction('interaction')

        self.assertEqual([], ne.get_attributes())
        self.assertEqual(1, ne.get_id())
        self.assertEqual(2, ne.get_source_node_id())
        self.assertEqual(3, ne.get_target_node_id())
        self.assertEqual('interaction', ne.get_interaction())
        self.assertEqual('src', ne.get_source_node_name())
        self.assertEqual('target', ne.get_target_node_name())
 def test_remove_identical_attributes_five_attrs_two_pair_same(self):
     ne = NetworkEdge()
     # test where there is 5 attribute
     attrs = [
         Attribute(name='x', value='xval'),
         Attribute(name='a', value='bar'),
         Attribute(name='blah', value='yo'),
         Attribute(name='a', value='bar'),
         Attribute(name='blah', value='yo')
     ]
     ne.set_attributes(attrs)
     merged = ne.remove_identical_attributes()
     self.assertEqual(2, len(merged))
     merged_anames = set(x.get_name() for x in merged)
     self.assertTrue('a' in merged_anames)
     self.assertTrue('blah' in merged_anames)
     self.assertEqual(2, len(merged_anames))
     self.assertEqual(3, len(ne.get_attributes()))
    def test_merge(self):

        # test against None
        ne = NetworkEdge()
        ne.merge_edge(None)

        # test common scenario
        ne_one = NetworkEdge(attributes=[
            Attribute(name='directed', value=True, data_type='boolean')
        ])
        ne_two = NetworkEdge(attributes=[
            Attribute(name='directed', value=True, data_type='boolean')
        ])

        ne.merge_edge(ne_two)
        self.assertTrue(1, len(ne_one.get_attributes()))
        self.assertEqual('directed', ne.get_attributes()[0].get_name())
        self.assertEqual(True, ne.get_attributes()[0].get_value())
        self.assertEqual('boolean', ne.get_attributes()[0].get_data_type())

        # test another common scenario
        ne_one = NetworkEdge(attributes=[
            Attribute(
                name='citation', value=['1', '2'], data_type='list_of_string'),
            Attribute(name='directed', value=True, data_type='boolean')
        ])
        ne_two = NetworkEdge(attributes=[
            Attribute(name='citation',
                      value=['3', '1', '2'],
                      data_type='list_of_string'),
            Attribute(name='directed', value=True, data_type='boolean')
        ])

        ne.merge_edge(ne_two)
        self.assertEqual(2, len(ne.get_attributes()))
        a_names = set(x.get_name() for x in ne.get_attributes())
        self.assertTrue('citation' in a_names)
        self.assertTrue('directed' in a_names)

        for x in ne.get_attributes():
            if x.get_name() == 'citation':
                self.assertEqual(3, len(x.get_value()))
                self.assertTrue('1' in x.get_value())
                self.assertTrue('2' in x.get_value())
                self.assertTrue('3' in x.get_value())