def test_undo(self): url = url_join(self.url, 'token') r = requests.post(url, data={'email': 'a', 'password': '******'}) response1 = json.loads(r.text) r = requests.post(url, data={'email': 'b', 'password': '******'}) response2 = json.loads(r.text) def handle_chat_message(sno, message): self.file_message_counter[sno - 1] += 1 sio1 = socketio.Client() self.sockets.append(sio1) sio2 = socketio.Client() self.sockets.append(sio2) sio1.on('file-changed', handler=partial(handle_chat_message, 1)) sio2.on('file-changed', handler=partial(handle_chat_message, 2)) sio1.connect(self.url) sio2.connect(self.url) with self.app.app_context(): p_id = get_recent_pid(self.fm, self.user) User.query.filter_by(id=9).first() perm = Permission(u_id=9, p_id=p_id, access_level="admin") db.session.add(perm) db.session.commit() sio1.emit('start', response1) sio2.emit('start', response2) QtTest.QTest.qWait(100) sio1.emit( 'file-save', { "p_id": p_id, "token": response1['token'], "content": "file save content 1" }) QtTest.QTest.qWait(100) # second file change sio1.emit( 'file-save', { "p_id": p_id, "token": response1['token'], "content": "file save content 2" }) QtTest.QTest.qWait(100) with self.app.app_context(): p_id = get_recent_pid(self.fm, self.user) changes = Change.query.filter_by(p_id=p_id).all() assert self.fm.undo(changes[0].id, self.user) is True assert len(self.fm.get_all_changes(p_id, self.user)) == 3 assert self.fm.get_file(p_id, self.user) == "file save content 1"
def test_undo(self): with self.app.app_context(): p_id = get_recent_pid(self.fm, self.user) changes = Change.query.filter_by(p_id=p_id).all() assert self.fm.undo(changes[0].id, self.user) is True assert len(self.fm.get_all_changes(p_id, self.user)) == 3 assert self.fm.get_file(p_id, self.user) == "file save content 1"
def teardown(self): with self.app.app_context(): p_id = get_recent_pid(self.fm, self.user) self.fm.delete_file(p_id, self.user) db.session.commit() for socket in self.sockets: socket.disconnect()
def test_update_project(self): with self.app.app_context(): p_id = get_recent_pid(self.fm, self.user) # ToDo handle paths with blank characters here data = { "token": self.token, "p_id": p_id, "attribute": "path", "value": "a_diff_path" } get_proj_url = url_join(self.url, 'get_project_by_id') update_proj_url = url_join(self.url, 'update_project') r = requests.post(update_proj_url, data=data) assert r.text == "True" # to make sure that path has changed, which is indirectly known by this request # getting results properly r = requests.get(get_proj_url, data=data) assert r.text != "False" data = { "token": self.token, "p_id": p_id, "attribute": "description", "value": "a_diff description" } r = requests.post(update_proj_url, data=data) assert r.text == "True" with self.app.app_context(): project = Project.query.filter_by(id=p_id).first() assert project.path == "a_diff_path" assert project.description == "a_diff description"
def test_delete_project(self): with self.app.app_context(): response = mscolab_register_and_login(self.app, self.url, 'a', 'a', 'a') data, response = mscolab_create_project( self.app, self.url, response, path='f3', description='f3 test example') p_id = get_recent_pid(self.fm, self.user) assert p_id == 7 assert response.status == '200 OK' user2 = User.query.filter_by(id=9).first() assert self.fm.delete_file(p_id, user2) is False assert self.fm.delete_file(p_id, self.user) is True assert self.fm.delete_file(p_id, self.user) is False permissions = Permission.query.filter_by(p_id=p_id).all() assert len(permissions) == 0 projects_db = Project.query.filter_by(id=p_id).all() assert len(projects_db) == 0 changes = Change.query.filter_by(p_id=p_id).all() assert len(changes) == 0 messages = Message.query.filter_by(p_id=p_id).all() assert len(messages) == 0
def test_get_project(self): with self.app.app_context(): p_id = get_recent_pid(self.fm, self.user) data = {"token": self.token, "p_id": p_id} url = url_join(self.url, 'get_project_by_id') r = requests.get(url, data=data) assert json.loads(r.text)["content"] == self.fm.get_file( int(p_id), self.user)
def test_file_save(self): url = url_join(MSCOLAB_URL_TEST, 'token') r = requests.post(url, data={'email': 'a', 'password': '******'}) response1 = json.loads(r.text) r = requests.post(url, data={'email': 'b', 'password': '******'}) response2 = json.loads(r.text) def handle_chat_message(sno, message): self.file_message_counter[sno - 1] += 1 sio1 = socketio.Client() sio2 = socketio.Client() sio1.on('file-changed', handler=partial(handle_chat_message, 1)) sio2.on('file-changed', handler=partial(handle_chat_message, 2)) sio1.connect(MSCOLAB_URL_TEST) sio2.connect(MSCOLAB_URL_TEST) with self.app.app_context(): p_id = get_recent_pid(self.fm, self.user) user2 = User.query.filter_by(id=9).first() perm = Permission(u_id=9, p_id=p_id, access_level="admin") db.session.add(perm) db.session.commit() sio1.emit('start', response1) sio2.emit('start', response2) time.sleep(2) sio1.emit( 'file-save', { "p_id": p_id, "token": response1['token'], "content": "file save content 1" }) time.sleep(2) # second file change sio1.emit( 'file-save', { "p_id": p_id, "token": response1['token'], "content": "file save content 2" }) time.sleep(2) # check if there were events triggered related to file-save assert self.file_message_counter[0] == 2 assert self.file_message_counter[1] == 2 # check if content is saved in file assert self.fm.get_file(p_id, user2) == "file save content 2" # check if change is saved properly changes = self.fm.get_all_changes(p_id, self.user) assert len(changes) == 2 change = Change.query.order_by(Change.created_at.desc()).first() change_content = self.fm.get_change_content(change.id) assert change_content == "file save content 2" perm = Permission.query.filter_by(u_id=9, p_id=p_id).first() db.session.delete(perm) db.session.commit() # to disconnect sockets later self.sockets.append(sio1) self.sockets.append(sio2)
def test_is_admin(self): with self.app.app_context(): p_id = get_recent_pid(self.fm, self.user) u_id = self.user.id assert self.fm.is_admin(u_id, p_id) is True undefined_p_id = 123 assert self.fm.is_admin(u_id, undefined_p_id) is False no_perm_p_id = 2 assert self.fm.is_admin(u_id, no_perm_p_id) is False
def test_authorized_users(self): with self.app.app_context(): p_id = get_recent_pid(self.fm, self.user) data = {"token": self.token, "p_id": p_id} url = url_join(self.url, 'authorized_users') r = requests.get(url, data=data) users = json.loads(r.text)["users"] assert len(users) == 2 # for any other random process which doesn't exist it will return empty array data["p_id"] = 43 r = requests.get(url, data=data) users = json.loads(r.text)["users"] assert len(users) == 0
def test_get_users_with_permission(self): with self.app.app_context(): p_id = get_recent_pid(self.fm, self.user) data = {"token": self.token, "p_id": p_id} url = url_join(self.url, "users_with_permission") res = requests.get(url, data=data).json() assert res["success"] is True data["p_id"] = self.undefined_p_id res = requests.get(url, data=data).json() assert res["success"] is False data["p_id"] = self.no_perm_p_id res = requests.get(url, data=data).json() assert res["success"] is False
def test_modify_project(self): with self.app.app_context(): p_id = get_recent_pid(self.fm, self.user) # testing for wrong characters in path like ' ', '/' assert self.fm.update_project(p_id, 'path', 'dummy wrong', self.user) is False assert self.fm.update_project(p_id, 'path', 'dummy/wrong', self.user) is False assert self.fm.update_project(p_id, 'path', 'dummy', self.user) is True assert os.path.exists( os.path.join(mscolab_settings.MSCOLAB_DATA_DIR, 'dummy')) assert self.fm.update_project(p_id, 'description', 'dummy', self.user) is True
def test_delete_project(self): with self.app.app_context(): p_id = get_recent_pid(self.fm, self.user) user2 = User.query.filter_by(id=9).first() assert self.fm.delete_file(p_id, user2) is False assert self.fm.delete_file(p_id, self.user) is True assert self.fm.delete_file(p_id, self.user) is False permissions = Permission.query.filter_by(p_id=p_id).all() assert len(permissions) == 0 projects_db = Project.query.filter_by(id=p_id).all() assert len(projects_db) == 0 changes = Change.query.filter_by(p_id=p_id).all() assert len(changes) == 0 messages = Message.query.filter_by(p_id=p_id).all() assert len(messages) == 0
def test_change_content(self): with self.app.app_context(): p_id = get_recent_pid(self.fm, self.user) ch = Change(int(p_id), 8, "", "Version changed", "some comment") db.session.add(ch) db.session.commit() data = {"token": self.token, "p_id": p_id} get_proj_url = url_join(self.url, 'get_project_by_id') res = requests.get(get_proj_url, data=data) content = json.loads(res.text)["content"] change = Change.query.order_by(Change.created_at.desc()).first() data = {"token": self.token, "ch_id": change.id} get_change_content_url = url_join(self.url, 'get_change_content') res = requests.get(get_change_content_url, data=data).json() change_content = res["content"] assert content.strip() == change_content.strip()
def test_delete_bulk_permissions(self): with self.app.app_context(): p_id = get_recent_pid(self.fm, self.user) data = { "token": self.token, "p_id": p_id, "selected_userids": json.dumps([12, 13]), } url = url_join(self.url, 'delete_bulk_permissions') r = requests.post(url, data=data).json() assert r["success"] is True data["p_id"] = self.undefined_p_id r = requests.post(url, data=data).json() assert r["success"] is False data["p_id"] = self.no_perm_p_id r = requests.post(url, data=data).json() assert r["success"] is False
def test_change(self): """ since file needs to be saved to inflict changes, changes during integration tests have to be manually inserted """ with self.app.app_context(): p_id = get_recent_pid(self.fm, self.user) ch = Change(int(p_id), 8, "", "Version1", "some comment") db.session.add(ch) db.session.commit() data = {"token": self.token, "p_id": p_id} # test 'get all changes' request url = url_join(self.url, 'get_all_changes') r = requests.get(url, data=data) changes = json.loads(r.text)["changes"] assert len(changes) == 1 assert changes[0]["comment"] == "some comment"
def test_delete_project(self): with self.app.app_context(): response = mscolab_register_and_login(self.app, self.url, 'a', 'a', 'a') assert response.status == '200 OK' data, response = mscolab_create_project( self.app, self.url, response, path='f3', description='f3 test example') assert response.status == '200 OK' p_id = get_recent_pid(self.fm, self.user) # first free number after sseding assert p_id == 7 data = {"token": self.token, "p_id": p_id} url = url_join(self.url, 'delete_project') res = requests.post(url, data=data).json() assert res["success"] is True
def test_set_version_name(self): with self.app.app_context(): p_id = int(get_recent_pid(self.fm, self.user)) ch = Change(int(p_id), 8, "", "Version changed", "some comment") db.session.add(ch) db.session.commit() change = Change.query.filter_by(p_id=p_id).order_by( Change.created_at.desc()).first() data = { "token": self.token, "ch_id": change.id, "p_id": p_id, "version_name": "Test Version Name" } url = url_join(self.url, 'set_version_name') res = requests.post(url, data=data).json() assert res["success"] is True with self.app.app_context(): change = Change.query.filter_by(id=change.id).first() assert change.version_name == "Test Version Name"
def setup(self): self.process, self.url, self.app, self.sio, self.cm, self.fm = mscolab_start_server( PORTS) QtTest.QTest.qWait(500) self.application = QtWidgets.QApplication(sys.argv) self.window = MSSMscolabWindow( data_dir=mscolab_settings.MSCOLAB_DATA_DIR, mscolab_server_url=self.url) with self.app.app_context(): response = mscolab_register_and_login(self.app, self.url, 'a1a@a1a', 'a1a', 'a1a') _ = mscolab_create_project(self.app, self.url, response, path='f3', description='f3 test example') self.user = User.query.filter_by(emailid="a1a@a1a").first() self.test_p_id = get_recent_pid(self.fm, self.user) self.test_sid = 25 socket_storage = {'s_id': self.test_sid, 'u_id': self.user.id} self.sockets = [socket_storage]
def test_get_recent_pid(self): with self.app.app_context(): p_id = get_recent_pid(self.fm, self.user) assert p_id == 4
def test_authorized_users(self): with self.app.app_context(): p_id = get_recent_pid(self.fm, self.user) assert p_id == 4 assert len(self.fm.get_authorized_users(p_id)) == 2
def test_get_project(self): with self.app.app_context(): p_id = get_recent_pid(self.fm, self.user) assert self.fm.get_file(p_id, self.user) is not False user2 = User.query.filter_by(id=9).first() assert self.fm.get_file(p_id, user2) is False