Ejemplo n.º 1
0
    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])
Ejemplo n.º 2
0
    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()
Ejemplo n.º 3
0
 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
Ejemplo n.º 4
0
 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
Ejemplo n.º 5
0
 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
Ejemplo n.º 6
0
 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
Ejemplo n.º 7
0
    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()
Ejemplo n.º 8
0
 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()
Ejemplo n.º 9
0
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())
Ejemplo n.º 10
0
 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])
Ejemplo n.º 11
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]
Ejemplo n.º 12
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