147 lines
4.8 KiB
Python
147 lines
4.8 KiB
Python
# -*- coding: utf-8; -*-
|
|
|
|
from unittest.mock import patch
|
|
|
|
from sqlalchemy import orm
|
|
|
|
from pyramid.httpexceptions import HTTPNotFound
|
|
|
|
from wuttaweb.views import people
|
|
from wuttaweb.testing import WebTestCase
|
|
from wuttaweb.forms.widgets import GridWidget
|
|
from wuttaweb.grids import Grid
|
|
|
|
|
|
class TestPersonView(WebTestCase):
|
|
|
|
def make_view(self):
|
|
return people.PersonView(self.request)
|
|
|
|
def test_includeme(self):
|
|
self.pyramid_config.include('wuttaweb.views.people')
|
|
|
|
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)
|
|
self.assertIn('full_name', grid.linked_columns)
|
|
|
|
def test_configure_form(self):
|
|
model = self.app.model
|
|
view = self.make_view()
|
|
|
|
# full_name
|
|
form = view.make_form(model_class=model.Person)
|
|
self.assertIn('full_name', form)
|
|
with patch.object(view, 'creating', new=True):
|
|
view.configure_form(form)
|
|
self.assertNotIn('full_name', form)
|
|
|
|
# users
|
|
person = model.Person()
|
|
form = view.make_form(model_instance=person)
|
|
self.assertNotIn('users', form.widgets)
|
|
with patch.object(view, 'viewing', new=True):
|
|
view.configure_form(form)
|
|
self.assertIn('users', form.widgets)
|
|
self.assertIsInstance(form.widgets['users'], GridWidget)
|
|
|
|
def test_make_users_grid(self):
|
|
model = self.app.model
|
|
view = self.make_view()
|
|
person = model.Person(full_name="John Doe")
|
|
|
|
# basic
|
|
grid = view.make_users_grid(person)
|
|
self.assertIsInstance(grid, Grid)
|
|
self.assertFalse(grid.linked_columns)
|
|
self.assertFalse(grid.actions)
|
|
|
|
# view + edit actions
|
|
with patch.object(self.request, 'is_root', new=True):
|
|
grid = view.make_users_grid(person)
|
|
self.assertIsInstance(grid, Grid)
|
|
self.assertIn('username', grid.linked_columns)
|
|
self.assertEqual(len(grid.actions), 2)
|
|
self.assertEqual(grid.actions[0].key, 'view')
|
|
self.assertEqual(grid.actions[1].key, 'edit')
|
|
|
|
def test_objectify(self):
|
|
model = self.app.model
|
|
view = self.make_view()
|
|
|
|
# creating
|
|
form = view.make_model_form()
|
|
form.validated = {'first_name': 'Barney', 'last_name': 'Rubble'}
|
|
person = view.objectify(form)
|
|
self.assertEqual(person.full_name, 'Barney Rubble')
|
|
|
|
# editing
|
|
form = view.make_model_form(model_instance=person)
|
|
form.validated = {'first_name': 'Betty', 'last_name': 'Rubble'}
|
|
person2 = view.objectify(form)
|
|
self.assertEqual(person2.full_name, 'Betty Rubble')
|
|
self.assertIs(person2, person)
|
|
|
|
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()
|
|
with patch.object(view, 'Session', return_value=self.session):
|
|
|
|
# both people match
|
|
query = view.autocomplete_query('george')
|
|
self.assertEqual(query.count(), 2)
|
|
|
|
# just 1 match
|
|
query = view.autocomplete_query('jones')
|
|
self.assertEqual(query.count(), 1)
|
|
|
|
# no matches
|
|
query = view.autocomplete_query('sally')
|
|
self.assertEqual(query.count(), 0)
|
|
|
|
def test_view_profile(self):
|
|
self.pyramid_config.include('wuttaweb.views.common')
|
|
self.pyramid_config.include('wuttaweb.views.auth')
|
|
self.pyramid_config.add_route('people', '/people/')
|
|
|
|
model = self.app.model
|
|
person = model.Person(full_name="Barney Rubble")
|
|
self.session.add(person)
|
|
self.session.commit()
|
|
|
|
# sanity check
|
|
view = self.make_view()
|
|
self.request.matchdict = {'uuid': person.uuid}
|
|
response = view.view_profile(session=self.session)
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
def test_make_user(self):
|
|
self.pyramid_config.include('wuttaweb.views.common')
|
|
|
|
model = self.app.model
|
|
person = model.Person(full_name="Barney Rubble")
|
|
self.session.add(person)
|
|
self.session.commit()
|
|
|
|
# sanity check
|
|
view = self.make_view()
|
|
self.request.matchdict = {'uuid': person.uuid}
|
|
response = view.make_user()
|
|
# nb. this always redirects for now
|
|
self.assertEqual(response.status_code, 302)
|