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")
class AddPasswordView: """Salasanojen lisäyksestä vastaava käyttöliittymäluokka""" def __init__(self, root, handle_user_view, user=None): """Konstruktori, luo uuden salasanojen lisäyksestä vastaavan näkymän Args: root: Juurielementti, joka hallitsee nykyistä näkymää handle_user_view: UI-luokan metodi, joka siirtää näkymän UserViewiin user: Kirjautunut käyttäjä, oletusarvoltaan None """ self._root = root self._frame = None self.user = user self._handle_user_view = handle_user_view self._password_service = PasswordService() 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_back_to_user_view(self): """Palauttaa näkymän UserViewiin """ self._handle_user_view(self.user) def handle_add_new_password(self, site, username, password): """Lisää uuden salasanan järjestelmään Args: site: String, sivusto johon salasana sekä käyttäjänimi liittyvät username: String, käyttäjänimi sivustolle password: String, salasana sivustolle """ if not site or not username or not password: return messagebox.showerror('Error', 'No empty fields allowed') user_id = self.user.user_id new_password = Password(username, password, site, user_id) result = self._password_service.add_new_password(new_password) messagebox.showinfo('Info', 'Password added') self.site_entry.delete(0, "end") self.username_entry.delete(0, "end") self.password_entry.delete(0, "end") return result def _initialize(self): """Initialisoi näkymän""" self._frame = ttk.Frame(master=self._root) heading_label = ttk.Label(master=self._frame, text="Add new credentials", font=(None, 20)) site_label = ttk.Label(master=self._frame, text="site", font=(None, 10)) self.site_entry = ttk.Entry(master=self._frame) username_label = ttk.Label(master=self._frame, text="username", font=(None, 10)) self.username_entry = ttk.Entry(master=self._frame) password_label = ttk.Label(master=self._frame, text="password", font=(None, 10)) self.password_entry = ttk.Entry(master=self._frame, show="*") submit_button = ttk.Button( master=self._frame, text="Submit", command=lambda: self.handle_add_new_password( self.site_entry.get(), self.username_entry.get(), self.password_entry.get())) cancel_button = ttk.Button( master=self._frame, text="Cancel", command=lambda: self.handle_back_to_user_view()) heading_label.grid(row=0, column=0, columnspan=2, sticky=constants.W, padx=5, pady=5) site_label.grid(row=1, column=0) self.site_entry.grid(row=1, column=1, sticky=(constants.E, constants.W), padx=2, pady=2, ipady=5) username_label.grid(row=2, column=0) self.username_entry.grid(row=2, column=1, sticky=(constants.E, constants.W), padx=2, pady=2, ipady=5) password_label.grid(row=3, column=0) self.password_entry.grid(row=3, column=1, sticky=(constants.E, constants.W), padx=2, pady=2, ipady=5) submit_button.grid(row=4, column=0, sticky=constants.E, padx=2, pady=5, ipady=5) cancel_button.grid(row=4, column=1, sticky=constants.W, padx=2, pady=5, ipady=5) self._frame.grid_columnconfigure(1, weight=1, minsize=400)