feat: add feature to edit email settings, basic message preview
This commit is contained in:
		
							parent
							
								
									3035d1f58a
								
							
						
					
					
						commit
						95ff87fbf3
					
				
					 19 changed files with 826 additions and 4 deletions
				
			
		|  | @ -392,3 +392,47 @@ class TestFileDownload(DataTestCase): | |||
|         widget = typ.widget_maker() | ||||
|         self.assertIsInstance(widget, widgets.FileDownloadWidget) | ||||
|         self.assertEqual(widget.url, '/foo') | ||||
| 
 | ||||
| 
 | ||||
| class TestEmailRecipients(TestCase): | ||||
| 
 | ||||
|     def test_serialize(self): | ||||
|         typ = mod.EmailRecipients() | ||||
|         node = colander.SchemaNode(typ) | ||||
| 
 | ||||
|         recips = [ | ||||
|             'alice@example.com', | ||||
|             'bob@example.com', | ||||
|         ] | ||||
|         recips_str = ', '.join(recips) | ||||
| 
 | ||||
|         # values | ||||
|         result = typ.serialize(node, recips_str) | ||||
|         self.assertEqual(result, '\n'.join(recips)) | ||||
| 
 | ||||
|         # null | ||||
|         result = typ.serialize(node, colander.null) | ||||
|         self.assertIs(result, colander.null) | ||||
| 
 | ||||
|     def test_deserialize(self): | ||||
|         typ = mod.EmailRecipients() | ||||
|         node = colander.SchemaNode(typ) | ||||
| 
 | ||||
|         recips = [ | ||||
|             'alice@example.com', | ||||
|             'bob@example.com', | ||||
|         ] | ||||
|         recips_str = ', '.join(recips) | ||||
| 
 | ||||
|         # values | ||||
|         result = typ.deserialize(node, recips_str) | ||||
|         self.assertEqual(result, recips_str) | ||||
| 
 | ||||
|         # null | ||||
|         result = typ.deserialize(node, colander.null) | ||||
|         self.assertIs(result, colander.null) | ||||
| 
 | ||||
|     def test_widget_maker(self): | ||||
|         typ = mod.EmailRecipients() | ||||
|         widget = typ.widget_maker() | ||||
|         self.assertIsInstance(widget, widgets.EmailRecipientsWidget) | ||||
|  |  | |||
|  | @ -10,7 +10,7 @@ from pyramid import testing | |||
| from wuttaweb import grids | ||||
| from wuttaweb.forms import widgets as mod | ||||
| from wuttaweb.forms.schema import (FileDownload, PersonRef, RoleRefs, UserRefs, Permissions, | ||||
|                                    WuttaDateTime) | ||||
|                                    WuttaDateTime, EmailRecipients) | ||||
| from tests.util import WebTestCase | ||||
| 
 | ||||
| 
 | ||||
|  | @ -304,6 +304,55 @@ class TestPermissionsWidget(WebTestCase): | |||
|         self.assertIn("Polish the widgets", html) | ||||
| 
 | ||||
| 
 | ||||
| class TestEmailRecipientsWidget(WebTestCase): | ||||
| 
 | ||||
|     def make_field(self, node, **kwargs): | ||||
|         # TODO: not sure why default renderer is in use even though | ||||
|         # pyramid_deform was included in setup?  but this works.. | ||||
|         kwargs.setdefault('renderer', deform.Form.default_renderer) | ||||
|         return deform.Field(node, **kwargs) | ||||
| 
 | ||||
|     def test_serialize(self): | ||||
|         node = colander.SchemaNode(EmailRecipients()) | ||||
|         field = self.make_field(node) | ||||
|         widget = mod.EmailRecipientsWidget() | ||||
| 
 | ||||
|         recips = [ | ||||
|             'alice@example.com', | ||||
|             'bob@example.com', | ||||
|         ] | ||||
|         recips_str = ', '.join(recips) | ||||
| 
 | ||||
|         # readonly | ||||
|         result = widget.serialize(field, recips_str, readonly=True) | ||||
|         self.assertIn('<ul>', result) | ||||
|         self.assertIn('<li>alice@example.com</li>', result) | ||||
| 
 | ||||
|         # editable | ||||
|         result = widget.serialize(field, recips_str) | ||||
|         self.assertIn('<b-input', result) | ||||
|         self.assertIn('type="textarea"', result) | ||||
| 
 | ||||
|     def test_deserialize(self): | ||||
|         node = colander.SchemaNode(EmailRecipients()) | ||||
|         field = self.make_field(node) | ||||
|         widget = mod.EmailRecipientsWidget() | ||||
| 
 | ||||
|         recips = [ | ||||
|             'alice@example.com', | ||||
|             'bob@example.com', | ||||
|         ] | ||||
|         recips_str = ', '.join(recips) | ||||
| 
 | ||||
|         # values | ||||
|         result = widget.deserialize(field, recips_str) | ||||
|         self.assertEqual(result, recips_str) | ||||
| 
 | ||||
|         # null | ||||
|         result = widget.deserialize(field, colander.null) | ||||
|         self.assertIs(result, colander.null) | ||||
| 
 | ||||
| 
 | ||||
| class TestBatchIdWidget(WebTestCase): | ||||
| 
 | ||||
|     def make_field(self, node, **kwargs): | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue