| 
									
										
										
										
											2024-08-11 18:21:02 -05:00
										 |  |  | # -*- coding: utf-8; -*- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from unittest.mock import patch | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from sqlalchemy import orm | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from pyramid.httpexceptions import HTTPNotFound | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from wuttaweb.views import people | 
					
						
							| 
									
										
										
										
											2025-01-06 16:47:48 -06:00
										 |  |  | from wuttaweb.testing import WebTestCase | 
					
						
							| 
									
										
										
										
											2025-01-27 17:07:42 -06:00
										 |  |  | from wuttaweb.forms.widgets import GridWidget | 
					
						
							|  |  |  | from wuttaweb.grids import Grid | 
					
						
							| 
									
										
										
										
											2024-08-11 18:21:02 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class TestPersonView(WebTestCase): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def make_view(self): | 
					
						
							|  |  |  |         return people.PersonView(self.request) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-15 02:10:08 -05:00
										 |  |  |     def test_includeme(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.pyramid_config.include("wuttaweb.views.people") | 
					
						
							| 
									
										
										
										
											2024-08-15 02:10:08 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-11 18:21:02 -05:00
										 |  |  |     def test_get_query(self): | 
					
						
							|  |  |  |         view = self.make_view() | 
					
						
							|  |  |  |         query = view.get_query(session=self.session) | 
					
						
							|  |  |  |         self.assertIsInstance(query, orm.Query) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_configure_grid(self): | 
					
						
							|  |  |  |         model = self.app.model | 
					
						
							|  |  |  |         view = self.make_view() | 
					
						
							|  |  |  |         grid = view.make_grid(model_class=model.Setting) | 
					
						
							|  |  |  |         self.assertEqual(grid.linked_columns, []) | 
					
						
							|  |  |  |         view.configure_grid(grid) | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.assertIn("full_name", grid.linked_columns) | 
					
						
							| 
									
										
										
										
											2024-08-11 18:21:02 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_configure_form(self): | 
					
						
							|  |  |  |         model = self.app.model | 
					
						
							|  |  |  |         view = self.make_view() | 
					
						
							| 
									
										
										
										
											2024-08-21 14:38:34 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-27 17:07:42 -06:00
										 |  |  |         # full_name | 
					
						
							|  |  |  |         form = view.make_form(model_class=model.Person) | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.assertIn("full_name", form) | 
					
						
							|  |  |  |         with patch.object(view, "creating", new=True): | 
					
						
							| 
									
										
										
										
											2024-08-21 14:38:34 -05:00
										 |  |  |             view.configure_form(form) | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |             self.assertNotIn("full_name", form) | 
					
						
							| 
									
										
										
										
											2024-08-21 14:38:34 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-27 17:07:42 -06:00
										 |  |  |         # users | 
					
						
							|  |  |  |         person = model.Person() | 
					
						
							|  |  |  |         form = view.make_form(model_instance=person) | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.assertNotIn("users", form.widgets) | 
					
						
							|  |  |  |         with patch.object(view, "viewing", new=True): | 
					
						
							| 
									
										
										
										
											2024-08-21 14:38:34 -05:00
										 |  |  |             view.configure_form(form) | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |             self.assertIn("users", form.widgets) | 
					
						
							|  |  |  |             self.assertIsInstance(form.widgets["users"], GridWidget) | 
					
						
							| 
									
										
										
										
											2025-01-27 17:07:42 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_make_users_grid(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 23:02:38 -05:00
										 |  |  |         self.pyramid_config.add_route("users.view", "/users/{uuid}/view") | 
					
						
							|  |  |  |         self.pyramid_config.add_route("users.edit", "/users/{uuid}/edit") | 
					
						
							| 
									
										
										
										
											2025-01-27 17:07:42 -06:00
										 |  |  |         model = self.app.model | 
					
						
							|  |  |  |         view = self.make_view() | 
					
						
							|  |  |  |         person = model.Person(full_name="John Doe") | 
					
						
							| 
									
										
										
										
											2025-08-31 23:02:38 -05:00
										 |  |  |         self.session.add(person) | 
					
						
							|  |  |  |         user = model.User(username="john", person=person) | 
					
						
							|  |  |  |         self.session.add(user) | 
					
						
							|  |  |  |         self.session.commit() | 
					
						
							| 
									
										
										
										
											2025-01-27 17:07:42 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # basic | 
					
						
							|  |  |  |         grid = view.make_users_grid(person) | 
					
						
							|  |  |  |         self.assertIsInstance(grid, Grid) | 
					
						
							|  |  |  |         self.assertFalse(grid.linked_columns) | 
					
						
							|  |  |  |         self.assertFalse(grid.actions) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # view + edit actions | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         with patch.object(self.request, "is_root", new=True): | 
					
						
							| 
									
										
										
										
											2025-01-27 17:07:42 -06:00
										 |  |  |             grid = view.make_users_grid(person) | 
					
						
							|  |  |  |             self.assertIsInstance(grid, Grid) | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |             self.assertIn("username", grid.linked_columns) | 
					
						
							| 
									
										
										
										
											2025-01-27 17:07:42 -06:00
										 |  |  |             self.assertEqual(len(grid.actions), 2) | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |             self.assertEqual(grid.actions[0].key, "view") | 
					
						
							|  |  |  |             self.assertEqual(grid.actions[1].key, "edit") | 
					
						
							| 
									
										
										
										
											2025-01-27 17:07:42 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-08-31 23:02:38 -05:00
										 |  |  |             # render grid to ensure coverage for link urls | 
					
						
							|  |  |  |             grid.render_vue_template() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-27 17:07:42 -06:00
										 |  |  |     def test_objectify(self): | 
					
						
							|  |  |  |         model = self.app.model | 
					
						
							|  |  |  |         view = self.make_view() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # creating | 
					
						
							|  |  |  |         form = view.make_model_form() | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         form.validated = {"first_name": "Barney", "last_name": "Rubble"} | 
					
						
							| 
									
										
										
										
											2025-01-27 17:07:42 -06:00
										 |  |  |         person = view.objectify(form) | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.assertEqual(person.full_name, "Barney Rubble") | 
					
						
							| 
									
										
										
										
											2025-01-27 17:07:42 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # editing | 
					
						
							|  |  |  |         form = view.make_model_form(model_instance=person) | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         form.validated = {"first_name": "Betty", "last_name": "Rubble"} | 
					
						
							| 
									
										
										
										
											2025-01-27 17:07:42 -06:00
										 |  |  |         person2 = view.objectify(form) | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.assertEqual(person2.full_name, "Betty Rubble") | 
					
						
							| 
									
										
										
										
											2025-01-27 17:07:42 -06:00
										 |  |  |         self.assertIs(person2, person) | 
					
						
							| 
									
										
										
										
											2024-08-15 02:10:08 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-21 11:46:38 -05:00
										 |  |  |     def test_autocomplete_query(self): | 
					
						
							|  |  |  |         model = self.app.model | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         person1 = model.Person(full_name="George Jones") | 
					
						
							|  |  |  |         self.session.add(person1) | 
					
						
							|  |  |  |         person2 = model.Person(full_name="George Strait") | 
					
						
							|  |  |  |         self.session.add(person2) | 
					
						
							|  |  |  |         self.session.commit() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         view = self.make_view() | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         with patch.object(view, "Session", return_value=self.session): | 
					
						
							| 
									
										
										
										
											2024-08-21 11:46:38 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |             # both people match | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |             query = view.autocomplete_query("george") | 
					
						
							| 
									
										
										
										
											2024-08-21 11:46:38 -05:00
										 |  |  |             self.assertEqual(query.count(), 2) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             # just 1 match | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |             query = view.autocomplete_query("jones") | 
					
						
							| 
									
										
										
										
											2024-08-21 11:46:38 -05:00
										 |  |  |             self.assertEqual(query.count(), 1) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             # no matches | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |             query = view.autocomplete_query("sally") | 
					
						
							| 
									
										
										
										
											2024-08-21 11:46:38 -05:00
										 |  |  |             self.assertEqual(query.count(), 0) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-15 02:10:08 -05:00
										 |  |  |     def test_view_profile(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.pyramid_config.include("wuttaweb.views.common") | 
					
						
							|  |  |  |         self.pyramid_config.include("wuttaweb.views.auth") | 
					
						
							|  |  |  |         self.pyramid_config.add_route("people", "/people/") | 
					
						
							| 
									
										
										
										
											2024-08-15 02:10:08 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |         model = self.app.model | 
					
						
							|  |  |  |         person = model.Person(full_name="Barney Rubble") | 
					
						
							|  |  |  |         self.session.add(person) | 
					
						
							|  |  |  |         self.session.commit() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # sanity check | 
					
						
							|  |  |  |         view = self.make_view() | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.request.matchdict = {"uuid": person.uuid} | 
					
						
							| 
									
										
										
										
											2024-08-15 02:10:08 -05:00
										 |  |  |         response = view.view_profile(session=self.session) | 
					
						
							|  |  |  |         self.assertEqual(response.status_code, 200) | 
					
						
							| 
									
										
										
										
											2024-08-15 15:47:05 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_make_user(self): | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.pyramid_config.include("wuttaweb.views.common") | 
					
						
							| 
									
										
										
										
											2024-08-15 15:47:05 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |         model = self.app.model | 
					
						
							|  |  |  |         person = model.Person(full_name="Barney Rubble") | 
					
						
							|  |  |  |         self.session.add(person) | 
					
						
							|  |  |  |         self.session.commit() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # sanity check | 
					
						
							|  |  |  |         view = self.make_view() | 
					
						
							| 
									
										
										
										
											2025-08-31 12:26:43 -05:00
										 |  |  |         self.request.matchdict = {"uuid": person.uuid} | 
					
						
							| 
									
										
										
										
											2024-08-15 15:47:05 -05:00
										 |  |  |         response = view.make_user() | 
					
						
							|  |  |  |         # nb. this always redirects for now | 
					
						
							|  |  |  |         self.assertEqual(response.status_code, 302) |