def setUp(self): handle_db_reset() db.init_app(self.app) self.fm = FileManager(self.app.config["MSCOLAB_DATA_DIR"]) self.operation_name = "XYZ" self.description = "Template" self.userdata_0 = 'UV0@uv0', 'UV0', 'uv0' self.userdata_1 = "UV1@uv1", "UV1", "UV1" self.userdata_2 = "UV2@v2", "V2", "v2" assert add_user(self.userdata_0[0], self.userdata_0[1], self.userdata_0[2]) assert add_operation(self.operation_name, self.description) assert add_user_to_operation(path=self.operation_name, emailid=self.userdata_0[0]) self.user = User(self.userdata_0[0], self.userdata_0[1], self.userdata_0[2])
def setup(self): handle_db_reset() self.process, self.url, self.app, _, self.cm, self.fm = mscolab_start_server( PORTS) self.userdata = 'UV10@uv10', 'UV10', 'uv10' self.operation_name = "europe" assert add_user(self.userdata[0], self.userdata[1], self.userdata[2]) assert add_operation(self.operation_name, "test europe") assert add_user_to_operation(path=self.operation_name, emailid=self.userdata[0]) self.user = get_user(self.userdata[0]) QtTest.QTest.qWait(500) self.application = QtWidgets.QApplication(sys.argv) self.window = mss_pyui.MSSMainWindow( mscolab_data_dir=mscolab_settings.MSCOLAB_DATA_DIR) self.window.show()
def test_message_attachment(self): assert add_user(self.userdata[0], self.userdata[1], self.userdata[2]) with self.app.test_client() as test_client: operation, token = self._create_operation(test_client, self.userdata) attachment = io.BytesIO(b"this is a test") response = test_client.post('/message_attachment', data={ "token": token, "op_id": operation.id, "file": (attachment, 'test.txt'), "message_type": "3" }) assert response.status_code == 200 data = json.loads(response.data.decode('utf-8')) pfn = data["path"] assert "txt" in pfn assert "uploads" in pfn
def test_set_version_name(self): assert add_user(self.userdata[0], self.userdata[1], self.userdata[2]) with self.app.test_client() as test_client: operation, token = self._create_operation(test_client, self.userdata) fm, user = self._save_content(operation, self.userdata) fm.save_file(operation.id, "content2", user) all_changes = fm.get_all_changes(operation.id, user) ch_id = all_changes[1]["id"] version_name = "THIS" response = test_client.post('/set_version_name', data={ "token": token, "ch_id": ch_id, "op_id": operation.id, "version_name": version_name }) assert response.status_code == 200 data = json.loads(response.data.decode('utf-8')) assert data["success"] is True
def test_add_all_users_default_operation_creator_unknown_operation(self): with self.app.test_client(): assert add_user(self.userdata_1[0], self.userdata_1[1], self.userdata_1[2]) # creator added to new operation add_all_users_default_operation( path='UVXYZ', description="Operation to keep all users", access_level='creator') expected_result = [{ 'access_level': 'creator', 'category': 'default', 'description': 'Operation to keep all users', 'op_id': 7, 'path': 'UVXYZ' }] user = User.query.filter_by(emailid=self.userdata_1[0]).first() result = self.fm.list_operations(user) # we don't care here for op_id expected_result[0]['op_id'] = result[0]['op_id'] assert result == expected_result
def test_add_all_users_default_operation_viewer(self): with self.app.test_client(): assert add_user(self.userdata_1[0], self.userdata_1[1], self.userdata_1[2]) # viewer add_all_users_default_operation( path='XYZ', description="Operation to keep all users", access_level='viewer') expected_result = [{ 'access_level': 'viewer', 'category': 'default', 'description': 'Template', 'op_id': 7, 'path': 'XYZ' }] user = User.query.filter_by(emailid=self.userdata_1[0]).first() assert user is not None result = self.fm.list_operations(user) # we don't care here for op_id expected_result[0]['op_id'] = result[0]['op_id'] assert result == expected_result
def setup(self): handle_db_reset() self._reset_config_file() self.process, self.url, self.app, _, self.cm, self.fm = mscolab_start_server( PORTS) self.userdata = 'UV10@uv10', 'UV10', 'uv10' self.operation_name = "europe" assert add_user(self.userdata[0], self.userdata[1], self.userdata[2]) assert add_operation(self.operation_name, "test europe") assert add_user_to_operation(path=self.operation_name, emailid=self.userdata[0]) self.user = get_user(self.userdata[0]) QtTest.QTest.qWait(500) self.application = QtWidgets.QApplication(sys.argv) self.main_window = msui.MSUIMainWindow( mscolab_data_dir=mscolab_settings.MSCOLAB_DATA_DIR) self.main_window.show() self.window = mscolab.MSColab_ConnectDialog( parent=self.main_window, mscolab=self.main_window.mscolab) self.window.urlCb.setEditText(self.url) self.main_window.mscolab.connect_window = self.window self.window.show()
def setup(self): handle_db_reset() self.process, self.url, self.app, _, self.cm, self.fm = mscolab_start_server(PORTS) self.userdata = 'UV10@uv10', 'UV10', 'uv10' self.operation_name = "europe" assert add_user(self.userdata[0], self.userdata[1], self.userdata[2]) assert add_operation(self.operation_name, "test europe") assert add_user_to_operation(path=self.operation_name, emailid=self.userdata[0]) self.user = get_user(self.userdata[0]) QtTest.QTest.qWait(500) self.application = QtWidgets.QApplication(sys.argv) self.window = mss_pyui.MSSMainWindow(mscolab_data_dir=mscolab_settings.MSCOLAB_DATA_DIR) self.window.show() # connect and login to mscolab self._connect_to_mscolab() self._login(self.userdata[0], self.userdata[2]) # activate operation and open chat window self._activate_operation_at_index(0) self.window.actionVersionHistory.trigger() QtWidgets.QApplication.processEvents() self.version_window = self.window.mscolab.version_window assert self.version_window is not None QtTest.QTest.qWaitForWindowExposed(self.window) QtWidgets.QApplication.processEvents()
def main(): parser = argparse.ArgumentParser() parser.add_argument("-v", "--version", help="show version", action="store_true", default=False) parser.add_argument("--update", help="Updates MSS to the newest version", action="store_true", default=False) subparsers = parser.add_subparsers(help='Available actions', dest='action') server_parser = subparsers.add_parser("start", help="Start the mscolab server") server_parser.add_argument("--debug", help="show debugging log messages on console", action="store_true", default=False) server_parser.add_argument( "--logfile", help="If set to a name log output goes to that file", dest="logfile", default=None) database_parser = subparsers.add_parser("db", help="Manage mscolab database") database_parser = database_parser.add_mutually_exclusive_group( required=True) database_parser.add_argument("--init", help="Initialise database", action="store_true") database_parser.add_argument("--reset", help="Reset database", action="store_true") database_parser.add_argument("--seed", help="Seed database", action="store_true") database_parser.add_argument( "--users_by_file", type=argparse.FileType('r'), help= "adds users into database, fileformat: suggested_username name <email>" ) database_parser.add_argument( "--delete_users_by_file", type=argparse.FileType('r'), help="removes users from the database, fileformat: email") database_parser.add_argument( "--default_operation", help="adds all users into a default TEMPLATE operation", action="store_true") database_parser.add_argument( "--add_all_to_all_operation", help="adds all users into all other operations", action="store_true") args = parser.parse_args() if args.version: print( "***********************************************************************" ) print("\n Mission Support System (mss)\n") print( "***********************************************************************" ) print("Documentation: http://mss.rtfd.io") print("Version:", __version__) sys.exit() updater = Updater() if args.update: updater.on_update_available.connect( lambda old, new: updater.update_mss()) updater.on_log_update.connect(lambda s: print(s.replace("\n", ""))) updater.on_status_update.connect(lambda s: print(s.replace("\n", ""))) updater.run() while Worker.workers: list(Worker.workers)[0].wait() sys.exit() updater.on_update_available.connect(lambda old, new: logging.info( f"MSS can be updated from {old} to {new}.\nRun" " the --update argument to update the server.")) updater.run() if args.action == "start": handle_start(args) elif args.action == "db": if args.init: handle_db_init() elif args.reset: confirmation = confirm_action( "Are you sure you want to reset the database? This would delete " "all your data! (y/[n]):") if confirmation is True: handle_db_reset() elif args.seed: confirmation = confirm_action( "Are you sure you want to seed the database? Seeding will delete all your " "existing data and replace it with seed data (y/[n]):") if confirmation is True: handle_db_seed() elif args.users_by_file is not None: # fileformat: suggested_username name <email> confirmation = confirm_action( "Are you sure you want to add users to the database? (y/[n]):") if confirmation is True: for line in args.users_by_file.readlines(): info = line.split() username = info[0] emailid = info[-1][1:-1] password = secrets.token_hex(8) add_user(emailid, username, password) elif args.default_operation: confirmation = confirm_action( "Are you sure you want to add users to the default TEMPLATE operation? (y/[n]):" ) if confirmation is True: # adds all users as collaborator on the operation TEMPLATE if not added, command can be repeated add_all_users_default_operation(access_level='admin') elif args.add_all_to_all_operation: confirmation = confirm_action( "Are you sure you want to add users to the ALL operations? (y/[n]):" ) if confirmation is True: # adds all users to all Operations add_all_users_to_all_operations() elif args.delete_users_by_file: confirmation = confirm_action( "Are you sure you want to delete a user? (y/[n]):") if confirmation is True: # deletes users from the db for email in args.delete_users_by_file.readlines(): delete_user(email.strip())
def test_add_user_to_operation(self): with self.app.test_client(): assert add_user(self.userdata_2[0], self.userdata_2[1], self.userdata_2[2]) assert add_operation("operation2", "description") assert add_user_to_operation(path="operation2", access_level='admin', emailid=self.userdata_2[0])
def test_get_user(self): with self.app.test_client(): assert add_user(self.userdata_2[0], self.userdata_2[1], self.userdata_2[2]) user = get_user(self.userdata_2[0]) assert user.id is not None assert user.emailid == self.userdata_2[0]
def test_add_user(self): with self.app.test_client(): assert add_user(self.userdata_2[0], self.userdata_2[1], self.userdata_2[2]) assert add_user(self.userdata_2[0], self.userdata_2[1], self.userdata_2[2]) is False