From 6743fc47314c876c8b5b046cb6696bf4802c9f74 Mon Sep 17 00:00:00 2001 From: Lance Edgar Date: Tue, 17 Feb 2026 14:33:53 -0600 Subject: [PATCH] fix: fix first_name, last_name handling for User form since those fields are now association proxies in the data model --- src/wuttaweb/views/users.py | 27 +++++---------------------- tests/views/test_users.py | 10 +++++++--- 2 files changed, 12 insertions(+), 25 deletions(-) diff --git a/src/wuttaweb/views/users.py b/src/wuttaweb/views/users.py index 69096f7..9333b37 100644 --- a/src/wuttaweb/views/users.py +++ b/src/wuttaweb/views/users.py @@ -198,30 +198,13 @@ class UserView(MasterView): # pylint: disable=abstract-method user = super().objectify(form) # maybe update person name - if "first_name" in form or "last_name" in form: + if "first_name" in form and "last_name" in form: first_name = data.get("first_name") last_name = data.get("last_name") - if self.creating and (first_name or last_name): - user.person = auth.make_person( - first_name=first_name, last_name=last_name - ) - elif self.editing: - if first_name or last_name: - if user.person: - person = user.person - if "first_name" in form: - person.first_name = first_name - if "last_name" in form: - person.last_name = last_name - person.full_name = self.app.make_full_name( - person.first_name, person.last_name - ) - else: - user.person = auth.make_person( - first_name=first_name, last_name=last_name - ) - elif user.person: - user.person = None + if first_name or last_name: + user.person.full_name = self.app.make_full_name(first_name, last_name) + else: + user.person = None # maybe set user password if "set_password" in form and data.get("set_password"): diff --git a/tests/views/test_users.py b/tests/views/test_users.py index c345b97..2fe08aa 100644 --- a/tests/views/test_users.py +++ b/tests/views/test_users.py @@ -202,12 +202,14 @@ class TestUserView(WebTestCase): # form can update user password self.assertTrue(auth.check_user_password(barney, "testpass")) + self.assertFalse(auth.check_user_password(barney, "testpass2")) form = view.make_model_form(model_instance=barney) form.validated = {"username": "barney", "set_password": "testpass2"} with patch.object(view, "Session", return_value=self.session): user = view.objectify(form) self.assertIs(user, barney) self.assertTrue(auth.check_user_password(barney, "testpass2")) + self.assertFalse(auth.check_user_password(barney, "testpass")) # form can update user roles form = view.make_model_form(model_instance=barney) @@ -248,10 +250,12 @@ class TestUserView(WebTestCase): # nb. re-attach the person barney.person = self.session.query(model.Person).one() - # person name is updated - self.assertEqual(barney.person.first_name, "Barney") - self.assertEqual(barney.person.last_name, "Rubble") + # nb. first/last name was blanked out in last edit + self.assertEqual(barney.person.first_name, "") + self.assertEqual(barney.person.last_name, "") self.assertEqual(barney.person.full_name, "Barney Rubble") + + # person name is updated form = view.make_model_form(model_instance=barney) form.validated = { "username": "barney",