def test_dict(self):
     """ Series of tests to verify that we can use standard dictionaries as 
     holders for (relation, node) pairs in relationships."""
     
     # Create fixtures
     rel1 = WebsiteHostsPage()
     rel2 = WebsiteHostsPage()
     rel3 = WebsiteHostsPage()
     rels = [rel1, rel2, rel3]
     node1 = Page(name='Foo')
     node2 = Page(name='Bar')
     node3 = Page(name='Baz')
     nodes = [node1, node2, node3]
     
     # Define from concatenation
     dic = dict(zip(rels, nodes))
     self.assertIs(node1, dic[rel1])
     self.assertIs(node2, dic[rel2])
     self.assertIs(node3, dic[rel3])
     
     # Define as standard dict
     dic = dict()
     dic[rel1] = node1
     dic[rel2] = node2
     dic[rel3] = node3
     self.assertIs(node1, dic[rel1])
     self.assertIs(node2, dic[rel2])
     self.assertIs(node3, dic[rel3])
     
     # Verify iteration on values
     iterator = dic.itervalues()
     self.assertIs(node1, next(iterator))
     self.assertIs(node2, next(iterator))
     self.assertIs(node3, next(iterator))
     
     # Verify iteration on keys
     iterator = dic.iterkeys()
     self.assertIs(rel1, next(iterator))
     self.assertIs(rel2, next(iterator))
     self.assertIs(rel3, next(iterator))
     
     # Verify iteration on items
     iterator = dic.iteritems()
     tuple_ = next(iterator)
     self.assertIs(tuple_[0], rel1)
     self.assertIs(tuple_[1], node1)
     tuple_ = next(iterator)
     self.assertIs(tuple_[0], rel2)
     self.assertIs(tuple_[1], node2)
     tuple_ = next(iterator)
     self.assertIs(tuple_[0], rel3)
     self.assertIs(tuple_[1], node3)
     
     
Exemple #2
0
    def test___init__(self):

        # Ability to create an entity directly from its model :
        hosts = WebsiteHostsPage(since=123)
        str(hosts)
        self.assertEquals('hosts', hosts.label)
        self.assertEquals(123, hosts.since)
        self.assertEquals(None, hosts._client)
        self.assertIsInstance(hosts, WebsiteHostsPage)
        self.assertIn('since', hosts._properties)
        self.assertEquals({}, hosts._data)
        self.assertTrue(hosts._initialized)

        # Ability to set a property as a simple setter
        hosts.accessible = True
        self.assertEquals(True, hosts.accessible)
        self.assertIn('since', hosts._properties)
        self.assertIn('accessible', hosts._properties)
        self.assertEquals({}, hosts._data)
        self.assertTrue(hosts._initialized)

        # Ability to load a client
        hosts = WebsiteHostsPage('bla')
        self.assertEquals('bla', hosts._client)
Exemple #3
0
 def test___init__(self):
     
     # Ability to create an entity directly from its model :
     hosts = WebsiteHostsPage(since=123)
     str(hosts)
     self.assertEquals('hosts', hosts.label)
     self.assertEquals(123, hosts.since)
     self.assertEquals(None, hosts._client)
     self.assertIsInstance(hosts, WebsiteHostsPage)
     self.assertIn('since', hosts._properties)
     self.assertEquals({}, hosts._data)
     self.assertTrue(hosts._initialized)
     
     # Ability to set a property as a simple setter
     hosts.accessible = True
     self.assertEquals(True, hosts.accessible)
     self.assertIn('since', hosts._properties)
     self.assertIn('accessible', hosts._properties)
     self.assertEquals({}, hosts._data)
     self.assertTrue(hosts._initialized)
     
     # Ability to load a client
     hosts = WebsiteHostsPage('bla')
     self.assertEquals('bla', hosts._client)
Exemple #4
0
    def test_get(self):
        class Website(Node):
            element_type = 'Website'
            pass

        class Page(Node):
            element_type = 'Page'
            title = String()
            url = Url()

            def isHostedBy(self):
                return self._relation('hosts', 'in', unique=True)

            def isHostedBy_add(self, relation, node):
                return self._relation_add('hosts', 'in', relation, node)

            def isHostedBy_del(self, relation):
                return self._relation_del('hosts', 'in', relation)

            def describes(self):
                return self._relation('describes', 'out', unique=False)

            def describes_add(self, relation, node):
                return self._relation_add('describes', 'out', relation, node)

            def describes_del(self, relation):
                return self._relation_del('describes', 'out', relation)

        class Content(Node):
            element_type = 'Content'
            pass

        class PageDescribesContent(Node):
            label = 'describes'
            accessible = Boolean()

        class WebsiteHostsPage(Node):
            label = 'hosts'

        # No relation for now
        page = Page(title='Foo', url='Bar')
        self.assertEquals({}, page.describes())
        self.assertEquals({}, page.isHostedBy())

        # Add a relation
        describe1 = PageDescribesContent(accessible=True)
        describe2 = PageDescribesContent(accessible=False)
        content1 = Content()
        content2 = Content()
        page.describes_add(describe1, content1)
        page.describes_add(describe2, content2)
        describes = page.describes()
        self.assertIn(describe1, describes)
        self.assertIn(describe2, describes)
        self.assertIs(describes[describe1], content1)
        self.assertIs(describes[describe2], content2)

        host1 = WebsiteHostsPage()
        website1 = Website()
        page.isHostedBy_add(host1, website1)
        hosts = page.isHostedBy()
        self.assertIn(host1, hosts)
        self.assertIs(hosts[host1], website1)

        # Add a duplicate
        page.describes_add(describe1, content1)
        describes = page.describes()
        self.assertEquals(2, len(describes))

        page.isHostedBy_add(host1, website1)
        hosts = page.isHostedBy()
        self.assertEquals(1, len(hosts))

        # Delete a relation
        page.describes_del(describe2)
        describes = page.describes()
        self.assertIn(describe1, describes)
        self.assertNotIn(describe2, describes)
        self.assertIs(describes[describe1], content1)
        self.assertEquals(len(describes), 1)

        page.isHostedBy_del(host1)
        hosts = page.isHostedBy()
        self.assertEquals({}, hosts)

        # Delete a non-existing relation
        page.describes_del(host1)
        describes = page.describes()
        self.assertIn(describe1, describes)
        self.assertNotIn(describe2, describes)
        self.assertIs(describes[describe1], content1)
        self.assertEquals(len(describes), 1)

        page.isHostedBy_del(describe1)
        hosts = page.isHostedBy()
        self.assertEquals({}, hosts)
Exemple #5
0
 def test_flush_relation(self):
     
     # Load repository
     page_fixture = PageFixture(self.ogm)
     page_fixture.clean()
     page_fixture.load()
     outV = page_fixture.get('Website1Page1')
     inV = page_fixture._parent['Website'].get('Website1')
     
     # Ability to create an entity directly from its model :
     hosts = WebsiteHostsPage(since=2012)
     str(hosts)
     self.assertEquals('hosts', hosts.label)
     self.assertEquals(2012, hosts.since)
     self.assertEquals(None, hosts._client)
     self.assertIsInstance(hosts, WebsiteHostsPage)
     self.assertIn('since', hosts._properties)
     self.assertEquals({}, hosts._data)
     self.assertTrue(hosts._initialized)
     
     # Ability to set a property as a simple setter
     hosts.accessible = True
     self.assertEquals(True, hosts.accessible)
     self.assertIn('accessible', hosts._properties)
     self.assertEquals({}, hosts._data)
     self.assertTrue(hosts._initialized)
     
     # Flush the Relationship
     self.ogm.add(hosts)
     # self.assertRaises(Exception, self.ogm.flush())
     hosts.set_outV(outV)
     hosts.set_inV(inV)
     self.ogm.flush()
     
     # Verify
     eid = hosts.eid
     self.assertTrue(eid > 0)
     self.assertEquals(outV.eid, hosts._outV)
     self.assertEquals(inV.eid, hosts._inV)
     self.assertEquals('hosts', hosts.label)
     self.assertEquals(2012, hosts.since)
     self.assertEquals(True, hosts.accessible)
     self.assertEquals({u'since': 2012, u'accessible': 1}, hosts._data)
     self.assertTrue(hosts._initialized)
     hosts_titan = self.ogm.repository('WebsiteHostsPage').get(eid)
     hosts_titan = self.ogm.query('g.e(eid)', {'eid':eid})
     hosts_titan = next(hosts_titan)
     self.assertEquals(eid, hosts_titan.eid)
     self.assertEquals('hosts', hosts_titan.label)
     self.assertEquals(2012, hosts_titan.since)
     self.assertEquals(True, hosts_titan.accessible)
     
     # Update
     hosts.accessible = False
     hosts.since = 2013
     self.assertEquals('hosts', hosts.label)
     self.assertEquals(2013, hosts.since)
     self.assertEquals(False, hosts.accessible)
     
     # Re-update
     self.ogm.flush()
     self.assertEquals(eid, hosts.eid)
     self.assertEquals(2013, hosts.since)
     self.assertEquals(False, hosts.accessible)
     
     # Still a bug here, for some reason the edge id changes on the database
     # side...
     # hosts_titan = self.ogm.repository('WebsiteHostsPage').get(eid)
     hosts_titan = self.ogm.query('g.e(eid)', {'eid':hosts.eid})
     return
     hosts_titan = next(hosts_titan)
     self.assertEquals(eid, hosts_titan.eid)
     self.assertEquals('hosts', hosts_titan.label)
     self.assertEquals(2013, hosts_titan.since)
     self.assertEquals(False, hosts_titan.accessible)