summaryrefslogtreecommitdiff
path: root/src/mailman/testing/plugin.py
diff options
context:
space:
mode:
authorJ08nY2017-06-01 20:53:53 +0200
committerJ08nY2017-06-17 19:35:47 +0200
commitf20e5d10b1ec0e920eba15f3b22dc3c48ea1ac85 (patch)
tree13d95e1277272bc810eacde6bb00acbf03ecaee2 /src/mailman/testing/plugin.py
parent7abfcbfe1f41b915dd4419ae6be857deb49f04db (diff)
downloadmailman-f20e5d10b1ec0e920eba15f3b22dc3c48ea1ac85.tar.gz
mailman-f20e5d10b1ec0e920eba15f3b22dc3c48ea1ac85.tar.zst
mailman-f20e5d10b1ec0e920eba15f3b22dc3c48ea1ac85.zip
Diffstat (limited to 'src/mailman/testing/plugin.py')
-rw-r--r--src/mailman/testing/plugin.py69
1 files changed, 67 insertions, 2 deletions
diff --git a/src/mailman/testing/plugin.py b/src/mailman/testing/plugin.py
index 75667844a..a8b001406 100644
--- a/src/mailman/testing/plugin.py
+++ b/src/mailman/testing/plugin.py
@@ -15,22 +15,87 @@
# You should have received a copy of the GNU General Public License along with
# GNU Mailman. If not, see <http://www.gnu.org/licenses/>.
-"""Example plugin with hooks for testing purposes."""
+"""Example plugin with hooks and REST for testing purposes."""
+from mailman.config import config
from mailman.interfaces.plugin import IPlugin
+from mailman.rest.helpers import bad_request, child, etag, no_content, okay
+from mailman.rest.validator import Validator
from public import public
from zope.interface import implementer
@public
+class GoodREST:
+
+ def on_get(self, request, response):
+ okay(response, etag({'good': True}))
+
+
+@public
+class BadREST:
+
+ def on_get(self, request, response):
+ bad_request(response, etag({'good': False}))
+
+
+@public
+class CountingREST:
+
+ def __init__(self):
+ self._plugin = config.plugins['example']
+
+ def on_get(self, request, response):
+ okay(response, etag({'count': self._plugin.counter}))
+
+ def on_post(self, request, response):
+ try:
+ counter = Validator(count=int)(request)
+ self._plugin.counter = counter['count']
+ except ValueError as error:
+ bad_request(response, str(error))
+ else:
+ no_content(response)
+
+ def on_delete(self, request, response):
+ self._plugin.counter = 0
+ no_content(response)
+
+
+@public
+class RESTExample:
+
+ def on_get(self, request, response):
+ okay(response, etag({'example-plugin-reply': 'yes'}))
+
+ def on_post(self, request, response):
+ bad_request(response)
+
+ @child()
+ def good(self, context, segments):
+ return GoodREST(), []
+
+ @child()
+ def bad(self, context, segments):
+ return BadREST(), []
+
+ @child()
+ def count(self, context, segments):
+ return CountingREST(), []
+
+
+@public
@implementer(IPlugin)
class ExamplePlugin:
def __init__(self):
- pass
+ self.counter = 0
def pre_hook(self):
pass
def post_hook(self):
pass
+
+ def rest_object(self):
+ return RESTExample()