# Copyright (C) 2010-2017 by the Free Software Foundation, Inc. # # This file is part of GNU Mailman. # # GNU Mailman is free software: you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation, either version 3 of the License, or (at your option) # any later version. # # GNU Mailman is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # # You should have received a copy of the GNU General Public License along with # GNU Mailman. If not, see . """Test RESTability of plugins.""" import unittest from mailman.testing.helpers import call_api from mailman.testing.layers import RESTLayer from urllib.error import HTTPError class TestAPI31Plugins(unittest.TestCase): layer = RESTLayer def test_list_plugins(self): json, response = call_api('http://localhost:9001/3.1/plugins') self.assertEqual(response.status_code, 200) json.pop('http_etag') self.assertEqual(len(json.keys()), 3) self.assertIn('entries', json.keys()) entries = json['entries'] self.assertEqual(len(entries), 1) plugin_conf = entries[0] self.assertEqual(plugin_conf['name'], 'example') self.assertEqual(plugin_conf['enable'], True) self.assertEqual(plugin_conf['class'], 'mailman.testing.plugin.ExamplePlugin') self.assertEqual(plugin_conf['path'], '') self.assertEqual(plugin_conf['configuration'], '') def test_non_existent_plugin(self): with self.assertRaises(HTTPError) as cm: call_api('http://localhost:9001/3.1/plugins/does-not-exist') self.assertEqual(cm.exception.code, 404) def test_example_plugin(self): json, response = call_api('http://localhost:9001/3.1/plugins/example') self.assertEqual(response.status_code, 200) json.pop('http_etag') self.assertEqual(len(json.keys()), 1) self.assertEqual(json['example-plugin-reply'], 'yes') with self.assertRaises(HTTPError) as cm: call_api('http://localhost:9001/3.1/plugins/example', method='POST') self.assertEqual(cm.exception.code, 400) def test_example_plugin_child(self): json, response = \ call_api('http://localhost:9001/3.1/plugins/example/good') self.assertEqual(response.status_code, 200) json.pop('http_etag') self.assertEqual(len(json.keys()), 1) self.assertEqual(json['good'], True) with self.assertRaises(HTTPError) as cm: call_api('http://localhost:9001/3.1/plugins/example/bad') self.assertEqual(cm.exception.code, 400) def test_example_plugin_counter(self): json, response = \ call_api('http://localhost:9001/3.1/plugins/example/count') self.assertEqual(response.status_code, 200) json.pop('http_etag') self.assertEqual(len(json.keys()), 1) self.assertEqual(json['count'], 0) json, response = \ call_api('http://localhost:9001/3.1/plugins/example/count', method='POST', data={'count': 5}) self.assertEqual(response.status_code, 204) json, response = \ call_api('http://localhost:9001/3.1/plugins/example/count') self.assertEqual(response.status_code, 200) json.pop('http_etag') self.assertEqual(len(json.keys()), 1) self.assertEqual(json['count'], 5) json, response = \ call_api('http://localhost:9001/3.1/plugins/example/count', method='DELETE') self.assertEqual(response.status_code, 204) json, response = \ call_api('http://localhost:9001/3.1/plugins/example/count') self.assertEqual(response.status_code, 200) json.pop('http_etag') self.assertEqual(len(json.keys()), 1) self.assertEqual(json['count'], 0)