def testParsing(self):
     users = UsersList(self._file.path())
     staand = users.get("staand")
     stamax = users.get("stamax")
     chess_master = users.get("chess_master")
     dsz = users.get("dsz")
     none = users.get("any_other")
     self.assertNotEqual(staand, None, "'staand' user is 'None'")
     self.assertNotEqual(stamax, None, "'stamax' user is 'None'")
     self.assertNotEqual(chess_master, None, "'chess_master' user is 'None'")
     self.assertNotEqual(dsz, None, "'dsz' user is 'None'")
     self.assertEqual(none, None, "'none' user is NOT 'None'")
     self.assertTrue(staand.login() == "staand" and staand.password() == "081194", "'staand' attributes error")
     self.assertTrue(chess_master.login() == "chess_master" and chess_master.password() == "chess", "'chess_master' attributes error")
     self.assertTrue(stamax.login() == "stamax" and stamax.password() == "314159", "'stamax' attributes error")
     self.assertTrue(dsz.login() == "dsz" and dsz.password() == "dsz", "'dsz' attributes error")
     rights = staand.rights()
     self.assertTrue(rights.fieldsModifyingPermited() and rights.rowsAddingPermited() and rights.rowsRemovingPermited(), 
                     "'staand' rights error")
     rights = stamax.rights()
     self.assertFalse(rights.fieldsModifyingPermited() or rights.rowsAddingPermited() or rights.rowsRemovingPermited(), 
                     "'stamax' rights error")
     rights = chess_master.rights()
     self.assertTrue(rights.fieldsModifyingPermited() and rights.rowsAddingPermited() and not rights.rowsRemovingPermited(), 
                     "'chess_master' rights error")
     rights = dsz.rights()
     self.assertTrue(not rights.fieldsModifyingPermited() and not rights.rowsAddingPermited() and rights.rowsRemovingPermited(), 
                     "'dsz' rights error")
 def __init__(self, loginsFilePath):
     """
         Default constructor.
         'loginsFilePath' - path to the file with users data
     """
     QtGui.QDialog.__init__(self)
     self._ui = Ui_loginDialog()
     self._ui.setupUi(self)
     self._usersList = UsersList(loginsFilePath)
     QtCore.QObject.connect(self._ui.okButton, QtCore.SIGNAL("clicked()"), self.okButtonClicked)
     QtCore.QObject.connect(self._ui.cancelButton, QtCore.SIGNAL("clicked()"), self.cancelButtonClicked)
     QtCore.QObject.connect(self, QtCore.SIGNAL("rejected()"), self.cancelButtonClicked)
class LoginDialog(QtGui.QDialog):
    """
        Log-in dialog class
    """
    def __init__(self, loginsFilePath):
        """
            Default constructor.
            'loginsFilePath' - path to the file with users data
        """
        QtGui.QDialog.__init__(self)
        self._ui = Ui_loginDialog()
        self._ui.setupUi(self)
        self._usersList = UsersList(loginsFilePath)
        QtCore.QObject.connect(self._ui.okButton, QtCore.SIGNAL("clicked()"), self.okButtonClicked)
        QtCore.QObject.connect(self._ui.cancelButton, QtCore.SIGNAL("clicked()"), self.cancelButtonClicked)
        QtCore.QObject.connect(self, QtCore.SIGNAL("rejected()"), self.cancelButtonClicked)
        
    
    def okButtonClicked(self):
        """
            A slot for OK button "clicked()" signal
        """
        login = self._ui.loginEdit.text()
        password = self._ui.passwordEdit.text()
        user = self._usersList.get(login)
        if user == None or password != user.password():
            QtGui.QMessageBox.about(self, "Error...", "No such login-password pair was found!")
        else:
            self.hide()
            self.emit(QtCore.SIGNAL("userLoggedIn(QObject)"), user)
       
    
    def cancelButtonClicked(self):
        """
            A slot for CANCEL button "clicked()" signal
        """
        self.hide()
        self.emit(QtCore.SIGNAL("userLoggedIn(QObject)"), User("", ""))