class BugTestCase(LiveServerTestCase): """ A set of tests to check the existence of bugs. """ def setUp(self): self.browser = Browser(firefox_path=os.getenv('FIREFOX_PATH', None)) socket.setdefaulttimeout(30) signup(self, 'bob', '*****@*****.**', 'bob_secret') signin(self, 'bob', 'bob_secret') def tearDown(self): logout(self) self.browser.quit() Graph.objects.get(name="Bob's graph").destroy() @classmethod def tearDownClass(cls): sleep(10) # It needs some time for close the LiverServerTestCase super(BugTestCase, cls).tearDownClass() def test_node_rel_count_one(self): ''' This test show that reflexive outgoing `relationships` don't count if there are more relationships. ''' real_nodes = 0 real_rels = 0 create_graph(self) create_schema(self) # Creating a nodetype: "First" self.browser.find_link_by_href( '/schemas/bobs-graph/types/create/').first.click() self.browser.find_by_name('name').first.fill("First") self.browser.find_by_name('properties-0-key').first.fill('Name') self.browser.find_by_name('properties-0-display').first.check() self.browser.find_by_value('Save Type').first.click() # Creating another nodetype: "Second" self.browser.find_link_by_href( '/schemas/bobs-graph/types/create/').first.click() self.browser.find_by_name('name').first.fill("Second") self.browser.find_by_name('properties-0-key').first.fill('Name') self.browser.find_by_name('properties-0-display').first.check() self.browser.find_by_value('Save Type').first.click() self.browser.find_by_id('dataMenu').first.click() # Creating an allowed relationship: "First -> First" self.browser.find_by_id('allowedRelations').first.click() self.browser.select('source', '1') self.browser.find_by_name('name').fill('FirstToFirst') self.browser.select('target', '1') self.browser.find_by_value('Save Type').first.click() # Creating an allowed relationship: "First -> Second" self.browser.find_by_id('allowedRelations').first.click() self.browser.select('source', '1') self.browser.find_by_name('name').fill('FirstToSecond') self.browser.select('target', '2') self.browser.find_by_value('Save Type').first.click() # Creating a node of the "First" type self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[0].click() self.browser.find_by_name('Name').first.fill("First1") self.browser.find_by_xpath("//span[@class='buttonLinkOption buttonLinkLeft']/input").first.click() real_nodes += 1 # Creating another node of the "First" type self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[0].click() self.browser.find_by_name('Name').first.fill("First2") self.browser.find_by_xpath("//span[@class='buttonLinkOption buttonLinkLeft']/input").first.click() real_nodes += 1 # Creating a node of the "Second" type self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[1].click() self.browser.find_by_name('Name').first.fill("Second1") self.browser.find_by_xpath("//span[@class='buttonLinkOption buttonLinkLeft']/input").first.click() real_nodes += 1 # Creating another node of the "Second" type self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[1].click() self.browser.find_by_name('Name').first.fill("Second2") self.browser.find_by_xpath("//span[@class='buttonLinkOption buttonLinkLeft']/input").first.click() real_nodes += 1 # Creating another node of the "Second" type self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[1].click() self.browser.find_by_name('Name').first.fill("Second3") self.browser.find_by_xpath("//span[@class='buttonLinkOption buttonLinkLeft']/input").first.click() real_nodes += 1 # Editing the "First1" node self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption list']")[0].click() self.browser.find_by_xpath("//td[@class='dataList']/a[@class='edit']").first.click() # Adding more "FirstToSecond" relationship forms self.browser.find_by_xpath("//a[@class='addButton inFormsets']")[1].click() self.browser.find_by_xpath("//a[@class='addButton inFormsets']")[1].click() # Adding the relationships self.browser.find_by_xpath("//li[@class='token-input-input-token']/input")[0].fill('First2') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath("//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b").first.click() real_rels += 1 self.browser.find_by_xpath("//li[@class='token-input-input-token']/input")[1].fill('Second1') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath("//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b").first.click() real_rels += 1 self.browser.find_by_xpath("//li[@class='token-input-input-token']/input")[2].fill('Second2') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath("//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b").first.click() real_rels += 1 self.browser.find_by_xpath("//li[@class='token-input-input-token']/input")[3].fill('Second3') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath("//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b").first.click() real_rels += 1 # Saving "First1" self.browser.find_by_value('Save First').first.click() # Checking the counts self.browser.find_link_by_href('/graphs/bobs-graph/').first.click() nodes = self.browser.find_by_xpath("//div[@class='flags-block']/span[@class='graph-nodes']").first.value rels = self.browser.find_by_xpath("//div[@class='flags-block']/span[@class='graph-relationships']").first.value spin_assert(lambda: self.assertEqual( str(real_nodes) + " nodes", nodes)) spin_assert(lambda: self.assertEqual( str(real_rels) + " relationships", rels)) def test_node_rel_count_two(self): ''' This test shows that new `nodes` with relationships don't count. ''' real_nodes = 0 real_rels = 0 create_graph(self) create_schema(self) # Creating a nodetype: "First" self.browser.find_link_by_href( '/schemas/bobs-graph/types/create/').first.click() self.browser.find_by_name('name').first.fill("First") self.browser.find_by_name('properties-0-key').first.fill('Name') self.browser.find_by_name('properties-0-display').first.check() self.browser.find_by_value('Save Type').first.click() # Creating another nodetype: "Second" self.browser.find_link_by_href( '/schemas/bobs-graph/types/create/').first.click() self.browser.find_by_name('name').first.fill("Second") self.browser.find_by_name('properties-0-key').first.fill('Name') self.browser.find_by_name('properties-0-display').first.check() self.browser.find_by_value('Save Type').first.click() self.browser.find_by_id('dataMenu').first.click() # Creating an allowed relationship: "First -> First" self.browser.find_by_id('allowedRelations').first.click() self.browser.select('source', '1') self.browser.find_by_name('name').fill('FirstToFirst') self.browser.select('target', '1') self.browser.find_by_value('Save Type').first.click() # Creating an allowed relationship: "First -> Second" self.browser.find_by_id('allowedRelations').first.click() self.browser.select('source', '1') self.browser.find_by_name('name').fill('FirstToSecond') self.browser.select('target', '2') self.browser.find_by_value('Save Type').first.click() # Creating a node of the "First" type self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[0].click() self.browser.find_by_name('Name').first.fill("First1") self.browser.find_by_xpath("//span[@class='buttonLinkOption buttonLinkLeft']/input").first.click() real_nodes += 1 # Creating another node of the "First" type self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[0].click() self.browser.find_by_name('Name').first.fill("First2") self.browser.find_by_xpath("//span[@class='buttonLinkOption buttonLinkLeft']/input").first.click() real_nodes += 1 # Creating a node of the "Second" type self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[1].click() self.browser.find_by_name('Name').first.fill("Second1") self.browser.find_by_xpath("//span[@class='buttonLinkOption buttonLinkLeft']/input").first.click() real_nodes += 1 # Creating another node of the "Second" type self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[1].click() self.browser.find_by_name('Name').first.fill("Second2") self.browser.find_by_xpath("//span[@class='buttonLinkOption buttonLinkLeft']/input").first.click() real_nodes += 1 # Creating another node of the "Second" type self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[1].click() self.browser.find_by_name('Name').first.fill("Second3") self.browser.find_by_xpath("//span[@class='buttonLinkOption buttonLinkLeft']/input").first.click() real_nodes += 1 # Editing the "First1" node self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption list']")[0].click() self.browser.find_by_xpath("//td[@class='dataList']/a[@class='edit']").first.click() # Adding more "FirstToSecond" relationship forms self.browser.find_by_xpath("//a[@class='addButton inFormsets']")[1].click() self.browser.find_by_xpath("//a[@class='addButton inFormsets']")[1].click() # Adding the relationships self.browser.find_by_xpath("//li[@class='token-input-input-token']/input")[0].fill('First2') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath("//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b").first.click() real_rels += 1 self.browser.find_by_xpath("//li[@class='token-input-input-token']/input")[1].fill('Second1') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath("//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b").first.click() real_rels += 1 self.browser.find_by_xpath("//li[@class='token-input-input-token']/input")[2].fill('Second2') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath("//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b").first.click() real_rels += 1 self.browser.find_by_xpath("//li[@class='token-input-input-token']/input")[3].fill('Second3') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath("//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b").first.click() real_rels += 1 # Saving "First1" self.browser.find_by_value('Save First').first.click() # Creating another node of the "First" type with relationships self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[0].click() self.browser.find_by_name('Name').first.fill("First3") # Adding more "FirstToSecond" relationship forms self.browser.find_by_xpath("//a[@class='addButton inFormsets']")[1].click() self.browser.find_by_xpath("//a[@class='addButton inFormsets']")[1].click() # Adding the relationships self.browser.find_by_xpath("//li[@class='token-input-input-token']/input")[0].fill('First1') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath("//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b").first.click() real_rels += 1 self.browser.find_by_xpath("//li[@class='token-input-input-token']/input")[1].fill('Second1') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath("//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b").first.click() real_rels += 1 self.browser.find_by_xpath("//li[@class='token-input-input-token']/input")[2].fill('Second2') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath("//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b").first.click() real_rels += 1 self.browser.find_by_xpath("//li[@class='token-input-input-token']/input")[3].fill('Second3') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath("//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b").first.click() real_rels += 1 # Saving "First3" self.browser.find_by_xpath("//span[@class='buttonLinkOption buttonLinkLeft']/input").first.click() real_nodes += 1 # Checking the counts self.browser.find_link_by_href('/graphs/bobs-graph/').first.click() nodes = self.browser.find_by_xpath("//div[@class='flags-block']/span[@class='graph-nodes']").first.value rels = self.browser.find_by_xpath("//div[@class='flags-block']/span[@class='graph-relationships']").first.value spin_assert(lambda: self.assertEqual( str(real_nodes) + " nodes", nodes)) spin_assert(lambda: self.assertEqual( str(real_rels) + " relationships", rels)) def test_node_rel_count_three(self): ''' This test show that reflexive outgoing `relationships` DO count if there are NO more relationships. ''' real_nodes = 0 real_rels = 0 create_graph(self) create_schema(self) # Creating a nodetype: "First" self.browser.find_link_by_href( '/schemas/bobs-graph/types/create/').first.click() self.browser.find_by_name('name').first.fill("First") self.browser.find_by_name('properties-0-key').first.fill('Name') self.browser.find_by_name('properties-0-display').first.check() self.browser.find_by_value('Save Type').first.click() # Creating another nodetype: "Second" self.browser.find_link_by_href( '/schemas/bobs-graph/types/create/').first.click() self.browser.find_by_name('name').first.fill("Second") self.browser.find_by_name('properties-0-key').first.fill('Name') self.browser.find_by_name('properties-0-display').first.check() self.browser.find_by_value('Save Type').first.click() self.browser.find_by_id('dataMenu').first.click() # Creating an allowed relationship: "First -> First" self.browser.find_by_id('allowedRelations').first.click() self.browser.select('source', '1') self.browser.find_by_name('name').fill('FirstToFirst') self.browser.select('target', '1') self.browser.find_by_value('Save Type').first.click() # Creating an allowed relationship: "First -> Second" self.browser.find_by_id('allowedRelations').first.click() self.browser.select('source', '1') self.browser.find_by_name('name').fill('FirstToSecond') self.browser.select('target', '2') self.browser.find_by_value('Save Type').first.click() # Creating a node of the "First" type self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[0].click() self.browser.find_by_name('Name').first.fill("First1") self.browser.find_by_xpath("//span[@class='buttonLinkOption buttonLinkLeft']/input").first.click() real_nodes += 1 # Creating another node of the "First" type self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[0].click() self.browser.find_by_name('Name').first.fill("First2") self.browser.find_by_xpath("//span[@class='buttonLinkOption buttonLinkLeft']/input").first.click() real_nodes += 1 # Creating a node of the "Second" type self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[1].click() self.browser.find_by_name('Name').first.fill("Second1") self.browser.find_by_xpath("//span[@class='buttonLinkOption buttonLinkLeft']/input").first.click() real_nodes += 1 # Creating another node of the "Second" type self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[1].click() self.browser.find_by_name('Name').first.fill("Second2") self.browser.find_by_xpath("//span[@class='buttonLinkOption buttonLinkLeft']/input").first.click() real_nodes += 1 # Creating another node of the "Second" type self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[1].click() self.browser.find_by_name('Name').first.fill("Second3") self.browser.find_by_xpath("//span[@class='buttonLinkOption buttonLinkLeft']/input").first.click() real_nodes += 1 # Editing the "First1" node self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption list']")[0].click() self.browser.find_by_xpath("//td[@class='dataList']/a[@class='edit']").first.click() # Adding more "FirstToSecond" relationship forms self.browser.find_by_xpath("//a[@class='addButton inFormsets']")[1].click() self.browser.find_by_xpath("//a[@class='addButton inFormsets']")[1].click() # Adding the relationships self.browser.find_by_xpath("//li[@class='token-input-input-token']/input")[0].fill('First2') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath("//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b").first.click() real_rels += 1 self.browser.find_by_xpath("//li[@class='token-input-input-token']/input")[1].fill('Second1') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath("//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b").first.click() real_rels += 1 self.browser.find_by_xpath("//li[@class='token-input-input-token']/input")[2].fill('Second2') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath("//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b").first.click() real_rels += 1 self.browser.find_by_xpath("//li[@class='token-input-input-token']/input")[3].fill('Second3') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath("//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b").first.click() real_rels += 1 # Saving "First1" self.browser.find_by_value('Save First').first.click() # Creating another node of the "First" type with relationships self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[0].click() self.browser.find_by_name('Name').first.fill("First3") # Adding more "FirstToFirst" outgoing relationship forms self.browser.find_by_xpath("//a[@class='addButton inFormsets']")[0].click() # Adding the relationships self.browser.find_by_xpath("//li[@class='token-input-input-token']/input")[0].fill('First1') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath("//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b").first.click() real_rels += 1 self.browser.find_by_xpath("//li[@class='token-input-input-token']/input")[1].fill('First2') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath("//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b").first.click() real_rels += 1 # Saving "First3" self.browser.find_by_xpath("//span[@class='buttonLinkOption buttonLinkLeft']/input").first.click() real_nodes += 1 # Checking the counts self.browser.find_link_by_href('/graphs/bobs-graph/').first.click() nodes = self.browser.find_by_xpath("//div[@class='flags-block']/span[@class='graph-nodes']").first.value rels = self.browser.find_by_xpath("//div[@class='flags-block']/span[@class='graph-relationships']").first.value spin_assert(lambda: self.assertEqual( str(real_nodes) + " nodes", nodes)) spin_assert(lambda: self.assertEqual( str(real_rels) + " relationships", rels)) def test_node_rel_count_four(self): ''' This test show that when there are reflexive incoming `relationships` only count those. ''' real_nodes = 0 real_rels = 0 create_graph(self) create_schema(self) # Creating a nodetype: "First" self.browser.find_link_by_href( '/schemas/bobs-graph/types/create/').first.click() self.browser.find_by_name('name').first.fill("First") self.browser.find_by_name('properties-0-key').first.fill('Name') self.browser.find_by_name('properties-0-display').first.check() self.browser.find_by_value('Save Type').first.click() # Creating another nodetype: "Second" self.browser.find_link_by_href( '/schemas/bobs-graph/types/create/').first.click() self.browser.find_by_name('name').first.fill("Second") self.browser.find_by_name('properties-0-key').first.fill('Name') self.browser.find_by_name('properties-0-display').first.check() self.browser.find_by_value('Save Type').first.click() self.browser.find_by_id('dataMenu').first.click() # Creating an allowed relationship: "First -> First" self.browser.find_by_id('allowedRelations').first.click() self.browser.select('source', '1') self.browser.find_by_name('name').fill('FirstToFirst') self.browser.select('target', '1') self.browser.find_by_value('Save Type').first.click() # Creating an allowed relationship: "First -> Second" self.browser.find_by_id('allowedRelations').first.click() self.browser.select('source', '1') self.browser.find_by_name('name').fill('FirstToSecond') self.browser.select('target', '2') self.browser.find_by_value('Save Type').first.click() # Creating a node of the "First" type self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[0].click() self.browser.find_by_name('Name').first.fill("First1") self.browser.find_by_xpath("//span[@class='buttonLinkOption buttonLinkLeft']/input").first.click() real_nodes += 1 # Creating another node of the "First" type self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[0].click() self.browser.find_by_name('Name').first.fill("First2") self.browser.find_by_xpath("//span[@class='buttonLinkOption buttonLinkLeft']/input").first.click() real_nodes += 1 # Creating a node of the "Second" type self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[1].click() self.browser.find_by_name('Name').first.fill("Second1") self.browser.find_by_xpath("//span[@class='buttonLinkOption buttonLinkLeft']/input").first.click() real_nodes += 1 # Creating another node of the "Second" type self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[1].click() self.browser.find_by_name('Name').first.fill("Second2") self.browser.find_by_xpath("//span[@class='buttonLinkOption buttonLinkLeft']/input").first.click() real_nodes += 1 # Creating another node of the "Second" type self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[1].click() self.browser.find_by_name('Name').first.fill("Second3") self.browser.find_by_xpath("//span[@class='buttonLinkOption buttonLinkLeft']/input").first.click() real_nodes += 1 # Editing the "First1" node self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption list']")[0].click() self.browser.find_by_xpath("//td[@class='dataList']/a[@class='edit']").first.click() # Adding more "FirstToSecond" relationship forms self.browser.find_by_xpath("//a[@class='addButton inFormsets']")[1].click() self.browser.find_by_xpath("//a[@class='addButton inFormsets']")[1].click() # Adding the relationships self.browser.find_by_xpath("//li[@class='token-input-input-token']/input")[0].fill('First2') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath("//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b").first.click() real_rels += 1 self.browser.find_by_xpath("//li[@class='token-input-input-token']/input")[1].fill('Second1') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath("//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b").first.click() real_rels += 1 self.browser.find_by_xpath("//li[@class='token-input-input-token']/input")[2].fill('Second2') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath("//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b").first.click() real_rels += 1 self.browser.find_by_xpath("//li[@class='token-input-input-token']/input")[3].fill('Second3') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath("//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b").first.click() real_rels += 1 # Saving "First1" self.browser.find_by_value('Save First').first.click() # Creating another node of the "First" type with relationships self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[0].click() self.browser.find_by_name('Name').first.fill("First3") # Adding more "FirstToSecond" relationship forms self.browser.find_by_xpath("//a[@class='addButton inFormsets']")[1].click() self.browser.find_by_xpath("//a[@class='addButton inFormsets']")[1].click() self.browser.find_by_xpath("//a[@class='addButton inFormsets']")[2].click() # Adding the relationships self.browser.find_by_xpath("//li[@class='token-input-input-token']/input")[1].fill('Second1') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath("//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b").first.click() real_rels += 1 self.browser.find_by_xpath("//li[@class='token-input-input-token']/input")[2].fill('Second2') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath("//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b").first.click() real_rels += 1 self.browser.find_by_xpath("//li[@class='token-input-input-token']/input")[3].fill('Second3') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath("//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b").first.click() real_rels += 1 self.browser.find_by_xpath("//li[@class='token-input-input-token']/input")[4].fill('First1') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath("//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b").first.click() real_rels += 1 self.browser.find_by_xpath("//li[@class='token-input-input-token']/input")[5].fill('First2') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath("//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b").first.click() real_rels += 1 # Saving "First3" self.browser.find_by_xpath("//span[@class='buttonLinkOption buttonLinkLeft']/input").first.click() real_nodes += 1 # Checking the counts self.browser.find_link_by_href('/graphs/bobs-graph/').first.click() nodes = self.browser.find_by_xpath("//div[@class='flags-block']/span[@class='graph-nodes']").first.value rels = self.browser.find_by_xpath("//div[@class='flags-block']/span[@class='graph-relationships']").first.value spin_assert(lambda: self.assertEqual( str(real_nodes) + " nodes", nodes)) spin_assert(lambda: self.assertEqual( str(real_rels) + " relationships", rels))
class BugTestCase(LiveServerTestCase): """ A set of tests to check the existence of bugs. """ def setUp(self): self.browser = Browser(firefox_path=os.getenv('FIREFOX_PATH', None)) socket.setdefaulttimeout(30) signup(self, 'bob', '*****@*****.**', 'bob_secret') signin(self, 'bob', 'bob_secret') def tearDown(self): logout(self) self.browser.quit() Graph.objects.get(name="Bob's graph").destroy() @classmethod def tearDownClass(cls): sleep(10) # It needs some time for close the LiverServerTestCase super(BugTestCase, cls).tearDownClass() def test_node_rel_count_one(self): ''' This test show that reflexive outgoing `relationships` don't count if there are more relationships. ''' real_nodes = 0 real_rels = 0 create_graph(self) create_schema(self) # Creating a nodetype: "First" self.browser.find_link_by_href( '/schemas/bobs-graph/types/create/').first.click() self.browser.find_by_name('name').first.fill("First") self.browser.find_by_name('properties-0-key').first.fill('Name') self.browser.find_by_name('properties-0-display').first.check() self.browser.find_by_value('Save Type').first.click() # Creating another nodetype: "Second" self.browser.find_link_by_href( '/schemas/bobs-graph/types/create/').first.click() self.browser.find_by_name('name').first.fill("Second") self.browser.find_by_name('properties-0-key').first.fill('Name') self.browser.find_by_name('properties-0-display').first.check() self.browser.find_by_value('Save Type').first.click() self.browser.find_by_id('dataMenu').first.click() # Creating an allowed relationship: "First -> First" self.browser.find_by_id('allowedRelations').first.click() self.browser.select('source', '1') self.browser.find_by_name('name').fill('FirstToFirst') self.browser.select('target', '1') self.browser.find_by_value('Save Type').first.click() # Creating an allowed relationship: "First -> Second" self.browser.find_by_id('allowedRelations').first.click() self.browser.select('source', '1') self.browser.find_by_name('name').fill('FirstToSecond') self.browser.select('target', '2') self.browser.find_by_value('Save Type').first.click() # Creating a node of the "First" type self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[0].click() self.browser.find_by_name('Name').first.fill("First1") self.browser.find_by_xpath( "//span[@class='buttonLinkOption buttonLinkLeft']/input" ).first.click() real_nodes += 1 # Creating another node of the "First" type self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[0].click() self.browser.find_by_name('Name').first.fill("First2") self.browser.find_by_xpath( "//span[@class='buttonLinkOption buttonLinkLeft']/input" ).first.click() real_nodes += 1 # Creating a node of the "Second" type self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[1].click() self.browser.find_by_name('Name').first.fill("Second1") self.browser.find_by_xpath( "//span[@class='buttonLinkOption buttonLinkLeft']/input" ).first.click() real_nodes += 1 # Creating another node of the "Second" type self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[1].click() self.browser.find_by_name('Name').first.fill("Second2") self.browser.find_by_xpath( "//span[@class='buttonLinkOption buttonLinkLeft']/input" ).first.click() real_nodes += 1 # Creating another node of the "Second" type self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[1].click() self.browser.find_by_name('Name').first.fill("Second3") self.browser.find_by_xpath( "//span[@class='buttonLinkOption buttonLinkLeft']/input" ).first.click() real_nodes += 1 # Editing the "First1" node self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption list']")[0].click() self.browser.find_by_xpath( "//td[@class='dataList']/a[@class='edit']").first.click() # Adding more "FirstToSecond" relationship forms self.browser.find_by_xpath( "//a[@class='addButton inFormsets']")[1].click() self.browser.find_by_xpath( "//a[@class='addButton inFormsets']")[1].click() # Adding the relationships self.browser.find_by_xpath( "//li[@class='token-input-input-token']/input")[0].fill('First2') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath( "//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b" ).first.click() real_rels += 1 self.browser.find_by_xpath( "//li[@class='token-input-input-token']/input")[1].fill('Second1') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath( "//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b" ).first.click() real_rels += 1 self.browser.find_by_xpath( "//li[@class='token-input-input-token']/input")[2].fill('Second2') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath( "//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b" ).first.click() real_rels += 1 self.browser.find_by_xpath( "//li[@class='token-input-input-token']/input")[3].fill('Second3') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath( "//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b" ).first.click() real_rels += 1 # Saving "First1" self.browser.find_by_value('Save First').first.click() # Checking the counts self.browser.find_link_by_href('/graphs/bobs-graph/').first.click() nodes = self.browser.find_by_xpath( "//div[@class='flags-block']/span[@class='graph-nodes']" ).first.value rels = self.browser.find_by_xpath( "//div[@class='flags-block']/span[@class='graph-relationships']" ).first.value spin_assert( lambda: self.assertEqual(str(real_nodes) + " nodes", nodes)) spin_assert( lambda: self.assertEqual(str(real_rels) + " relationships", rels)) def test_node_rel_count_two(self): ''' This test shows that new `nodes` with relationships don't count. ''' real_nodes = 0 real_rels = 0 create_graph(self) create_schema(self) # Creating a nodetype: "First" self.browser.find_link_by_href( '/schemas/bobs-graph/types/create/').first.click() self.browser.find_by_name('name').first.fill("First") self.browser.find_by_name('properties-0-key').first.fill('Name') self.browser.find_by_name('properties-0-display').first.check() self.browser.find_by_value('Save Type').first.click() # Creating another nodetype: "Second" self.browser.find_link_by_href( '/schemas/bobs-graph/types/create/').first.click() self.browser.find_by_name('name').first.fill("Second") self.browser.find_by_name('properties-0-key').first.fill('Name') self.browser.find_by_name('properties-0-display').first.check() self.browser.find_by_value('Save Type').first.click() self.browser.find_by_id('dataMenu').first.click() # Creating an allowed relationship: "First -> First" self.browser.find_by_id('allowedRelations').first.click() self.browser.select('source', '1') self.browser.find_by_name('name').fill('FirstToFirst') self.browser.select('target', '1') self.browser.find_by_value('Save Type').first.click() # Creating an allowed relationship: "First -> Second" self.browser.find_by_id('allowedRelations').first.click() self.browser.select('source', '1') self.browser.find_by_name('name').fill('FirstToSecond') self.browser.select('target', '2') self.browser.find_by_value('Save Type').first.click() # Creating a node of the "First" type self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[0].click() self.browser.find_by_name('Name').first.fill("First1") self.browser.find_by_xpath( "//span[@class='buttonLinkOption buttonLinkLeft']/input" ).first.click() real_nodes += 1 # Creating another node of the "First" type self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[0].click() self.browser.find_by_name('Name').first.fill("First2") self.browser.find_by_xpath( "//span[@class='buttonLinkOption buttonLinkLeft']/input" ).first.click() real_nodes += 1 # Creating a node of the "Second" type self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[1].click() self.browser.find_by_name('Name').first.fill("Second1") self.browser.find_by_xpath( "//span[@class='buttonLinkOption buttonLinkLeft']/input" ).first.click() real_nodes += 1 # Creating another node of the "Second" type self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[1].click() self.browser.find_by_name('Name').first.fill("Second2") self.browser.find_by_xpath( "//span[@class='buttonLinkOption buttonLinkLeft']/input" ).first.click() real_nodes += 1 # Creating another node of the "Second" type self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[1].click() self.browser.find_by_name('Name').first.fill("Second3") self.browser.find_by_xpath( "//span[@class='buttonLinkOption buttonLinkLeft']/input" ).first.click() real_nodes += 1 # Editing the "First1" node self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption list']")[0].click() self.browser.find_by_xpath( "//td[@class='dataList']/a[@class='edit']").first.click() # Adding more "FirstToSecond" relationship forms self.browser.find_by_xpath( "//a[@class='addButton inFormsets']")[1].click() self.browser.find_by_xpath( "//a[@class='addButton inFormsets']")[1].click() # Adding the relationships self.browser.find_by_xpath( "//li[@class='token-input-input-token']/input")[0].fill('First2') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath( "//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b" ).first.click() real_rels += 1 self.browser.find_by_xpath( "//li[@class='token-input-input-token']/input")[1].fill('Second1') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath( "//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b" ).first.click() real_rels += 1 self.browser.find_by_xpath( "//li[@class='token-input-input-token']/input")[2].fill('Second2') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath( "//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b" ).first.click() real_rels += 1 self.browser.find_by_xpath( "//li[@class='token-input-input-token']/input")[3].fill('Second3') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath( "//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b" ).first.click() real_rels += 1 # Saving "First1" self.browser.find_by_value('Save First').first.click() # Creating another node of the "First" type with relationships self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[0].click() self.browser.find_by_name('Name').first.fill("First3") # Adding more "FirstToSecond" relationship forms self.browser.find_by_xpath( "//a[@class='addButton inFormsets']")[1].click() self.browser.find_by_xpath( "//a[@class='addButton inFormsets']")[1].click() # Adding the relationships self.browser.find_by_xpath( "//li[@class='token-input-input-token']/input")[0].fill('First1') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath( "//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b" ).first.click() real_rels += 1 self.browser.find_by_xpath( "//li[@class='token-input-input-token']/input")[1].fill('Second1') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath( "//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b" ).first.click() real_rels += 1 self.browser.find_by_xpath( "//li[@class='token-input-input-token']/input")[2].fill('Second2') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath( "//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b" ).first.click() real_rels += 1 self.browser.find_by_xpath( "//li[@class='token-input-input-token']/input")[3].fill('Second3') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath( "//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b" ).first.click() real_rels += 1 # Saving "First3" self.browser.find_by_xpath( "//span[@class='buttonLinkOption buttonLinkLeft']/input" ).first.click() real_nodes += 1 # Checking the counts self.browser.find_link_by_href('/graphs/bobs-graph/').first.click() nodes = self.browser.find_by_xpath( "//div[@class='flags-block']/span[@class='graph-nodes']" ).first.value rels = self.browser.find_by_xpath( "//div[@class='flags-block']/span[@class='graph-relationships']" ).first.value spin_assert( lambda: self.assertEqual(str(real_nodes) + " nodes", nodes)) spin_assert( lambda: self.assertEqual(str(real_rels) + " relationships", rels)) def test_node_rel_count_three(self): ''' This test show that reflexive outgoing `relationships` DO count if there are NO more relationships. ''' real_nodes = 0 real_rels = 0 create_graph(self) create_schema(self) # Creating a nodetype: "First" self.browser.find_link_by_href( '/schemas/bobs-graph/types/create/').first.click() self.browser.find_by_name('name').first.fill("First") self.browser.find_by_name('properties-0-key').first.fill('Name') self.browser.find_by_name('properties-0-display').first.check() self.browser.find_by_value('Save Type').first.click() # Creating another nodetype: "Second" self.browser.find_link_by_href( '/schemas/bobs-graph/types/create/').first.click() self.browser.find_by_name('name').first.fill("Second") self.browser.find_by_name('properties-0-key').first.fill('Name') self.browser.find_by_name('properties-0-display').first.check() self.browser.find_by_value('Save Type').first.click() self.browser.find_by_id('dataMenu').first.click() # Creating an allowed relationship: "First -> First" self.browser.find_by_id('allowedRelations').first.click() self.browser.select('source', '1') self.browser.find_by_name('name').fill('FirstToFirst') self.browser.select('target', '1') self.browser.find_by_value('Save Type').first.click() # Creating an allowed relationship: "First -> Second" self.browser.find_by_id('allowedRelations').first.click() self.browser.select('source', '1') self.browser.find_by_name('name').fill('FirstToSecond') self.browser.select('target', '2') self.browser.find_by_value('Save Type').first.click() # Creating a node of the "First" type self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[0].click() self.browser.find_by_name('Name').first.fill("First1") self.browser.find_by_xpath( "//span[@class='buttonLinkOption buttonLinkLeft']/input" ).first.click() real_nodes += 1 # Creating another node of the "First" type self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[0].click() self.browser.find_by_name('Name').first.fill("First2") self.browser.find_by_xpath( "//span[@class='buttonLinkOption buttonLinkLeft']/input" ).first.click() real_nodes += 1 # Creating a node of the "Second" type self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[1].click() self.browser.find_by_name('Name').first.fill("Second1") self.browser.find_by_xpath( "//span[@class='buttonLinkOption buttonLinkLeft']/input" ).first.click() real_nodes += 1 # Creating another node of the "Second" type self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[1].click() self.browser.find_by_name('Name').first.fill("Second2") self.browser.find_by_xpath( "//span[@class='buttonLinkOption buttonLinkLeft']/input" ).first.click() real_nodes += 1 # Creating another node of the "Second" type self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[1].click() self.browser.find_by_name('Name').first.fill("Second3") self.browser.find_by_xpath( "//span[@class='buttonLinkOption buttonLinkLeft']/input" ).first.click() real_nodes += 1 # Editing the "First1" node self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption list']")[0].click() self.browser.find_by_xpath( "//td[@class='dataList']/a[@class='edit']").first.click() # Adding more "FirstToSecond" relationship forms self.browser.find_by_xpath( "//a[@class='addButton inFormsets']")[1].click() self.browser.find_by_xpath( "//a[@class='addButton inFormsets']")[1].click() # Adding the relationships self.browser.find_by_xpath( "//li[@class='token-input-input-token']/input")[0].fill('First2') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath( "//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b" ).first.click() real_rels += 1 self.browser.find_by_xpath( "//li[@class='token-input-input-token']/input")[1].fill('Second1') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath( "//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b" ).first.click() real_rels += 1 self.browser.find_by_xpath( "//li[@class='token-input-input-token']/input")[2].fill('Second2') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath( "//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b" ).first.click() real_rels += 1 self.browser.find_by_xpath( "//li[@class='token-input-input-token']/input")[3].fill('Second3') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath( "//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b" ).first.click() real_rels += 1 # Saving "First1" self.browser.find_by_value('Save First').first.click() # Creating another node of the "First" type with relationships self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[0].click() self.browser.find_by_name('Name').first.fill("First3") # Adding more "FirstToFirst" outgoing relationship forms self.browser.find_by_xpath( "//a[@class='addButton inFormsets']")[0].click() # Adding the relationships self.browser.find_by_xpath( "//li[@class='token-input-input-token']/input")[0].fill('First1') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath( "//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b" ).first.click() real_rels += 1 self.browser.find_by_xpath( "//li[@class='token-input-input-token']/input")[1].fill('First2') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath( "//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b" ).first.click() real_rels += 1 # Saving "First3" self.browser.find_by_xpath( "//span[@class='buttonLinkOption buttonLinkLeft']/input" ).first.click() real_nodes += 1 # Checking the counts self.browser.find_link_by_href('/graphs/bobs-graph/').first.click() nodes = self.browser.find_by_xpath( "//div[@class='flags-block']/span[@class='graph-nodes']" ).first.value rels = self.browser.find_by_xpath( "//div[@class='flags-block']/span[@class='graph-relationships']" ).first.value spin_assert( lambda: self.assertEqual(str(real_nodes) + " nodes", nodes)) spin_assert( lambda: self.assertEqual(str(real_rels) + " relationships", rels)) def test_node_rel_count_four(self): ''' This test show that when there are reflexive incoming `relationships` only count those. ''' real_nodes = 0 real_rels = 0 create_graph(self) create_schema(self) # Creating a nodetype: "First" self.browser.find_link_by_href( '/schemas/bobs-graph/types/create/').first.click() self.browser.find_by_name('name').first.fill("First") self.browser.find_by_name('properties-0-key').first.fill('Name') self.browser.find_by_name('properties-0-display').first.check() self.browser.find_by_value('Save Type').first.click() # Creating another nodetype: "Second" self.browser.find_link_by_href( '/schemas/bobs-graph/types/create/').first.click() self.browser.find_by_name('name').first.fill("Second") self.browser.find_by_name('properties-0-key').first.fill('Name') self.browser.find_by_name('properties-0-display').first.check() self.browser.find_by_value('Save Type').first.click() self.browser.find_by_id('dataMenu').first.click() # Creating an allowed relationship: "First -> First" self.browser.find_by_id('allowedRelations').first.click() self.browser.select('source', '1') self.browser.find_by_name('name').fill('FirstToFirst') self.browser.select('target', '1') self.browser.find_by_value('Save Type').first.click() # Creating an allowed relationship: "First -> Second" self.browser.find_by_id('allowedRelations').first.click() self.browser.select('source', '1') self.browser.find_by_name('name').fill('FirstToSecond') self.browser.select('target', '2') self.browser.find_by_value('Save Type').first.click() # Creating a node of the "First" type self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[0].click() self.browser.find_by_name('Name').first.fill("First1") self.browser.find_by_xpath( "//span[@class='buttonLinkOption buttonLinkLeft']/input" ).first.click() real_nodes += 1 # Creating another node of the "First" type self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[0].click() self.browser.find_by_name('Name').first.fill("First2") self.browser.find_by_xpath( "//span[@class='buttonLinkOption buttonLinkLeft']/input" ).first.click() real_nodes += 1 # Creating a node of the "Second" type self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[1].click() self.browser.find_by_name('Name').first.fill("Second1") self.browser.find_by_xpath( "//span[@class='buttonLinkOption buttonLinkLeft']/input" ).first.click() real_nodes += 1 # Creating another node of the "Second" type self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[1].click() self.browser.find_by_name('Name').first.fill("Second2") self.browser.find_by_xpath( "//span[@class='buttonLinkOption buttonLinkLeft']/input" ).first.click() real_nodes += 1 # Creating another node of the "Second" type self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[1].click() self.browser.find_by_name('Name').first.fill("Second3") self.browser.find_by_xpath( "//span[@class='buttonLinkOption buttonLinkLeft']/input" ).first.click() real_nodes += 1 # Editing the "First1" node self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption list']")[0].click() self.browser.find_by_xpath( "//td[@class='dataList']/a[@class='edit']").first.click() # Adding more "FirstToSecond" relationship forms self.browser.find_by_xpath( "//a[@class='addButton inFormsets']")[1].click() self.browser.find_by_xpath( "//a[@class='addButton inFormsets']")[1].click() # Adding the relationships self.browser.find_by_xpath( "//li[@class='token-input-input-token']/input")[0].fill('First2') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath( "//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b" ).first.click() real_rels += 1 self.browser.find_by_xpath( "//li[@class='token-input-input-token']/input")[1].fill('Second1') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath( "//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b" ).first.click() real_rels += 1 self.browser.find_by_xpath( "//li[@class='token-input-input-token']/input")[2].fill('Second2') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath( "//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b" ).first.click() real_rels += 1 self.browser.find_by_xpath( "//li[@class='token-input-input-token']/input")[3].fill('Second3') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath( "//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b" ).first.click() real_rels += 1 # Saving "First1" self.browser.find_by_value('Save First').first.click() # Creating another node of the "First" type with relationships self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//a[@class='dataOption new']")[0].click() self.browser.find_by_name('Name').first.fill("First3") # Adding more "FirstToSecond" relationship forms self.browser.find_by_xpath( "//a[@class='addButton inFormsets']")[1].click() self.browser.find_by_xpath( "//a[@class='addButton inFormsets']")[1].click() self.browser.find_by_xpath( "//a[@class='addButton inFormsets']")[2].click() # Adding the relationships self.browser.find_by_xpath( "//li[@class='token-input-input-token']/input")[1].fill('Second1') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath( "//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b" ).first.click() real_rels += 1 self.browser.find_by_xpath( "//li[@class='token-input-input-token']/input")[2].fill('Second2') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath( "//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b" ).first.click() real_rels += 1 self.browser.find_by_xpath( "//li[@class='token-input-input-token']/input")[3].fill('Second3') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath( "//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b" ).first.click() real_rels += 1 self.browser.find_by_xpath( "//li[@class='token-input-input-token']/input")[4].fill('First1') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath( "//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b" ).first.click() real_rels += 1 self.browser.find_by_xpath( "//li[@class='token-input-input-token']/input")[5].fill('First2') self.browser.is_element_present_by_id("id_user_wait", 3) self.browser.find_by_xpath( "//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b" ).first.click() real_rels += 1 # Saving "First3" self.browser.find_by_xpath( "//span[@class='buttonLinkOption buttonLinkLeft']/input" ).first.click() real_nodes += 1 # Checking the counts self.browser.find_link_by_href('/graphs/bobs-graph/').first.click() nodes = self.browser.find_by_xpath( "//div[@class='flags-block']/span[@class='graph-nodes']" ).first.value rels = self.browser.find_by_xpath( "//div[@class='flags-block']/span[@class='graph-relationships']" ).first.value spin_assert( lambda: self.assertEqual(str(real_nodes) + " nodes", nodes)) spin_assert( lambda: self.assertEqual(str(real_rels) + " relationships", rels))
class UserTestCase(LiveServerTestCase): """ A set of tests for testing Users, Accounts and UserProfiles. Also, we check the patterns for the required fields for signup, signin, the menu of user details, the change password view and the change email view. """ def setUp(self): self.browser = Browser(firefox_path=os.getenv('FIREFOX_PATH', None)) socket.setdefaulttimeout(30) def tearDown(self): self.browser.quit() def test_user_signup(self): signup(self, 'bob', '*****@*****.**', 'bob_secret') spin_assert(lambda: self.assertEqual(self.browser.find_by_css('.body-inside').first.value, 'Thank you for signing up with us!\nYou can now use the supplied credentials to signin.')) spin_assert(lambda: self.assertEqual( self.browser.title, 'SylvaDB - Signup almost done!')) @classmethod def tearDownClass(cls): sleep(10) # It needs some time for close the LiverServerTestCase super(UserTestCase, cls).tearDownClass() def test_user_singup_empty_email(self): self.browser.visit(self.live_server_url + '/accounts/signup/') self.browser.find_by_name('username').fill('bob') self.browser.find_by_name('email').fill('') self.browser.find_by_name('password1').fill('bob_secret') self.browser.find_by_name('password2').fill('bob_secret') self.browser.find_by_value('Signup').first.click() text = self.browser.find_by_xpath("//ul[@class='errorlist']/li").first.text spin_assert(lambda: self.assertEqual(text, 'This field is required.')) def test_user_singup_bad_email(self): self.browser.visit(self.live_server_url + '/accounts/signup/') self.browser.find_by_name('username').fill('bob') self.browser.find_by_name('email').fill('bobcultureplex.ca') self.browser.find_by_name('password1').fill('bob_secret') self.browser.find_by_name('password2').fill('bob_secret') self.browser.find_by_value('Signup').first.click() text = self.browser.find_by_xpath("//ul[@class='errorlist']/li").first.text spin_assert(lambda: self.assertEqual( text, 'Enter a valid email address.')) def test_user_singup_empty_name(self): self.browser.visit(self.live_server_url + '/accounts/signup/') self.browser.find_by_name('username').fill('') self.browser.find_by_name('email').fill('*****@*****.**') self.browser.find_by_name('password1').fill('bob_secret') self.browser.find_by_name('password2').fill('bob_secret') self.browser.find_by_value('Signup').first.click() text = self.browser.find_by_xpath("//ul[@class='errorlist']/li").first.text spin_assert(lambda: self.assertEqual(text, 'This field is required.')) def test_user_singup_empty_password(self): self.browser.visit(self.live_server_url + '/accounts/signup/') self.browser.find_by_name('username').fill('bob') self.browser.find_by_name('email').fill('*****@*****.**') self.browser.find_by_name('password1').fill('') self.browser.find_by_name('password2').fill('bob_secret') self.browser.find_by_value('Signup').first.click() text = self.browser.find_by_xpath("//ul[@class='errorlist']/li").first.text spin_assert(lambda: self.assertEqual(text, 'This field is required.')) def test_user_singup_password_unmatched(self): self.browser.visit(self.live_server_url + '/accounts/signup/') self.browser.find_by_name('username').fill('bob') self.browser.find_by_name('email').fill('*****@*****.**') self.browser.find_by_name('password1').fill('bob_secret') self.browser.find_by_name('password2').fill('bob_password') self.browser.find_by_value('Signup').first.click() text = self.browser.find_by_xpath("//ul[@class='errorlist']/li").first.text spin_assert(lambda: self.assertEqual( text, "The two password fields didn't match.")) def test_user_signin(self): signup(self, 'bob', '*****@*****.**', 'bob_secret') signin(self, 'bob', 'bob_secret') spin_assert(lambda: self.assertEqual( self.browser.title, 'SylvaDB - Dashboard')) logout(self) def test_user_signin_empty_user(self): signup(self, 'bob', '*****@*****.**', 'bob_secret') self.browser.visit(self.live_server_url + '/accounts/signin/') self.browser.find_by_name('identification').fill('') self.browser.find_by_name('password').fill('bob_secret') self.browser.find_by_xpath( "//div[@id='body']/div/form/input")[1].click() text = self.browser.find_by_xpath("//ul[@class='errorlist']/li").first.text spin_assert(lambda: self.assertEqual( text, 'Either supply us with your email or username.')) def test_user_signin_bad_user(self): signup(self, 'bob', '*****@*****.**', 'bob_secret') self.browser.visit(self.live_server_url + '/accounts/signin/') self.browser.find_by_name('identification').fill('alice') self.browser.find_by_name('password').fill('bob_secret') self.browser.find_by_xpath( "//div[@id='body']/div/form/input")[1].click() text = self.browser.find_by_xpath("//ul[@class='errorlist']/li").first.text spin_assert(lambda: self.assertEqual(text, 'Please enter a correct username or email and password. Note that both fields are case-sensitive.')) def test_user_signin_empty_password(self): signup(self, 'bob', '*****@*****.**', 'bob_secret') self.browser.visit(self.live_server_url + '/accounts/signin/') self.browser.find_by_name('identification').fill('bob') self.browser.find_by_name('password').fill('') self.browser.find_by_xpath( "//div[@id='body']/div/form/input")[1].click() text = self.browser.find_by_xpath("//ul[@class='errorlist']/li").first.text spin_assert(lambda: self.assertEqual(text, 'This field is required.')) def test_user_signin_bad_password(self): signup(self, 'bob', '*****@*****.**', 'bob_secret') self.browser.visit(self.live_server_url + '/accounts/signin/') self.browser.find_by_name('identification').fill('bob') self.browser.find_by_name('password').fill('alice_secret') self.browser.find_by_xpath( "//div[@id='body']/div/form/input")[1].click() text = self.browser.find_by_xpath("//ul[@class='errorlist']/li").first.text spin_assert(lambda: self.assertEqual(text, 'Please enter a correct username or email and password. Note that both fields are case-sensitive.')) def test_user_logout(self): signup(self, 'bob', '*****@*****.**', 'bob_secret') signin(self, 'bob', 'bob_secret') logout(self) spin_assert(lambda: self.assertEqual( self.browser.title, 'SylvaDB - Signed out')) spin_assert(lambda: self.assertEqual(self.browser.find_by_css('.body-inside').first.value, 'You have been signed out. Till we meet again.')) def test_user_details(self): signup(self, 'bob', '*****@*****.**', 'bob_secret') signin(self, 'bob', 'bob_secret') spin_assert(lambda: self.assertEqual( self.browser.title, 'SylvaDB - Dashboard')) self.browser.find_link_by_href('/accounts/bob/').first.click() spin_assert(lambda: self.assertEqual( self.browser.title, "SylvaDB - bob's profile.")) self.browser.find_link_by_href('/accounts/bob/edit/').first.click() spin_assert(lambda: self.assertEqual( self.browser.title, 'SylvaDB - Account setup')) self.browser.find_by_name('first_name').fill('Bob') self.browser.find_by_name('last_name').fill('Doe') self.browser.attach_file('mugshot', 'http://www.gravatar.com/avatar/3d4bcca5d9c3a56a0282f308f9acda07?s=90') self.browser.select('language', 'en') self.browser.select('gender', '1') self.browser.find_by_name('website').fill('http://www.bobweb.com') self.browser.find_by_name('location').fill('London, Ontario') self.browser.find_by_name('birth_date').fill('01/01/1975') self.browser.find_by_name('about_me').fill('I am a very nice guy') self.browser.find_by_name('institution').fill('University') self.browser.find_by_name('company').fill('CulturePlex') self.browser.find_by_name('lab').fill('CulturePlex') self.browser.find_by_value('Save changes').first.click() spin_assert(lambda: self.assertEqual( self.browser.title, "SylvaDB - bob's profile.")) logout(self) def test_user_details_bad_website(self): signup(self, 'bob', '*****@*****.**', 'bob_secret') signin(self, 'bob', 'bob_secret') spin_assert(lambda: self.assertEqual( self.browser.title, 'SylvaDB - Dashboard')) self.browser.find_link_by_href('/accounts/bob/').first.click() spin_assert(lambda: self.assertEqual( self.browser.title, "SylvaDB - bob's profile.")) self.browser.find_link_by_href('/accounts/bob/edit/').first.click() spin_assert(lambda: self.assertEqual( self.browser.title, 'SylvaDB - Account setup')) self.browser.find_by_name('first_name').fill('Bob') self.browser.find_by_name('last_name').fill('Doe') self.browser.attach_file('mugshot', 'http://www.gravatar.com/avatar/3d4bcca5d9c3a56a0282f308f9acda07?s=90') self.browser.select('language', 'en') self.browser.select('gender', '1') self.browser.find_by_name('website').fill('bobweb') self.browser.find_by_name('location').fill('London, Ontario') self.browser.find_by_name('birth_date').fill('01/01/1975') self.browser.find_by_name('about_me').fill('I am a very nice guy') self.browser.find_by_name('institution').fill('University') self.browser.find_by_name('company').fill('CulturePlex') self.browser.find_by_name('lab').fill('CulturePlex') self.browser.find_by_value('Save changes').first.click() spin_assert(lambda: self.assertEqual( self.browser.title, 'SylvaDB - Account setup')) logout(self) def test_user_details_bad_birthdate(self): signup(self, 'bob', '*****@*****.**', 'bob_secret') signin(self, 'bob', 'bob_secret') spin_assert(lambda: self.assertEqual( self.browser.title, 'SylvaDB - Dashboard')) self.browser.find_link_by_href('/accounts/bob/').first.click() spin_assert(lambda: self.assertEqual( self.browser.title, "SylvaDB - bob's profile.")) self.browser.find_link_by_href('/accounts/bob/edit/').first.click() spin_assert(lambda: self.assertEqual( self.browser.title, 'SylvaDB - Account setup')) self.browser.find_by_name('first_name').fill('Bob') self.browser.find_by_name('last_name').fill('Doe') self.browser.attach_file('mugshot', 'http://www.gravatar.com/avatar/3d4bcca5d9c3a56a0282f308f9acda07?s=90') self.browser.select('language', 'en') self.browser.select('gender', '1') self.browser.find_by_name('website').fill('http://www.bobweb.com') self.browser.find_by_name('location').fill('London, Ontario') self.browser.find_by_name('birth_date').fill('birthdate') self.browser.find_by_name('about_me').fill('I am a very nice guy') self.browser.find_by_name('institution').fill('University') self.browser.find_by_name('company').fill('CulturePlex') self.browser.find_by_name('lab').fill('CulturePlex') self.browser.find_by_value('Save changes').first.click() text = self.browser.find_by_xpath("//ul[@class='errorlist']/li").first.text spin_assert(lambda: self.assertEqual(text, 'Enter a valid date.')) logout(self) def test_user_details_future_birthdate(self): signup(self, 'bob', '*****@*****.**', 'bob_secret') signin(self, 'bob', 'bob_secret') spin_assert(lambda: self.assertEqual( self.browser.title, 'SylvaDB - Dashboard')) self.browser.find_link_by_href('/accounts/bob/').first.click() spin_assert(lambda: self.assertEqual( self.browser.title, "SylvaDB - bob's profile.")) self.browser.find_link_by_href('/accounts/bob/edit/').first.click() spin_assert(lambda: self.assertEqual( self.browser.title, 'SylvaDB - Account setup')) self.browser.find_by_name('first_name').fill('Bob') self.browser.find_by_name('last_name').fill('Doe') self.browser.attach_file('mugshot', 'http://www.gravatar.com/avatar/3d4bcca5d9c3a56a0282f308f9acda07?s=90') self.browser.select('language', 'en') self.browser.select('gender', '1') self.browser.find_by_name('website').fill('http://www.bobweb.com') self.browser.find_by_name('location').fill('London, Ontario') self.browser.find_by_name('birth_date').fill('2020-01-11') self.browser.find_by_name('about_me').fill('I am a very nice guy') self.browser.find_by_name('institution').fill('University') self.browser.find_by_name('company').fill('CulturePlex') self.browser.find_by_name('lab').fill('CulturePlex') self.browser.find_by_value('Save changes').first.click() text = self.browser.find_by_xpath("//ul[@class='errorlist']/li").first.text spin_assert(lambda: self.assertEqual( text, 'You need to introduce a past date.')) logout(self) def test_user_change_pass(self): signup(self, 'bob', '*****@*****.**', 'bob_secret') signin(self, 'bob', 'bob_secret') spin_assert(lambda: self.assertEqual( self.browser.title, 'SylvaDB - Dashboard')) self.browser.find_link_by_href('/accounts/bob/').first.click() spin_assert(lambda: self.assertEqual( self.browser.title, "SylvaDB - bob's profile.")) self.browser.find_link_by_href('/accounts/bob/password/').first.click() spin_assert(lambda: self.assertEqual( self.browser.title, 'SylvaDB - Change password')) self.browser.find_by_name('old_password').fill('bob_secret') self.browser.find_by_name('new_password1').fill('bob_password') self.browser.find_by_name('new_password2').fill('bob_password') self.browser.find_by_value('Change password').first.click() spin_assert(lambda: self.assertEqual( self.browser.title, 'SylvaDB - Password changed')) logout(self) def test_user_change_pass_empty(self): signup(self, 'bob', '*****@*****.**', 'bob_secret') signin(self, 'bob', 'bob_secret') spin_assert(lambda: self.assertEqual( self.browser.title, 'SylvaDB - Dashboard')) self.browser.find_link_by_href('/accounts/bob/').first.click() spin_assert(lambda: self.assertEqual( self.browser.title, "SylvaDB - bob's profile.")) self.browser.find_link_by_href('/accounts/bob/password/').first.click() spin_assert(lambda: self.assertEqual( self.browser.title, 'SylvaDB - Change password')) self.browser.find_by_name('old_password').fill('') self.browser.find_by_name('new_password1').fill('bob_password') self.browser.find_by_name('new_password2').fill('bob_password') self.browser.find_by_value('Change password').first.click() text = self.browser.find_by_xpath("//ul[@class='errorlist']/li").first.text spin_assert(lambda: self.assertEqual(text, 'This field is required.')) logout(self) def test_user_change_pass_incorrectly(self): signup(self, 'bob', '*****@*****.**', 'bob_secret') signin(self, 'bob', 'bob_secret') spin_assert(lambda: self.assertEqual( self.browser.title, 'SylvaDB - Dashboard')) self.browser.find_link_by_href('/accounts/bob/').first.click() spin_assert(lambda: self.assertEqual( self.browser.title, "SylvaDB - bob's profile.")) self.browser.find_link_by_href('/accounts/bob/password/').first.click() spin_assert(lambda: self.assertEqual( self.browser.title, 'SylvaDB - Change password')) self.browser.find_by_name('old_password').fill('bad_password') self.browser.find_by_name('new_password1').fill('bob_password') self.browser.find_by_name('new_password2').fill('bob_password') self.browser.find_by_value('Change password').first.click() text = self.browser.find_by_xpath("//ul[@class='errorlist']/li").first.text spin_assert(lambda: self.assertEqual(text, 'Your old password was entered incorrectly. Please enter it again.')) logout(self) def test_user_change_new_pass_empty(self): signup(self, 'bob', '*****@*****.**', 'bob_secret') signin(self, 'bob', 'bob_secret') spin_assert(lambda: self.assertEqual( self.browser.title, 'SylvaDB - Dashboard')) self.browser.find_link_by_href('/accounts/bob/').first.click() spin_assert(lambda: self.assertEqual( self.browser.title, "SylvaDB - bob's profile.")) self.browser.find_link_by_href('/accounts/bob/password/').first.click() spin_assert(lambda: self.assertEqual( self.browser.title, 'SylvaDB - Change password')) self.browser.find_by_name('old_password').fill('bob_secret') self.browser.find_by_name('new_password1').fill('') self.browser.find_by_name('new_password2').fill('bob_password') self.browser.find_by_value('Change password').first.click() text = self.browser.find_by_xpath("//ul[@class='errorlist']/li").first.text spin_assert(lambda: self.assertEqual(text, 'This field is required.')) logout(self) def test_user_change_new_pass_unmatched(self): signup(self, 'bob', '*****@*****.**', 'bob_secret') signin(self, 'bob', 'bob_secret') spin_assert(lambda: self.assertEqual( self.browser.title, 'SylvaDB - Dashboard')) self.browser.find_link_by_href('/accounts/bob/').first.click() spin_assert(lambda: self.assertEqual( self.browser.title, "SylvaDB - bob's profile.")) self.browser.find_link_by_href('/accounts/bob/password/').first.click() spin_assert(lambda: self.assertEqual( self.browser.title, 'SylvaDB - Change password')) self.browser.find_by_name('old_password').fill('bob_secret') self.browser.find_by_name('new_password1').fill('bob_password') self.browser.find_by_name('new_password2').fill('alice_password') self.browser.find_by_value('Change password').first.click() text = self.browser.find_by_xpath("//ul[@class='errorlist']/li").first.text spin_assert(lambda: self.assertEqual( text, "The two password fields didn't match.")) logout(self) def test_user_change_mail(self): signup(self, 'bob', '*****@*****.**', 'bob_secret') signin(self, 'bob', 'bob_secret') spin_assert(lambda: self.assertEqual( self.browser.title, 'SylvaDB - Dashboard')) self.browser.find_link_by_href('/accounts/bob/').first.click() spin_assert(lambda: self.assertEqual( self.browser.title, "SylvaDB - bob's profile.")) self.browser.find_link_by_href('/accounts/bob/email/').first.click() spin_assert(lambda: self.assertEqual( self.browser.title, 'SylvaDB - Welcome to The Sylva Project')) self.browser.find_by_name('email').fill('*****@*****.**') self.browser.find_by_value('Change email').first.click() spin_assert(lambda: self.assertEqual( self.browser.title, 'SylvaDB - Email verification')) def test_user_change_mail_empty(self): signup(self, 'bob', '*****@*****.**', 'bob_secret') signin(self, 'bob', 'bob_secret') spin_assert(lambda: self.assertEqual( self.browser.title, 'SylvaDB - Dashboard')) self.browser.find_link_by_href('/accounts/bob/').first.click() spin_assert(lambda: self.assertEqual( self.browser.title, "SylvaDB - bob's profile.")) self.browser.find_link_by_href('/accounts/bob/email/').first.click() spin_assert(lambda: self.assertEqual( self.browser.title, 'SylvaDB - Welcome to The Sylva Project')) self.browser.find_by_name('email').fill('') self.browser.find_by_value('Change email').first.click() text = self.browser.find_by_xpath("//ul[@class='errorlist']/li").first.text spin_assert(lambda: self.assertEqual(text, 'This field is required.')) def test_user_change_bad(self): signup(self, 'bob', '*****@*****.**', 'bob_secret') signin(self, 'bob', 'bob_secret') spin_assert(lambda: self.assertEqual( self.browser.title, 'SylvaDB - Dashboard')) self.browser.find_link_by_href('/accounts/bob/').first.click() spin_assert(lambda: self.assertEqual( self.browser.title, "SylvaDB - bob's profile.")) self.browser.find_link_by_href('/accounts/bob/email/').first.click() spin_assert(lambda: self.assertEqual( self.browser.title, 'SylvaDB - Welcome to The Sylva Project')) self.browser.find_by_name('email').fill('bobnewcultureplex.ca') self.browser.find_by_value('Change email').first.click() text = self.browser.find_by_xpath("//ul[@class='errorlist']/li").first.text spin_assert(lambda: self.assertEqual( text, 'Enter a valid email address.'))
class DataNodeTestCase(LiveServerTestCase): """ A set of tests to test all interaction related to the creation and deletion of nodes and relationships. Also, we test export the data in two formats: gexf and csv. """ def setUp(self): self.browser = Browser(firefox_path=os.getenv('FIREFOX_PATH', None)) socket.setdefaulttimeout(30) signup(self, 'bob', '*****@*****.**', 'bob_secret') signin(self, 'bob', 'bob_secret') def tearDown(self): logout(self) self.browser.quit() @classmethod def tearDownClass(cls): sleep(10) # It needs some time for close the LiverServerTestCase super(DataNodeTestCase, cls).tearDownClass() def test_data_node_addition(self): create_graph(self) create_schema(self) create_type(self) create_data(self) # Check the node name self.browser.find_by_xpath("//td[@class='dataList']/a[@class='edit']").first.click() text = self.browser.find_by_id('propertiesTitle').first.value spin_assert(lambda: self.assertEqual(text, 'Properties')) self.browser.find_by_xpath("//span[@class='buttonLinkOption buttonLinkRight']/a").first.click() self.browser.choose('confirm', '1') self.browser.find_by_value('Continue').first.click() text = self.browser.find_by_xpath("//div[@class='indent']/div").first.value Graph.objects.get(name="Bob's graph").destroy() spin_assert(lambda: self.assertEqual(text, 'Nodes: 0')) def test_data_node_addition_rel_add_del(self): create_graph(self) create_schema(self) create_type(self) create_node(self, "Bob") create_node(self, "Alice") # We create a allowed relation js_code = "$('a#schema-link')[0].click();" self.browser.execute_script(js_code) self.browser.find_by_id('allowedRelations').first.click() self.browser.select('source', '1') self.browser.find_by_name('name').fill("Bob's rel") self.browser.select('target', '1') self.browser.find_by_id('id_description').fill("This the allowed relationship for Bob's graph") self.browser.find_by_value('Save Type').first.click() spin_assert(lambda: self.assertEqual( self.browser.title, "SylvaDB - Bob's graph")) # We create the link between the nodes self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//td[@class='dataActions']/a[@class='dataOption list']").first.click() self.browser.find_by_xpath("//td[@class='dataList']/a[@class='edit']").first.click() self.browser.find_by_xpath("//li[@class='token-input-input-token']/input").first.fill('Alice') self.browser.is_element_present_by_id("id_user_wait", 5) self.browser.find_by_xpath("//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b").first.click() self.browser.find_by_value("Save Bob's type").first.click() # Delete the relationship self.browser.find_by_xpath("//td[@class='dataList']/a[@class='edit']").first.click() self.browser.find_by_xpath("//span[@class='all-relationships outgoing-relationships o_bobs_rel1-relationships']/span/a[@class='delete-row initial-form floating']").first.click() self.browser.find_by_value("Save Bob's type").first.click() self.browser.find_link_by_href('/graphs/bobs-graph/').first.click() text = self.browser.find_by_xpath("//div[@class='flags-block']/span[@class='graph-relationships']").first.value spin_assert(lambda: self.assertEqual(text, "0 relationships")) Graph.objects.get(name="Bob's graph").destroy() def test_node_type_deletion_keeping_nodes(self): create_graph(self) create_schema(self) create_type(self) # Adding relationship to the type self.browser.find_by_id('allowedRelations').first.click() self.browser.select('source', '1') self.browser.find_by_name('name').fill("Bob's rel") self.browser.select('target', '1') self.browser.find_by_id('id_description').fill( 'The loved relationship') self.browser.find_by_value('Save Type').first.click() text = self.browser.find_by_xpath( "//div[@class='form-row indent']/label").first.value spin_assert(lambda: self.assertNotEqual(text.find("Bob's rel"), -1)) # Creating nodes create_node(self, 'Bob') create_node(self, 'Alice') # Creating relationship between nodes self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//td[@class='dataActions']/a[@class='dataOption list']").first.click() self.browser.find_by_xpath("//td[@class='dataList']/a[@class='edit']").first.click() self.browser.find_by_xpath("//li[@class='token-input-input-token']/input").first.fill('Alice') self.browser.is_element_present_by_id("id_user_wait", wait_time=5) self.browser.find_by_xpath("//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b").first.click() self.browser.find_by_value("Save Bob's type").first.click() self.browser.find_link_by_href('/graphs/bobs-graph/').first.click() text = self.browser.find_by_xpath("//div[@class='flags-block']/span[@class='graph-relationships']").first.value spin_assert(lambda: self.assertEqual(text, "1 relationships")) # Deleting type js_code = "$('a#schema-link')[0].click();" self.browser.execute_script(js_code) self.browser.find_by_xpath("//fieldset[@class='module aligned wide model']/h2/a").first.click() self.browser.find_by_xpath("//span[@class='buttonLinkOption buttonLinkRight']/a[@class='delete']").first.click() text = self.browser.find_by_xpath( "//p/label[@for='id_option_0']").first.value spin_assert(lambda: self.assertNotEqual(text.find( "We found some elements of this type"), -1)) # Keeping nodes self.browser.choose('option', 'no') self.browser.find_by_value('Continue').first.click() text = self.browser.find_by_xpath( "//div[@class='body-inside']/p").first.value spin_assert(lambda: self.assertEqual( text, 'There are no types defined yet.')) # Checking self.browser.find_link_by_href('/graphs/bobs-graph/').first.click() text = self.browser.find_by_xpath("//div[@class='flags-block']/span[@class='graph-nodes']").first.value spin_assert(lambda: self.assertEqual(text, "2 nodes")) text = self.browser.find_by_xpath("//div[@class='flags-block']/span[@class='graph-relationships']").first.value spin_assert(lambda: self.assertEqual(text, "1 relationships")) text = self.browser.find_by_xpath( "//div[@class='graph-empty-message']").first.value spin_assert(lambda: self.assertNotEqual( text.find("Your Schema is empty."), -1)) Graph.objects.get(name="Bob's graph").destroy() def test_node_type_deletion_deleting_nodes(self): create_graph(self) create_schema(self) create_type(self) # Adding relationship to the type self.browser.find_by_id('allowedRelations').first.click() self.browser.select('source', '1') self.browser.find_by_name('name').fill("Bob's rel") self.browser.select('target', '1') self.browser.find_by_id('id_description').fill( 'The loved relationship') self.browser.find_by_value('Save Type').first.click() text = self.browser.find_by_xpath( "//div[@class='form-row indent']/label").first.value spin_assert(lambda: self.assertNotEqual(text.find("Bob's rel"), -1)) # Creating nodes create_node(self, 'Bob') create_node(self, 'Alice') # Creating relationship between nodes self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//td[@class='dataActions']/a[@class='dataOption list']").first.click() self.browser.find_by_xpath("//td[@class='dataList']/a[@class='edit']").first.click() self.browser.find_by_xpath("//li[@class='token-input-input-token']/input").first.fill('Alice') self.browser.is_element_present_by_id("id_user_wait", wait_time=5) self.browser.find_by_xpath("//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b").first.click() self.browser.find_by_value("Save Bob's type").first.click() self.browser.find_link_by_href('/graphs/bobs-graph/').first.click() text = self.browser.find_by_xpath("//div[@class='flags-block']/span[@class='graph-relationships']").first.value spin_assert(lambda: self.assertEqual(text, "1 relationships")) # Deleting type js_code = "$('a#schema-link')[0].click();" self.browser.execute_script(js_code) self.browser.find_by_xpath("//fieldset[@class='module aligned wide model']/h2/a").first.click() self.browser.find_by_xpath("//span[@class='buttonLinkOption buttonLinkRight']/a[@class='delete']").first.click() text = self.browser.find_by_xpath( "//p/label[@for='id_option_0']").first.value spin_assert(lambda: self.assertNotEqual(text.find( "We found some elements of this type"), -1)) # Deleting nodes self.browser.choose('option', 'de') self.browser.find_by_value('Continue').first.click() text = self.browser.find_by_xpath( "//div[@class='body-inside']/p").first.value spin_assert(lambda: self.assertEqual( text, 'There are no types defined yet.')) # Checking self.browser.find_link_by_href('/graphs/bobs-graph/').first.click() text = self.browser.find_by_xpath("//div[@class='flags-block']/span[@class='graph-nodes']").first.value spin_assert(lambda: self.assertEqual(text, "0 nodes")) text = self.browser.find_by_xpath("//div[@class='flags-block']/span[@class='graph-relationships']").first.value spin_assert(lambda: self.assertEqual(text, "0 relationships")) Graph.objects.get(name="Bob's graph").destroy() def test_data_node_clone(self): create_graph(self) create_schema(self) create_type(self) create_data(self) original_name = self.browser.find_by_xpath("//table[@id='content_table']/tbody/tr/td")[1].value # Clone the node self.browser.find_by_xpath("//table[@id='content_table']/tbody/tr/td/a[@class='edit']").first.click() self.browser.find_by_name('Name').first.fill(original_name + " clone") self.browser.find_by_name("as-new").first.click() # Check that two nodes exist original_name = self.browser.find_by_xpath("//table[@id='content_table']/tbody/tr/td")[1].value clone_name = self.browser.find_by_xpath("//table[@id='content_table']/tbody/tr/td")[4].value spin_assert(lambda: self.assertEqual(original_name, "Bob's node")) spin_assert(lambda: self.assertEqual(clone_name, "Bob's node clone")) Graph.objects.get(name="Bob's graph").destroy() def test_sigma_visualization_in_node_view(self): create_graph(self) create_schema(self) create_type(self) # Adding relationship to the type self.browser.find_by_id('allowedRelations').first.click() self.browser.select('source', '1') self.browser.find_by_name('name').fill("Bob's rel") self.browser.select('target', '1') self.browser.find_by_id('id_description').fill( 'The loved relationship') self.browser.find_by_value('Save Type').first.click() text = self.browser.find_by_xpath( "//div[@class='form-row indent']/label").first.value spin_assert(lambda: self.assertNotEqual(text.find("Bob's rel"), -1)) # Creating nodes create_node(self, 'Bob') create_node(self, 'Alice') # Creating relationship between nodes self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//td[@class='dataActions']/a[@class='dataOption list']").first.click() self.browser.find_by_xpath("//td[@class='dataList']/a[@class='edit']").first.click() self.browser.find_by_xpath("//li[@class='token-input-input-token']/input").first.fill('Alice') self.browser.is_element_present_by_id("id_user_wait", wait_time=5) self.browser.find_by_xpath("//div[@class='token-input-dropdown']//li[@class='token-input-dropdown-item2 token-input-selected-dropdown-item']/b").first.click() self.browser.find_by_value("Save Bob's type").first.click() # Checking self.browser.find_by_xpath("//table[@id='content_table']/tbody/tr/td/a[@title='View node']/p[text()='Alice']").first.click() self.browser.is_element_present_by_id('wait_for_js', 3) js_code = ''' var instance = sigma.instances(0); sylva.test_node_count = instance.graph.nodes().length; ''' self.browser.execute_script(js_code) text = self.browser.evaluate_script('sylva.test_node_count') spin_assert(lambda: self.assertEqual(text, 2)) Graph.objects.get(name="Bob's graph").destroy() def test_graph_export_gexf(self): create_graph(self) create_schema(self) create_type(self) create_data(self) self.browser.find_by_id('toolsMenu').first.click() cookies = {self.browser.cookies.all()[0]["name"]: self.browser.cookies.all()[0]["value"], self.browser.cookies.all()[1]["name"]: self.browser.cookies.all()[1]["value"]} result = requests.get(self.live_server_url + '/tools/bobs-graph/export/gexf/', cookies=cookies) spin_assert(lambda: self.assertEqual( result.headers['content-type'], 'application/xml')) spin_assert(lambda: self.assertEqual( self.browser.status_code.is_success(), True)) fw = open('sylva/sylva/tests/files/bobs-graph.gexf', 'w') fw.write(result.content) fw.close() f = open('sylva/sylva/tests/files/bobs-graph.gexf') xmlFile = "" for line in f: xmlFile += line f.close() spin_assert(lambda: self.assertEqual(xmlFile, result.content)) Graph.objects.get(name="Bob's graph").destroy() def test_graph_export_csv(self): create_graph(self) create_schema(self) create_type(self) create_data(self) self.browser.find_by_id('toolsMenu').first.click() cookies = {self.browser.cookies.all()[0]["name"]: self.browser.cookies.all()[0]["value"], self.browser.cookies.all()[1]["name"]: self.browser.cookies.all()[1]["value"]} result = requests.get(self.live_server_url + '/tools/bobs-graph/export/csv/', cookies=cookies) spin_assert(lambda: self.assertEqual( result.headers['content-type'], 'application/zip')) spin_assert(lambda: self.assertEqual( self.browser.status_code.is_success(), True)) test_file = StringIO(result.content) csv_zip = ZipFile(test_file) for name in csv_zip.namelist(): fw = open('sylva/sylva/tests/files/' + name, 'w') fw.write(csv_zip.read(name)) fw.close() for name in csv_zip.namelist(): f = open('sylva/sylva/tests/files/' + name) csvFile = "" for line in f: csvFile += line f.close() spin_assert(lambda: self.assertEqual(csv_zip.read(name), csvFile)) Graph.objects.get(name="Bob's graph").destroy()
class UserTestCase(LiveServerTestCase): """ A set of tests for testing Users, Accounts and UserProfiles. Also, we check the patterns for the required fields for signup, signin, the menu of user details, the change password view and the change email view. """ def setUp(self): self.browser = Browser(firefox_path=os.getenv('FIREFOX_PATH', None)) socket.setdefaulttimeout(30) def tearDown(self): self.browser.quit() def test_user_signup(self): signup(self, 'bob', '*****@*****.**', 'bob_secret') spin_assert(lambda: self.assertEqual( self.browser.find_by_css('.body-inside').first.value, 'Thank you for signing up with us!\nYou can now use the supplied credentials to signin.' )) spin_assert(lambda: self.assertEqual(self.browser.title, 'SylvaDB - Signup almost done!')) @classmethod def tearDownClass(cls): sleep(10) # It needs some time for close the LiverServerTestCase super(UserTestCase, cls).tearDownClass() def test_user_singup_empty_email(self): self.browser.visit(self.live_server_url + '/accounts/signup/') self.browser.find_by_name('username').fill('bob') self.browser.find_by_name('email').fill('') self.browser.find_by_name('password1').fill('bob_secret') self.browser.find_by_name('password2').fill('bob_secret') self.browser.find_by_value('Signup').first.click() text = self.browser.find_by_xpath( "//ul[@class='errorlist']/li").first.text spin_assert(lambda: self.assertEqual(text, 'This field is required.')) def test_user_singup_bad_email(self): self.browser.visit(self.live_server_url + '/accounts/signup/') self.browser.find_by_name('username').fill('bob') self.browser.find_by_name('email').fill('bobcultureplex.ca') self.browser.find_by_name('password1').fill('bob_secret') self.browser.find_by_name('password2').fill('bob_secret') self.browser.find_by_value('Signup').first.click() text = self.browser.find_by_xpath( "//ul[@class='errorlist']/li").first.text spin_assert( lambda: self.assertEqual(text, 'Enter a valid email address.')) def test_user_singup_empty_name(self): self.browser.visit(self.live_server_url + '/accounts/signup/') self.browser.find_by_name('username').fill('') self.browser.find_by_name('email').fill('*****@*****.**') self.browser.find_by_name('password1').fill('bob_secret') self.browser.find_by_name('password2').fill('bob_secret') self.browser.find_by_value('Signup').first.click() text = self.browser.find_by_xpath( "//ul[@class='errorlist']/li").first.text spin_assert(lambda: self.assertEqual(text, 'This field is required.')) def test_user_singup_empty_password(self): self.browser.visit(self.live_server_url + '/accounts/signup/') self.browser.find_by_name('username').fill('bob') self.browser.find_by_name('email').fill('*****@*****.**') self.browser.find_by_name('password1').fill('') self.browser.find_by_name('password2').fill('bob_secret') self.browser.find_by_value('Signup').first.click() text = self.browser.find_by_xpath( "//ul[@class='errorlist']/li").first.text spin_assert(lambda: self.assertEqual(text, 'This field is required.')) def test_user_singup_password_unmatched(self): self.browser.visit(self.live_server_url + '/accounts/signup/') self.browser.find_by_name('username').fill('bob') self.browser.find_by_name('email').fill('*****@*****.**') self.browser.find_by_name('password1').fill('bob_secret') self.browser.find_by_name('password2').fill('bob_password') self.browser.find_by_value('Signup').first.click() text = self.browser.find_by_xpath( "//ul[@class='errorlist']/li").first.text spin_assert(lambda: self.assertEqual( text, "The two password fields didn't match.")) def test_user_signin(self): signup(self, 'bob', '*****@*****.**', 'bob_secret') signin(self, 'bob', 'bob_secret') spin_assert(lambda: self.assertEqual(self.browser.title, 'SylvaDB - Dashboard')) logout(self) def test_user_signin_empty_user(self): signup(self, 'bob', '*****@*****.**', 'bob_secret') self.browser.visit(self.live_server_url + '/accounts/signin/') self.browser.find_by_name('identification').fill('') self.browser.find_by_name('password').fill('bob_secret') self.browser.find_by_xpath( "//div[@id='body']/div/form/input")[1].click() text = self.browser.find_by_xpath( "//ul[@class='errorlist']/li").first.text spin_assert(lambda: self.assertEqual( text, 'Either supply us with your email or username.')) def test_user_signin_bad_user(self): signup(self, 'bob', '*****@*****.**', 'bob_secret') self.browser.visit(self.live_server_url + '/accounts/signin/') self.browser.find_by_name('identification').fill('alice') self.browser.find_by_name('password').fill('bob_secret') self.browser.find_by_xpath( "//div[@id='body']/div/form/input")[1].click() text = self.browser.find_by_xpath( "//ul[@class='errorlist']/li").first.text spin_assert(lambda: self.assertEqual( text, 'Please enter a correct username or email and password. Note that both fields are case-sensitive.' )) def test_user_signin_empty_password(self): signup(self, 'bob', '*****@*****.**', 'bob_secret') self.browser.visit(self.live_server_url + '/accounts/signin/') self.browser.find_by_name('identification').fill('bob') self.browser.find_by_name('password').fill('') self.browser.find_by_xpath( "//div[@id='body']/div/form/input")[1].click() text = self.browser.find_by_xpath( "//ul[@class='errorlist']/li").first.text spin_assert(lambda: self.assertEqual(text, 'This field is required.')) def test_user_signin_bad_password(self): signup(self, 'bob', '*****@*****.**', 'bob_secret') self.browser.visit(self.live_server_url + '/accounts/signin/') self.browser.find_by_name('identification').fill('bob') self.browser.find_by_name('password').fill('alice_secret') self.browser.find_by_xpath( "//div[@id='body']/div/form/input")[1].click() text = self.browser.find_by_xpath( "//ul[@class='errorlist']/li").first.text spin_assert(lambda: self.assertEqual( text, 'Please enter a correct username or email and password. Note that both fields are case-sensitive.' )) def test_user_logout(self): signup(self, 'bob', '*****@*****.**', 'bob_secret') signin(self, 'bob', 'bob_secret') logout(self) spin_assert(lambda: self.assertEqual(self.browser.title, 'SylvaDB - Signed out')) spin_assert(lambda: self.assertEqual( self.browser.find_by_css('.body-inside').first.value, 'You have been signed out. Till we meet again.')) def test_user_details(self): signup(self, 'bob', '*****@*****.**', 'bob_secret') signin(self, 'bob', 'bob_secret') spin_assert(lambda: self.assertEqual(self.browser.title, 'SylvaDB - Dashboard')) self.browser.find_link_by_href('/accounts/bob/').first.click() spin_assert(lambda: self.assertEqual(self.browser.title, "SylvaDB - bob's profile.")) self.browser.find_link_by_href('/accounts/bob/edit/').first.click() spin_assert(lambda: self.assertEqual(self.browser.title, 'SylvaDB - Account setup')) self.browser.find_by_name('first_name').fill('Bob') self.browser.find_by_name('last_name').fill('Doe') self.browser.attach_file( 'mugshot', 'http://www.gravatar.com/avatar/3d4bcca5d9c3a56a0282f308f9acda07?s=90' ) self.browser.select('language', 'en') self.browser.select('gender', '1') self.browser.find_by_name('website').fill('http://www.bobweb.com') self.browser.find_by_name('location').fill('London, Ontario') self.browser.find_by_name('birth_date').fill('01/01/1975') self.browser.find_by_name('about_me').fill('I am a very nice guy') self.browser.find_by_name('institution').fill('University') self.browser.find_by_name('company').fill('CulturePlex') self.browser.find_by_name('lab').fill('CulturePlex') self.browser.find_by_value('Save changes').first.click() spin_assert(lambda: self.assertEqual(self.browser.title, "SylvaDB - bob's profile.")) logout(self) def test_user_details_bad_website(self): signup(self, 'bob', '*****@*****.**', 'bob_secret') signin(self, 'bob', 'bob_secret') spin_assert(lambda: self.assertEqual(self.browser.title, 'SylvaDB - Dashboard')) self.browser.find_link_by_href('/accounts/bob/').first.click() spin_assert(lambda: self.assertEqual(self.browser.title, "SylvaDB - bob's profile.")) self.browser.find_link_by_href('/accounts/bob/edit/').first.click() spin_assert(lambda: self.assertEqual(self.browser.title, 'SylvaDB - Account setup')) self.browser.find_by_name('first_name').fill('Bob') self.browser.find_by_name('last_name').fill('Doe') self.browser.attach_file( 'mugshot', 'http://www.gravatar.com/avatar/3d4bcca5d9c3a56a0282f308f9acda07?s=90' ) self.browser.select('language', 'en') self.browser.select('gender', '1') self.browser.find_by_name('website').fill('bobweb') self.browser.find_by_name('location').fill('London, Ontario') self.browser.find_by_name('birth_date').fill('01/01/1975') self.browser.find_by_name('about_me').fill('I am a very nice guy') self.browser.find_by_name('institution').fill('University') self.browser.find_by_name('company').fill('CulturePlex') self.browser.find_by_name('lab').fill('CulturePlex') self.browser.find_by_value('Save changes').first.click() spin_assert(lambda: self.assertEqual(self.browser.title, 'SylvaDB - Account setup')) logout(self) def test_user_details_bad_birthdate(self): signup(self, 'bob', '*****@*****.**', 'bob_secret') signin(self, 'bob', 'bob_secret') spin_assert(lambda: self.assertEqual(self.browser.title, 'SylvaDB - Dashboard')) self.browser.find_link_by_href('/accounts/bob/').first.click() spin_assert(lambda: self.assertEqual(self.browser.title, "SylvaDB - bob's profile.")) self.browser.find_link_by_href('/accounts/bob/edit/').first.click() spin_assert(lambda: self.assertEqual(self.browser.title, 'SylvaDB - Account setup')) self.browser.find_by_name('first_name').fill('Bob') self.browser.find_by_name('last_name').fill('Doe') self.browser.attach_file( 'mugshot', 'http://www.gravatar.com/avatar/3d4bcca5d9c3a56a0282f308f9acda07?s=90' ) self.browser.select('language', 'en') self.browser.select('gender', '1') self.browser.find_by_name('website').fill('http://www.bobweb.com') self.browser.find_by_name('location').fill('London, Ontario') self.browser.find_by_name('birth_date').fill('birthdate') self.browser.find_by_name('about_me').fill('I am a very nice guy') self.browser.find_by_name('institution').fill('University') self.browser.find_by_name('company').fill('CulturePlex') self.browser.find_by_name('lab').fill('CulturePlex') self.browser.find_by_value('Save changes').first.click() text = self.browser.find_by_xpath( "//ul[@class='errorlist']/li").first.text spin_assert(lambda: self.assertEqual(text, 'Enter a valid date.')) logout(self) def test_user_details_future_birthdate(self): signup(self, 'bob', '*****@*****.**', 'bob_secret') signin(self, 'bob', 'bob_secret') spin_assert(lambda: self.assertEqual(self.browser.title, 'SylvaDB - Dashboard')) self.browser.find_link_by_href('/accounts/bob/').first.click() spin_assert(lambda: self.assertEqual(self.browser.title, "SylvaDB - bob's profile.")) self.browser.find_link_by_href('/accounts/bob/edit/').first.click() spin_assert(lambda: self.assertEqual(self.browser.title, 'SylvaDB - Account setup')) self.browser.find_by_name('first_name').fill('Bob') self.browser.find_by_name('last_name').fill('Doe') self.browser.attach_file( 'mugshot', 'http://www.gravatar.com/avatar/3d4bcca5d9c3a56a0282f308f9acda07?s=90' ) self.browser.select('language', 'en') self.browser.select('gender', '1') self.browser.find_by_name('website').fill('http://www.bobweb.com') self.browser.find_by_name('location').fill('London, Ontario') self.browser.find_by_name('birth_date').fill('2020-01-11') self.browser.find_by_name('about_me').fill('I am a very nice guy') self.browser.find_by_name('institution').fill('University') self.browser.find_by_name('company').fill('CulturePlex') self.browser.find_by_name('lab').fill('CulturePlex') self.browser.find_by_value('Save changes').first.click() text = self.browser.find_by_xpath( "//ul[@class='errorlist']/li").first.text spin_assert(lambda: self.assertEqual( text, 'You need to introduce a past date.')) logout(self) def test_user_change_pass(self): signup(self, 'bob', '*****@*****.**', 'bob_secret') signin(self, 'bob', 'bob_secret') spin_assert(lambda: self.assertEqual(self.browser.title, 'SylvaDB - Dashboard')) self.browser.find_link_by_href('/accounts/bob/').first.click() spin_assert(lambda: self.assertEqual(self.browser.title, "SylvaDB - bob's profile.")) self.browser.find_link_by_href('/accounts/bob/password/').first.click() spin_assert(lambda: self.assertEqual(self.browser.title, 'SylvaDB - Change password')) self.browser.find_by_name('old_password').fill('bob_secret') self.browser.find_by_name('new_password1').fill('bob_password') self.browser.find_by_name('new_password2').fill('bob_password') self.browser.find_by_value('Change password').first.click() spin_assert(lambda: self.assertEqual(self.browser.title, 'SylvaDB - Password changed')) logout(self) def test_user_change_pass_empty(self): signup(self, 'bob', '*****@*****.**', 'bob_secret') signin(self, 'bob', 'bob_secret') spin_assert(lambda: self.assertEqual(self.browser.title, 'SylvaDB - Dashboard')) self.browser.find_link_by_href('/accounts/bob/').first.click() spin_assert(lambda: self.assertEqual(self.browser.title, "SylvaDB - bob's profile.")) self.browser.find_link_by_href('/accounts/bob/password/').first.click() spin_assert(lambda: self.assertEqual(self.browser.title, 'SylvaDB - Change password')) self.browser.find_by_name('old_password').fill('') self.browser.find_by_name('new_password1').fill('bob_password') self.browser.find_by_name('new_password2').fill('bob_password') self.browser.find_by_value('Change password').first.click() text = self.browser.find_by_xpath( "//ul[@class='errorlist']/li").first.text spin_assert(lambda: self.assertEqual(text, 'This field is required.')) logout(self) def test_user_change_pass_incorrectly(self): signup(self, 'bob', '*****@*****.**', 'bob_secret') signin(self, 'bob', 'bob_secret') spin_assert(lambda: self.assertEqual(self.browser.title, 'SylvaDB - Dashboard')) self.browser.find_link_by_href('/accounts/bob/').first.click() spin_assert(lambda: self.assertEqual(self.browser.title, "SylvaDB - bob's profile.")) self.browser.find_link_by_href('/accounts/bob/password/').first.click() spin_assert(lambda: self.assertEqual(self.browser.title, 'SylvaDB - Change password')) self.browser.find_by_name('old_password').fill('bad_password') self.browser.find_by_name('new_password1').fill('bob_password') self.browser.find_by_name('new_password2').fill('bob_password') self.browser.find_by_value('Change password').first.click() text = self.browser.find_by_xpath( "//ul[@class='errorlist']/li").first.text spin_assert(lambda: self.assertEqual( text, 'Your old password was entered incorrectly. Please enter it again.' )) logout(self) def test_user_change_new_pass_empty(self): signup(self, 'bob', '*****@*****.**', 'bob_secret') signin(self, 'bob', 'bob_secret') spin_assert(lambda: self.assertEqual(self.browser.title, 'SylvaDB - Dashboard')) self.browser.find_link_by_href('/accounts/bob/').first.click() spin_assert(lambda: self.assertEqual(self.browser.title, "SylvaDB - bob's profile.")) self.browser.find_link_by_href('/accounts/bob/password/').first.click() spin_assert(lambda: self.assertEqual(self.browser.title, 'SylvaDB - Change password')) self.browser.find_by_name('old_password').fill('bob_secret') self.browser.find_by_name('new_password1').fill('') self.browser.find_by_name('new_password2').fill('bob_password') self.browser.find_by_value('Change password').first.click() text = self.browser.find_by_xpath( "//ul[@class='errorlist']/li").first.text spin_assert(lambda: self.assertEqual(text, 'This field is required.')) logout(self) def test_user_change_new_pass_unmatched(self): signup(self, 'bob', '*****@*****.**', 'bob_secret') signin(self, 'bob', 'bob_secret') spin_assert(lambda: self.assertEqual(self.browser.title, 'SylvaDB - Dashboard')) self.browser.find_link_by_href('/accounts/bob/').first.click() spin_assert(lambda: self.assertEqual(self.browser.title, "SylvaDB - bob's profile.")) self.browser.find_link_by_href('/accounts/bob/password/').first.click() spin_assert(lambda: self.assertEqual(self.browser.title, 'SylvaDB - Change password')) self.browser.find_by_name('old_password').fill('bob_secret') self.browser.find_by_name('new_password1').fill('bob_password') self.browser.find_by_name('new_password2').fill('alice_password') self.browser.find_by_value('Change password').first.click() text = self.browser.find_by_xpath( "//ul[@class='errorlist']/li").first.text spin_assert(lambda: self.assertEqual( text, "The two password fields didn't match.")) logout(self) def test_user_change_mail(self): signup(self, 'bob', '*****@*****.**', 'bob_secret') signin(self, 'bob', 'bob_secret') spin_assert(lambda: self.assertEqual(self.browser.title, 'SylvaDB - Dashboard')) self.browser.find_link_by_href('/accounts/bob/').first.click() spin_assert(lambda: self.assertEqual(self.browser.title, "SylvaDB - bob's profile.")) self.browser.find_link_by_href('/accounts/bob/email/').first.click() spin_assert(lambda: self.assertEqual( self.browser.title, 'SylvaDB - Welcome to The Sylva Project')) self.browser.find_by_name('email').fill('*****@*****.**') self.browser.find_by_value('Change email').first.click() spin_assert(lambda: self.assertEqual(self.browser.title, 'SylvaDB - Email verification')) def test_user_change_mail_empty(self): signup(self, 'bob', '*****@*****.**', 'bob_secret') signin(self, 'bob', 'bob_secret') spin_assert(lambda: self.assertEqual(self.browser.title, 'SylvaDB - Dashboard')) self.browser.find_link_by_href('/accounts/bob/').first.click() spin_assert(lambda: self.assertEqual(self.browser.title, "SylvaDB - bob's profile.")) self.browser.find_link_by_href('/accounts/bob/email/').first.click() spin_assert(lambda: self.assertEqual( self.browser.title, 'SylvaDB - Welcome to The Sylva Project')) self.browser.find_by_name('email').fill('') self.browser.find_by_value('Change email').first.click() text = self.browser.find_by_xpath( "//ul[@class='errorlist']/li").first.text spin_assert(lambda: self.assertEqual(text, 'This field is required.')) def test_user_change_bad(self): signup(self, 'bob', '*****@*****.**', 'bob_secret') signin(self, 'bob', 'bob_secret') spin_assert(lambda: self.assertEqual(self.browser.title, 'SylvaDB - Dashboard')) self.browser.find_link_by_href('/accounts/bob/').first.click() spin_assert(lambda: self.assertEqual(self.browser.title, "SylvaDB - bob's profile.")) self.browser.find_link_by_href('/accounts/bob/email/').first.click() spin_assert(lambda: self.assertEqual( self.browser.title, 'SylvaDB - Welcome to The Sylva Project')) self.browser.find_by_name('email').fill('bobnewcultureplex.ca') self.browser.find_by_value('Change email').first.click() text = self.browser.find_by_xpath( "//ul[@class='errorlist']/li").first.text spin_assert( lambda: self.assertEqual(text, 'Enter a valid email address.'))
class SchemaTestCase(LiveServerTestCase): """ A set of tests for testing export schema, import schema and everything related to advanced types (patterns, options, etc.). """ def setUp(self): self.browser = Browser(firefox_path=os.getenv('FIREFOX_PATH', None)) socket.setdefaulttimeout(30) signup(self, 'bob', '*****@*****.**', 'bob_secret') signin(self, 'bob', 'bob_secret') def tearDown(self): logout(self) self.browser.quit() @classmethod def tearDownClass(cls): sleep(10) # It needs some time for close the LiverServerTestCase super(SchemaTestCase, cls).tearDownClass() def test_export_schema(self): create_graph(self) create_schema(self) create_type(self) self.browser.find_by_id('toolsMenu').first.click() cookies = {self.browser.cookies.all()[0]["name"]: self.browser.cookies.all()[0]["value"], self.browser.cookies.all()[1]["name"]: self.browser.cookies.all()[1]["value"]} result = requests.get(self.live_server_url + '/schemas/bobs-graph/export/', cookies=cookies) spin_assert(lambda: self.assertEqual( result.headers['content-type'], 'application/json')) spin_assert(lambda: self.assertEqual( self.browser.status_code.is_success(), True)) f = open('sylva/sylva/tests/files/bobs-graph_schema.json') spin_assert(lambda: self.assertEqual( f.read().split("\n")[0], result.content)) def test_import_schema(self): create_graph(self) create_schema(self) self.browser.find_by_id('schemaImport').first.click() file_path = os.path.join( os.path.abspath(os.path.dirname(__file__)), 'files/bobs-graph_schema.json' ) self.browser.attach_file('file', file_path) self.browser.find_by_value('Continue').first.click() spin_assert(lambda: self.assertEqual( self.browser.title, "SylvaDB - Bob's graph")) text = self.browser.find_by_id('diagramBoxField_bobs-graph.bobs-type.undefined').first.value spin_assert(lambda: self.assertEqual(text, "Name")) def test_new_type(self): create_graph(self) create_schema(self) self.browser.find_link_by_href( '/schemas/bobs-graph/types/create/').first.click() text = self.browser.find_by_xpath( "//div[@class='content2-first']/h2").first.value spin_assert(lambda: self.assertEqual(text, 'Type')) self.browser.find_by_name('name').first.fill("Bob's type") self.browser.find_by_xpath( "//div[@class='content2-first']/p/textarea[@name='description']").first.fill('The loved type') self.browser.find_by_value('Save Type').first.click() text = self.browser.find_by_xpath( "//div[@id='diagramBox_bobs-type']/div[@class='title']").first.value spin_assert(lambda: self.assertNotEqual(text.find("Bob's type"), -1)) def test_new_advanced_type(self): create_graph(self) create_schema(self) self.browser.find_link_by_href( '/schemas/bobs-graph/types/create/').first.click() text = self.browser.find_by_xpath( "//div[@class='content2-first']/h2").first.value spin_assert(lambda: self.assertEqual(text, 'Type')) self.browser.find_by_name('name').first.fill("Bob's type") self.browser.find_by_id('advancedModeButton').first.click() self.browser.find_by_name('properties-0-key').first.fill('Name') self.browser.find_by_name('properties-0-display').first.check() self.browser.find_by_name('properties-0-required').first.check() self.browser.find_by_name('properties-0-default').first.fill( "Bob's node default name") self.browser.find_by_name('properties-0-order').first.fill('1') self.browser.find_by_name('properties-0-description').first.fill( "The name of this Bob's node") self.browser.find_by_value('Save Type').first.click() text = self.browser.find_by_id( 'diagramBoxField_bobs-graph.bobs-type.undefined').first.value spin_assert(lambda: self.assertEqual(text, "Name")) def test_new_advanced_type_string_empty(self): create_graph(self) create_schema(self) self.browser.find_link_by_href( '/schemas/bobs-graph/types/create/').first.click() text = self.browser.find_by_xpath( "//div[@class='content2-first']/h2").first.value spin_assert(lambda: self.assertEqual(text, 'Type')) self.browser.find_by_name('name').first.fill("Bob's type") self.browser.find_by_id('advancedModeButton').first.click() self.browser.find_by_name('properties-0-key').first.fill('String name') self.browser.find_by_name('properties-0-display').first.check() self.browser.find_by_name('properties-0-required').first.check() self.browser.find_by_xpath("//select[@id='id_properties-0-datatype']/optgroup[@label='Basic']/option[@value='s']").first.click() self.browser.find_by_name('properties-0-order').first.fill('1') self.browser.find_by_name('properties-0-description').first.fill( "The name of this Bob's node") self.browser.find_by_value('Save Type').first.click() text = self.browser.find_by_id( 'diagramBoxField_bobs-graph.bobs-type.undefined').first.value spin_assert(lambda: self.assertEqual(text, "String name")) # Testing data self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//td[@class='dataActions']/a[@class='dataOption new']").first.click() self.browser.find_by_name('String name').first.fill('') self.browser.find_by_value("Save Bob's type").first.click() text = self.browser.find_by_xpath("//ul[@class='errorlist']/li").first.text spin_assert(lambda: self.assertEqual(text, 'This field is required.')) Graph.objects.get(name="Bob's graph").destroy() def test_new_advanced_type_boolean(self): create_graph(self) create_schema(self) self.browser.find_link_by_href( '/schemas/bobs-graph/types/create/').first.click() text = self.browser.find_by_xpath( "//div[@class='content2-first']/h2").first.value spin_assert(lambda: self.assertEqual(text, 'Type')) self.browser.find_by_name('name').first.fill("Bob's type") self.browser.find_by_id('advancedModeButton').first.click() self.browser.find_by_name('properties-0-key').first.fill('Boolean name') self.browser.find_by_name('properties-0-display').first.check() self.browser.find_by_name('properties-0-required').first.check() self.browser.find_by_xpath("//select[@id='id_properties-0-datatype']/optgroup[@label='Basic']/option[@value='b']").first.click() self.browser.find_by_name('properties-0-order').first.fill('1') self.browser.find_by_name('properties-0-description').first.fill( "The name of this Bob's node") self.browser.find_by_value('Save Type').first.click() text = self.browser.find_by_id( 'diagramBoxField_bobs-graph.bobs-type.undefined').first.value spin_assert(lambda: self.assertEqual(text, "Boolean name")) def test_new_advanced_type_number(self): create_graph(self) create_schema(self) self.browser.find_link_by_href( '/schemas/bobs-graph/types/create/').first.click() text = self.browser.find_by_xpath( "//div[@class='content2-first']/h2").first.value spin_assert(lambda: self.assertEqual(text, 'Type')) self.browser.find_by_name('name').first.fill("Bob's type") self.browser.find_by_id('advancedModeButton').first.click() self.browser.find_by_name('properties-0-key').first.fill('Number name') self.browser.find_by_name('properties-0-display').first.check() self.browser.find_by_name('properties-0-required').first.check() self.browser.find_by_xpath("//select[@id='id_properties-0-datatype']/optgroup[@label='Basic']/option[@value='n']").first.click() self.browser.find_by_name('properties-0-order').first.fill('1') self.browser.find_by_name('properties-0-description').first.fill( "The name of this Bob's node") self.browser.find_by_value('Save Type').first.click() text = self.browser.find_by_id( 'diagramBoxField_bobs-graph.bobs-type.undefined').first.value spin_assert(lambda: self.assertEqual(text, "Number name")) def test_new_advanced_type_number_float(self): create_graph(self) create_schema(self) self.browser.find_link_by_href( '/schemas/bobs-graph/types/create/').first.click() text = self.browser.find_by_xpath( "//div[@class='content2-first']/h2").first.value spin_assert(lambda: self.assertEqual(text, 'Type')) self.browser.find_by_name('name').first.fill("Bob's type") self.browser.find_by_id('advancedModeButton').first.click() self.browser.find_by_name('properties-0-key').first.fill('Number name') self.browser.find_by_name('properties-0-display').first.check() self.browser.find_by_name('properties-0-required').first.check() self.browser.find_by_xpath("//select[@id='id_properties-0-datatype']/optgroup[@label='Basic']/option[@value='n']").first.click() self.browser.find_by_name('properties-0-order').first.fill('1') self.browser.find_by_name('properties-0-description').first.fill( "The name of this Bob's node") self.browser.find_by_value('Save Type').first.click() text = self.browser.find_by_id( 'diagramBoxField_bobs-graph.bobs-type.undefined').first.value spin_assert(lambda: self.assertEqual(text, "Number name")) # Testing data self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//td[@class='dataActions']/a[@class='dataOption new']").first.click() self.browser.find_by_name('Number name').first.fill('1.5') self.browser.find_by_value("Save Bob's type").first.click() text = self.browser.find_by_css('input:invalid').first.value spin_assert(lambda: self.assertEqual(text, '1.5')) Graph.objects.get(name="Bob's graph").destroy() def test_new_advanced_type_number_string(self): create_graph(self) create_schema(self) self.browser.find_link_by_href( '/schemas/bobs-graph/types/create/').first.click() text = self.browser.find_by_xpath( "//div[@class='content2-first']/h2").first.value spin_assert(lambda: self.assertEqual(text, 'Type')) self.browser.find_by_name('name').first.fill("Bob's type") self.browser.find_by_id('advancedModeButton').first.click() self.browser.find_by_name('properties-0-key').first.fill('Number name') self.browser.find_by_name('properties-0-display').first.check() self.browser.find_by_name('properties-0-required').first.check() self.browser.find_by_xpath("//select[@id='id_properties-0-datatype']/optgroup[@label='Basic']/option[@value='n']").first.click() self.browser.find_by_name('properties-0-order').first.fill('1') self.browser.find_by_name('properties-0-description').first.fill( "The name of this Bob's node") self.browser.find_by_value('Save Type').first.click() text = self.browser.find_by_id( 'diagramBoxField_bobs-graph.bobs-type.undefined').first.value spin_assert(lambda: self.assertEqual(text, "Number name")) # Testing data self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//td[@class='dataActions']/a[@class='dataOption new']").first.click() self.browser.find_by_name('Number name').first.fill('number') self.browser.find_by_value("Save Bob's type").first.click() text = self.browser.find_by_css('input:invalid').first.outer_html spin_assert(lambda: self.assertEqual( text, '<input id="id_Number name" name="Number name" type="number">')) Graph.objects.get(name="Bob's graph").destroy() def test_new_advanced_type_text(self): create_graph(self) create_schema(self) self.browser.find_link_by_href( '/schemas/bobs-graph/types/create/').first.click() text = self.browser.find_by_xpath( "//div[@class='content2-first']/h2").first.value spin_assert(lambda: self.assertEqual(text, 'Type')) self.browser.find_by_name('name').first.fill("Bob's type") self.browser.find_by_id('advancedModeButton').first.click() self.browser.find_by_name('properties-0-key').first.fill('Text name') self.browser.find_by_name('properties-0-display').first.check() self.browser.find_by_name('properties-0-required').first.check() self.browser.find_by_xpath("//select[@id='id_properties-0-datatype']/optgroup[@label='Advanced']/option[@value='x']").first.click() self.browser.find_by_name('properties-0-order').first.fill('1') self.browser.find_by_name('properties-0-description').first.fill( "The name of this Bob's node") self.browser.find_by_value('Save Type').first.click() text = self.browser.find_by_id( 'diagramBoxField_bobs-graph.bobs-type.undefined').first.value spin_assert(lambda: self.assertEqual(text, "Text name")) def test_new_advanced_type_date(self): create_graph(self) create_schema(self) self.browser.find_link_by_href( '/schemas/bobs-graph/types/create/').first.click() text = self.browser.find_by_xpath( "//div[@class='content2-first']/h2").first.value spin_assert(lambda: self.assertEqual(text, 'Type')) self.browser.find_by_name('name').first.fill("Bob's type") self.browser.find_by_id('advancedModeButton').first.click() self.browser.find_by_name('properties-0-key').first.fill('Date name') self.browser.find_by_name('properties-0-display').first.check() self.browser.find_by_name('properties-0-required').first.check() self.browser.find_by_xpath("//select[@id='id_properties-0-datatype']/optgroup[@label='Advanced']/option[@value='d']").first.click() self.browser.find_by_name('properties-0-order').first.fill('1') self.browser.find_by_name('properties-0-description').first.fill( "The name of this Bob's node") self.browser.find_by_value('Save Type').first.click() text = self.browser.find_by_id( 'diagramBoxField_bobs-graph.bobs-type.undefined').first.value spin_assert(lambda: self.assertEqual(text, "Date name")) def test_new_advanced_type_time(self): create_graph(self) create_schema(self) self.browser.find_link_by_href( '/schemas/bobs-graph/types/create/').first.click() text = self.browser.find_by_xpath( "//div[@class='content2-first']/h2").first.value spin_assert(lambda: self.assertEqual(text, 'Type')) self.browser.find_by_name('name').first.fill("Bob's type") self.browser.find_by_id('advancedModeButton').first.click() self.browser.find_by_name('properties-0-key').first.fill('Time name') self.browser.find_by_name('properties-0-display').first.check() self.browser.find_by_name('properties-0-required').first.check() self.browser.find_by_xpath("//select[@id='id_properties-0-datatype']/optgroup[@label='Advanced']/option[@value='t']").first.click() self.browser.find_by_name('properties-0-order').first.fill('1') self.browser.find_by_name('properties-0-description').first.fill( "The name of this Bob's node") self.browser.find_by_value('Save Type').first.click() text = self.browser.find_by_id( 'diagramBoxField_bobs-graph.bobs-type.undefined').first.value spin_assert(lambda: self.assertEqual(text, "Time name")) def test_new_advanced_type_time_string(self): create_graph(self) create_schema(self) self.browser.find_link_by_href( '/schemas/bobs-graph/types/create/').first.click() text = self.browser.find_by_xpath( "//div[@class='content2-first']/h2").first.value spin_assert(lambda: self.assertEqual(text, 'Type')) self.browser.find_by_name('name').first.fill("Bob's type") self.browser.find_by_id('advancedModeButton').first.click() self.browser.find_by_name('properties-0-key').first.fill('Time name') self.browser.find_by_name('properties-0-display').first.check() self.browser.find_by_name('properties-0-required').first.check() self.browser.find_by_xpath("//select[@id='id_properties-0-datatype']/optgroup[@label='Advanced']/option[@value='t']").first.click() self.browser.find_by_name('properties-0-order').first.fill('1') self.browser.find_by_name('properties-0-description').first.fill( "The name of this Bob's node") self.browser.find_by_value('Save Type').first.click() text = self.browser.find_by_id( 'diagramBoxField_bobs-graph.bobs-type.undefined').first.value spin_assert(lambda: self.assertEqual(text, "Time name")) # Testing data self.browser.find_by_id('dataMenu').first.click() self.browser.find_by_xpath("//td[@class='dataActions']/a[@class='dataOption new']").first.click() self.browser.find_by_name('Time name').first.fill('0123456789') sleep(5) # Wating to the datepicker to open self.browser.find_by_xpath("//button[@class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all']").first.click() sleep(5) # Waiting to the datepicker to close self.browser.find_by_value("Save Bob's type").first.click() text = self.browser.find_by_xpath("//ul[@class='errorlist']/li").first.text spin_assert(lambda: self.assertEqual(text, 'Enter a valid time.')) Graph.objects.get(name="Bob's graph").destroy() def test_new_advanced_type_choices(self): create_graph(self) create_schema(self) self.browser.find_link_by_href( '/schemas/bobs-graph/types/create/').first.click() text = self.browser.find_by_xpath( "//div[@class='content2-first']/h2").first.value spin_assert(lambda: self.assertEqual(text, 'Type')) self.browser.find_by_name('name').first.fill("Bob's type") self.browser.find_by_id('advancedModeButton').first.click() self.browser.find_by_name('properties-0-key').first.fill('Choices name') self.browser.find_by_name('properties-0-display').first.check() self.browser.find_by_name('properties-0-required').first.check() self.browser.find_by_xpath("//select[@id='id_properties-0-datatype']/optgroup[@label='Advanced']/option[@value='c']").first.click() self.browser.find_by_name('properties-0-default').first.fill('Bob, Alice') self.browser.find_by_name('properties-0-order').first.fill('1') self.browser.find_by_name('properties-0-description').first.fill( "The name of this Bob's node") self.browser.find_by_value('Save Type').first.click() text = self.browser.find_by_id( 'diagramBoxField_bobs-graph.bobs-type.undefined').first.value spin_assert(lambda: self.assertEqual(text, "Choices name")) def test_new_advanced_type_float(self): create_graph(self) create_schema(self) self.browser.find_link_by_href( '/schemas/bobs-graph/types/create/').first.click() text = self.browser.find_by_xpath( "//div[@class='content2-first']/h2").first.value spin_assert(lambda: self.assertEqual(text, 'Type')) self.browser.find_by_name('name').first.fill("Bob's type") self.browser.find_by_id('advancedModeButton').first.click() self.browser.find_by_name('properties-0-key').first.fill('float name') self.browser.find_by_name('properties-0-display').first.check() self.browser.find_by_name('properties-0-required').first.check() self.browser.find_by_xpath("//select[@id='id_properties-0-datatype']/optgroup[@label='Advanced']/option[@value='f']").first.click() self.browser.find_by_name('properties-0-order').first.fill('1') self.browser.find_by_name('properties-0-description').first.fill( "The name of this Bob's node") self.browser.find_by_value('Save Type').first.click() text = self.browser.find_by_id( 'diagramBoxField_bobs-graph.bobs-type.undefined').first.value spin_assert(lambda: self.assertEqual(text, "float name")) def test_new_advanced_type_collaborator(self): create_graph(self) create_schema(self) self.browser.find_link_by_href( '/schemas/bobs-graph/types/create/').first.click() text = self.browser.find_by_xpath( "//div[@class='content2-first']/h2").first.value spin_assert(lambda: self.assertEqual(text, 'Type')) self.browser.find_by_name('name').first.fill("Bob's type") self.browser.find_by_id('advancedModeButton').first.click() self.browser.find_by_name('properties-0-key').first.fill('collaborator name') self.browser.find_by_name('properties-0-display').first.check() self.browser.find_by_name('properties-0-required').first.check() self.browser.find_by_xpath("//select[@id='id_properties-0-datatype']/optgroup[@label='Advanced']/option[@value='r']").first.click() self.browser.find_by_name('properties-0-order').first.fill('1') self.browser.find_by_name('properties-0-description').first.fill( "The name of this Bob's node") self.browser.find_by_value('Save Type').first.click() text = self.browser.find_by_id( 'diagramBoxField_bobs-graph.bobs-type.undefined').first.value spin_assert(lambda: self.assertEqual(text, "collaborator name")) def test_new_advanced_type_auto_now(self): create_graph(self) create_schema(self) self.browser.find_link_by_href( '/schemas/bobs-graph/types/create/').first.click() text = self.browser.find_by_xpath( "//div[@class='content2-first']/h2").first.value spin_assert(lambda: self.assertEqual(text, 'Type')) self.browser.find_by_name('name').first.fill("Bob's type") self.browser.find_by_id('advancedModeButton').first.click() self.browser.find_by_name('properties-0-key').first.fill('auto now name') self.browser.find_by_name('properties-0-display').first.check() self.browser.find_by_name('properties-0-required').first.check() self.browser.find_by_xpath("//select[@id='id_properties-0-datatype']/optgroup[@label='Auto']/option[@value='w']").first.click() self.browser.find_by_name('properties-0-order').first.fill('1') self.browser.find_by_name('properties-0-description').first.fill( "The name of this Bob's node") self.browser.find_by_value('Save Type').first.click() text = self.browser.find_by_id( 'diagramBoxField_bobs-graph.bobs-type.undefined').first.value spin_assert(lambda: self.assertEqual(text, "auto now name")) def test_new_advanced_type_auto_now_add(self): create_graph(self) create_schema(self) self.browser.find_link_by_href( '/schemas/bobs-graph/types/create/').first.click() text = self.browser.find_by_xpath( "//div[@class='content2-first']/h2").first.value spin_assert(lambda: self.assertEqual(text, 'Type')) self.browser.find_by_name('name').first.fill("Bob's type") self.browser.find_by_id('advancedModeButton').first.click() self.browser.find_by_name('properties-0-key').first.fill('auto now add name') self.browser.find_by_name('properties-0-display').first.check() self.browser.find_by_name('properties-0-required').first.check() self.browser.find_by_xpath("//select[@id='id_properties-0-datatype']/optgroup[@label='Auto']/option[@value='a']").first.click() self.browser.find_by_name('properties-0-order').first.fill('1') self.browser.find_by_name('properties-0-description').first.fill( "The name of this Bob's node") self.browser.find_by_value('Save Type').first.click() text = self.browser.find_by_id( 'diagramBoxField_bobs-graph.bobs-type.undefined').first.value spin_assert(lambda: self.assertEqual(text, "auto now add name")) def test_new_advanced_type_auto_increment(self): create_graph(self) create_schema(self) self.browser.find_link_by_href( '/schemas/bobs-graph/types/create/').first.click() text = self.browser.find_by_xpath( "//div[@class='content2-first']/h2").first.value spin_assert(lambda: self.assertEqual(text, 'Type')) self.browser.find_by_name('name').first.fill("Bob's type") self.browser.find_by_id('advancedModeButton').first.click() self.browser.find_by_name('properties-0-key').first.fill('auto increment name') self.browser.find_by_name('properties-0-display').first.check() self.browser.find_by_name('properties-0-required').first.check() self.browser.find_by_xpath("//select[@id='id_properties-0-datatype']/optgroup[@label='Auto']/option[@value='i']").first.click() self.browser.find_by_name('properties-0-order').first.fill('1') self.browser.find_by_name('properties-0-description').first.fill( "The name of this Bob's node") self.browser.find_by_value('Save Type').first.click() text = self.browser.find_by_id( 'diagramBoxField_bobs-graph.bobs-type.undefined').first.value spin_assert(lambda: self.assertEqual(text, "auto increment name")) def test_new_advanced_type_auto_increment_update(self): create_graph(self) create_schema(self) self.browser.find_link_by_href( '/schemas/bobs-graph/types/create/').first.click() text = self.browser.find_by_xpath( "//div[@class='content2-first']/h2").first.value spin_assert(lambda: self.assertEqual(text, 'Type')) self.browser.find_by_name('name').first.fill("Bob's type") self.browser.find_by_id('advancedModeButton').first.click() self.browser.find_by_name('properties-0-key').first.fill('auto increment update') self.browser.find_by_name('properties-0-display').first.check() self.browser.find_by_name('properties-0-required').first.check() self.browser.find_by_xpath("//select[@id='id_properties-0-datatype']/optgroup[@label='Auto']/option[@value='o']").first.click() self.browser.find_by_name('properties-0-order').first.fill('1') self.browser.find_by_name('properties-0-description').first.fill( "The name of this Bob's node") self.browser.find_by_value('Save Type').first.click() text = self.browser.find_by_id( 'diagramBoxField_bobs-graph.bobs-type.undefined').first.value spin_assert(lambda: self.assertEqual(text, "auto increment update")) def test_new_advanced_type_auto_user(self): create_graph(self) create_schema(self) self.browser.find_link_by_href( '/schemas/bobs-graph/types/create/').first.click() text = self.browser.find_by_xpath( "//div[@class='content2-first']/h2").first.value spin_assert(lambda: self.assertEqual(text, 'Type')) self.browser.find_by_name('name').first.fill("Bob's type") self.browser.find_by_id('advancedModeButton').first.click() self.browser.find_by_name('properties-0-key').first.fill('auto user name') self.browser.find_by_name('properties-0-display').first.check() self.browser.find_by_name('properties-0-required').first.check() self.browser.find_by_xpath("//select[@id='id_properties-0-datatype']/optgroup[@label='Auto']/option[@value='e']").first.click() self.browser.find_by_name('properties-0-order').first.fill('1') self.browser.find_by_name('properties-0-description').first.fill( "The name of this Bob's node") self.browser.find_by_value('Save Type').first.click() text = self.browser.find_by_id( 'diagramBoxField_bobs-graph.bobs-type.undefined').first.value spin_assert(lambda: self.assertEqual(text, "auto user name")) def test_schema_allowed_rel_addition(self): create_graph(self) spin_assert(lambda: self.assertEqual( self.browser.title, 'SylvaDB - Dashboard')) create_schema(self) create_type(self) spin_assert(lambda: self.assertEqual( self.browser.title, "SylvaDB - Bob's graph")) self.browser.find_by_id('allowedRelations').first.click() self.browser.select('source', '1') self.browser.find_by_name('name').fill("Bob's rel") self.browser.select('target', '1') self.browser.find_by_id('id_description').fill("This the allowed relationship for Bob's graph") self.browser.find_by_value('Save Type').first.click() spin_assert(lambda: self.assertEqual( self.browser.title, "SylvaDB - Bob's graph")) text = self.browser.find_by_xpath( "//div[@class='form-row indent']/label").first.value spin_assert(lambda: self.assertNotEqual(text.find("Bob's rel"), -1)) def test_schema_allowed_rel_addition_deletion(self): create_graph(self) spin_assert(lambda: self.assertEqual(self.browser.title, 'SylvaDB - Dashboard')) create_schema(self) create_type(self) spin_assert(lambda: self.assertEqual(self.browser.title, "SylvaDB - Bob's graph")) self.browser.find_by_id('allowedRelations').first.click() self.browser.select('source', '1') self.browser.find_by_name('name').fill("Bob's rel") self.browser.select('target', '1') self.browser.find_by_id('id_description').fill("This the allowed relationship for Bob's graph") self.browser.find_by_value('Save Type').first.click() spin_assert(lambda: self.assertEqual(self.browser.title, "SylvaDB - Bob's graph")) text = self.browser.find_by_xpath( "//div[@class='form-row indent']/label").first.value spin_assert(lambda: self.assertNotEqual(text.find("Bob's rel"), -1)) self.browser.find_by_xpath("//div[@class='form-row indent']/div[@class='form-row indent']/a").first.click() self.browser.find_by_xpath("//span[@class='buttonLinkOption buttonLinkRight']/a[@class='delete']").first.click() self.browser.choose('confirm', '1') self.browser.find_by_value('Continue').first.click() notExists = self.browser.is_element_not_present_by_xpath( "//div[@class='form-row indent']/label") spin_assert(lambda: self.assertEqual(notExists, True))