コード例 #1
0
class TestPasswordService(unittest.TestCase):
    def setUp(self):
        self.password_repository = PasswordRepository(test_database_connection())
        self.password_service = PasswordService(self.password_repository)
        self.password_repository.delete_all_passwords()

        self.user_repository = UserRepository(test_database_connection())
        self.user_service = UserService(self.user_repository)

        self.test_user_one = User("test_user_one", "test_pw1")
        self.test_user_two = User("test_user_two", "test_pw2")
        self.user_service.create_user(self.test_user_one)
        self.user_service.create_user(self.test_user_two)

    def test_num_of_users_correct(self):
        users = self.user_repository.get_all_users()

        self.assertEqual(len(users), 2)

    def test_add_new_password(self):
        user_for_password = self.user_repository.get_single_user(self.test_user_one)
        password_to_add = Password(
            "test_username",
            "test_pw",
            "test_site",
            user_for_password.user_id
        )
        added_password = self.password_service.add_new_password(password_to_add)

        self.assertEqual(added_password.user_id, user_for_password.user_id)
        self.assertEqual(added_password, password_to_add)

    def test_get_passwords_by_user(self):
        user_for_password = self.user_repository.get_single_user(self.test_user_one)

        for i in range(5):
            password_to_add = Password(
                f"test_username{i}",
                f"test_pw{i}",
                f"test_site{i}",
                user_for_password.user_id
            )
            self.password_service.add_new_password(password_to_add)

        passwords_by_user = self.password_service.get_passwords_by_user(user_for_password)

        self.assertEqual(len(passwords_by_user), 5)
        self.assertEqual(passwords_by_user[0].username, "test_username0")
コード例 #2
0
class UserView:
    def __init__(self, root, user, handle_login_view,
                 handle_add_password_view):
        """Käyttäjänäkymästä vastaava käyttöliittymäluokka

        Args:
            root: Juurielementti, joka hallitsee nykyistä näkymää
            user: User-luokan olio
            handle_login_view: UI-luokan metodi, joka siirtää näkymän LoginViewiin
            handle_add_password_view: UI-luokan metodi, joka siirtää näkymän AddPasswordViewiin
        """
        self._root = root
        self._frame = None
        self.user = user
        self._password_service = PasswordService()
        self._handle_login_view = handle_login_view
        self._handle_add_password_view = handle_add_password_view
        self._initialize()

    def pack(self):
        """Pakkaa käyttöliittymän komponentit ennen renderöintiä"""
        self._frame.pack(fill=constants.X)

    def destroy(self):
        """Tuhoaa tämänhetkisen näkymän"""
        self._frame.destroy()

    def handle_logout(self):
        """Kirjaa käyttäjän ulos järjestelmästä"""
        message_box = tk.messagebox.askquestion(
            'Info', f'Log out user {self.user.username}?')

        if message_box == 'yes':
            self._handle_login_view()
        else:
            return

    def handle_move_to_add_view(self, user):
        """Siirtää näkymän AddPasswordViewiin kun nappia painetaan"""
        self._handle_add_password_view(user)

    def insert_to_tree(self):
        """Luo näkymän käyttäjien lisäämille salasanoille"""
        passwords = self._password_service.get_passwords_by_user(self.user)

        self.numOfPasswords = 1
        self.iid = 0

        for x in passwords:
            self.tree.insert('',
                             'end',
                             iid=self.iid,
                             text=self.numOfPasswords,
                             values=(x.site, x.username, x.password))

            self.iid = self.iid + 1
            self.numOfPasswords = self.numOfPasswords + 1

    def _initialize(self):
        """Initialisoi näkymän"""
        self._frame = ttk.Frame(master=self._root)
        style = ttk.Style()

        style.configure('Treeview', rowheight=40)

        add_password_button = ttk.Button(
            master=self._frame,
            text="Add password",
            command=lambda: self._handle_add_password_view(self.user))
        logout_button = ttk.Button(master=self._frame,
                                   text="Logout",
                                   command=lambda: self.handle_logout())
        data_label = ttk.Label(master=self._frame,
                               text="Saved passwords",
                               font=(None, 20))

        add_password_button.grid(row=0,
                                 column=0,
                                 sticky=constants.W,
                                 padx=5,
                                 pady=5)
        logout_button.grid(row=0, column=1, sticky=constants.E, padx=5, pady=5)
        data_label.grid(row=1,
                        column=0,
                        sticky=(constants.E, constants.W),
                        pady=20)

        self.tree = ttk.Treeview(self._frame,
                                 columns=('Site', 'Username', 'Password'))
        self.tree.heading('#0', text='#')
        self.tree.heading('#1', text='Site')
        self.tree.heading('#2', text='Username')
        self.tree.heading('#3', text="Password")

        self.tree.column('#0', width=30)

        self.tree.grid(row=2, columnspan=4, sticky='nsew')

        self._frame.columnconfigure(0, weight=1, minsize=400)

        self.insert_to_tree()