Repository navigation
Expand file tree
/
Copy pathfunctional_test.py
More file actions
executable file
·135 lines (105 loc) · 5.06 KB
/
Copy pathfunctional_test.py
File metadata and controls
executable file
·135 lines (105 loc) · 5.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
import unittest
from selenium import webdriver
import uuid
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
class StacksyncWebTests(unittest.TestCase):
"""
You must have a django server running to run this test
manage runserver 8000 (just run your regular django dev server and then run the tests)
IMPORTANT THIS TEST USES THE FOLLOWING USERS.
"""
def setUp(self):
self.password = "testpass"
self.browser = webdriver.Firefox()
self.base_url = "http://127.0.0.1:8000"
self.browser.implicitly_wait(5)
self.login_stacksync(self.username, self.password)
def tearDown(self):
self.browser.quit()
def test_stacksync_webapp_starts(self):
self.browser.get('http://localhost:8000')
self.assertEquals('StackSync', self.browser.title)
def login_stacksync(self, login_username, password):
self.browser.get(self.base_url + "/log_in/")
self.browser.find_element_by_id("id_username").clear()
self.browser.find_element_by_id("id_username").send_keys(login_username)
self.browser.find_element_by_id("id_password").clear()
self.browser.find_element_by_id("id_password").send_keys(password)
self.browser.find_element_by_xpath("//button[@type='submit']").click()
def test_login(self):
self.assertEquals('Proyecto - Bienvenido', self.browser.title)
def create_folder(self):
self.browser.find_element_by_id("folder").click()
prompt = self.browser.switch_to.alert
name_of_folder = str(uuid.uuid4())
prompt.send_keys(name_of_folder)
prompt.accept()
return name_of_folder
def test_create_a_new_folder(self):
"""
You name a folder like this: 'yy'
The result in HTML turns out to be: 'Yy'
"""
name_of_folder = self.create_folder()
table = self.browser.find_element_by_id('myTable')
rows = table.find_elements_by_tag_name('tr')
self.assertTrue(
any(name_of_folder.lower() in row.text.lower() for row in rows)
)
def find_folder(self, name_of_folder):
"""
Returns the td element of a row, if a returned the whole tr, contextmenu wouldnt show up
:param name_of_folder:
:return WebElement:
"""
table = self.browser.find_element_by_id('myTable')
columns = table.find_elements_by_tag_name('td')
return [column for column in columns if name_of_folder.lower() in column.text.lower()]
def open_folder_context_menu(self):
element_to_right_click_working = self.find_folder('aa')[0]
self.show_context_menu(element_to_right_click_working)
def get_folder_members(self, folder_td_element):
self.show_context_menu(folder_td_element)
menu_share_option = self.browser.find_element_by_css_selector('#jqContextMenu > ul > li#share').click()
folder_members = self.browser.find_elements_by_css_selector('#folder-members option')
return folder_members
def test_get_folder_members(self):
name_of_folder = self.create_folder()
folder_td_element = self.find_folder(name_of_folder)[0]
folder_members = self.get_folder_members(folder_td_element)
self.assertEquals(0, len(folder_members))
def show_context_menu(self, element_to_right_click):
actions = ActionChains(self.browser)
actions.move_to_element(element_to_right_click)
actions.context_click(element_to_right_click)
actions.perform()
def input_members_email_in_folder(self, email):
input_text = self.browser.find_element_by_css_selector("#folder-members + div > input")
input_text.send_keys(email)
input_text.send_keys(Keys.RETURN)
def test_share_a_folder(self):
name_of_folder = self.create_folder()
folder_td_element = self.find_folder(name_of_folder)[0]
self.show_context_menu(folder_td_element)
menu_share_option = self.browser.find_element_by_css_selector('#jqContextMenu > ul > li#share')
menu_share_option.click()
folder_members=self.browser.find_elements_by_css_selector('#folder-members option')
for user in users:
self.input_members_email_in_folder(user)
# Saves current members
self.browser.find_element_by_id('save-member-button').click()
# Closes modal window
close_button = '#share-folder-modal > div.modal-dialog > div.modal-content > div.modal-footer > button'
self.browser.find_element_by_css_selector(close_button).click()
folder_members = self.get_folder_members(folder_td_element)
self.assertEquals(3, len(folder_members))
self.browser.find_element_by_css_selector(close_button).click()