59 lines
1.8 KiB
Python
59 lines
1.8 KiB
Python
|
# -*- coding: utf-8; -*-
|
||
|
|
||
|
from unittest.mock import patch
|
||
|
|
||
|
from sqlalchemy import orm
|
||
|
|
||
|
import colander
|
||
|
from pyramid.httpexceptions import HTTPNotFound
|
||
|
|
||
|
from wuttaweb.views import users
|
||
|
from tests.util import WebTestCase
|
||
|
|
||
|
|
||
|
class TestPersonView(WebTestCase):
|
||
|
|
||
|
def make_view(self):
|
||
|
return users.UserView(self.request)
|
||
|
|
||
|
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.User)
|
||
|
self.assertFalse(grid.is_linked('person'))
|
||
|
view.configure_grid(grid)
|
||
|
self.assertTrue(grid.is_linked('person'))
|
||
|
|
||
|
def test_configure_form(self):
|
||
|
model = self.app.model
|
||
|
view = self.make_view()
|
||
|
form = view.make_form(model_class=model.Person)
|
||
|
self.assertIsNone(form.is_required('person'))
|
||
|
view.configure_form(form)
|
||
|
self.assertFalse(form.is_required('person'))
|
||
|
|
||
|
def test_unique_username(self):
|
||
|
model = self.app.model
|
||
|
view = self.make_view()
|
||
|
|
||
|
user = model.User(username='foo')
|
||
|
self.session.add(user)
|
||
|
self.session.commit()
|
||
|
|
||
|
with patch.object(users, 'Session', return_value=self.session):
|
||
|
|
||
|
# invalid if same username in data
|
||
|
node = colander.SchemaNode(colander.String(), name='username')
|
||
|
self.assertRaises(colander.Invalid, view.unique_username, node, 'foo')
|
||
|
|
||
|
# but not if username belongs to current user
|
||
|
view.editing = True
|
||
|
self.request.matchdict = {'uuid': user.uuid}
|
||
|
node = colander.SchemaNode(colander.String(), name='username')
|
||
|
self.assertIsNone(view.unique_username(node, 'foo'))
|