feat: add basic user feedback email mechanism
this definitely needs some more work. using pyramid_mailer for testing although not ready to declare that dependency. for now this is "broken" without it being installed.
This commit is contained in:
parent
8669ca2283
commit
4934ed1d93
6 changed files with 461 additions and 2 deletions
|
@ -1,5 +1,9 @@
|
|||
# -*- coding: utf-8; -*-
|
||||
|
||||
from unittest.mock import patch
|
||||
|
||||
import colander
|
||||
|
||||
from wuttaweb.views import common as mod
|
||||
from tests.util import WebTestCase
|
||||
|
||||
|
@ -51,6 +55,68 @@ class TestCommonView(WebTestCase):
|
|||
context = view.home(session=self.session)
|
||||
self.assertEqual(context['index_title'], self.app.get_title())
|
||||
|
||||
def test_feedback_make_schema(self):
|
||||
view = self.make_view()
|
||||
schema = view.feedback_make_schema()
|
||||
self.assertIsInstance(schema, colander.Schema)
|
||||
self.assertIn('message', schema)
|
||||
|
||||
def test_feedback(self):
|
||||
self.pyramid_config.add_route('users.view', '/users/{uuid}')
|
||||
model = self.app.model
|
||||
user = model.User(username='barney')
|
||||
self.session.add(user)
|
||||
self.session.commit()
|
||||
|
||||
view = self.make_view()
|
||||
with patch.object(view, 'feedback_send') as feedback_send:
|
||||
|
||||
# basic send, no user
|
||||
self.request.client_addr = '127.0.0.1'
|
||||
self.request.method = 'POST'
|
||||
self.request.POST = {
|
||||
'referrer': '/foo',
|
||||
'user_name': "Barney Rubble",
|
||||
'message': "hello world",
|
||||
}
|
||||
context = view.feedback()
|
||||
self.assertEqual(context, {'ok': True})
|
||||
feedback_send.assert_called_once()
|
||||
|
||||
# reset
|
||||
feedback_send.reset_mock()
|
||||
|
||||
# basic send, with user
|
||||
self.request.user = user
|
||||
self.request.POST['user_uuid'] = user.uuid
|
||||
with patch.object(mod, 'Session', return_value=self.session):
|
||||
context = view.feedback()
|
||||
self.assertEqual(context, {'ok': True})
|
||||
feedback_send.assert_called_once()
|
||||
|
||||
# reset
|
||||
self.request.user = None
|
||||
feedback_send.reset_mock()
|
||||
|
||||
# invalid form data
|
||||
self.request.POST = {'message': 'hello world'}
|
||||
context = view.feedback()
|
||||
self.assertEqual(list(context), ['error'])
|
||||
self.assertIn('Required', context['error'])
|
||||
feedback_send.assert_not_called()
|
||||
|
||||
# error on send
|
||||
self.request.POST = {
|
||||
'referrer': '/foo',
|
||||
'user_name': "Barney Rubble",
|
||||
'message': "hello world",
|
||||
}
|
||||
feedback_send.side_effect = RuntimeError
|
||||
context = view.feedback()
|
||||
feedback_send.assert_called_once()
|
||||
self.assertEqual(list(context), ['error'])
|
||||
self.assertIn('RuntimeError', context['error'])
|
||||
|
||||
def test_setup(self):
|
||||
self.pyramid_config.add_route('home', '/')
|
||||
self.pyramid_config.add_route('login', '/login')
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue