def create(self, request, *args, **kwargs): user = request.user confs = plugins.get_confs(user=user) user_plugin = [ p for p in plugins._plugins.values() if p["user"] is True and p["name"] == kwargs["pk"] ] if kwargs["pk"] not in confs: return response.Response(status=404) plugins.set_conf(kwargs["pk"], request.data, user) return response.Response( plugins.serialize_plugin(user_plugin[0], confs=plugins.get_confs(user=user)))
def test_serialize_plugin_user(factories): user = factories["users.User"]() plugin = plugins.get_plugin_config( name="test_plugin", description="Hello world", conf=[{ "name": "foo", "type": "boolean" }], user=True, ) expected = { "name": "test_plugin", "enabled": False, "description": "Hello world", "conf": [{ "name": "foo", "type": "boolean" }], "user": True, "source": False, "label": "test_plugin", "values": None, "homepage": None, } assert plugins.serialize_plugin(plugin, plugins.get_confs(user)) == expected
def test_filter_is_called_with_plugin_conf(mocker, factories): plugins.get_plugin_config("test1", ) plugins.get_plugin_config("test2", ) factories["common.PluginConfiguration"](code="test1", enabled=True) factories["common.PluginConfiguration"](code="test2", conf={ "foo": "baz" }, enabled=True) confs = plugins.get_confs() filters = {} plugin_config1 = plugins.get_plugin_config("test1", {}) plugin_config2 = plugins.get_plugin_config("test2", {}) handler1 = mocker.Mock() handler2 = mocker.Mock() plugins.register_filter("test_filter", plugin_config1, filters)(handler1) plugins.register_filter("test_filter", plugin_config2, filters)(handler2) plugins.trigger_filter("test_filter", 1, confs=confs, registry=filters) handler1.assert_called_once_with(1, conf=confs["test1"]) handler2.assert_called_once_with(handler1.return_value, conf=confs["test2"])
def delete(self, request, *args, **kwargs): user = request.user confs = plugins.get_confs(user=user) if kwargs["pk"] not in confs: return response.Response(status=404) user.plugins.filter(code=kwargs["pk"]).delete() return response.Response(status=204)
def perform_create(self, serializer): r = super().perform_create(serializer) plugins.trigger_hook( plugins.LISTENING_CREATED, listening=serializer.instance, confs=plugins.get_confs(self.request.user), ) record.send(serializer.instance) return r
def list(self, request, *args, **kwargs): user = request.user user_plugins = [ p for p in plugins._plugins.values() if p["user"] is True ] return response.Response([ plugins.serialize_plugin(p, confs=plugins.get_confs(user=user)) for p in user_plugins ])
def retrieve(self, request, *args, **kwargs): user = request.user user_plugin = [ p for p in plugins._plugins.values() if p["user"] is True and p["name"] == kwargs["pk"] ] if not user_plugin: return response.Response(status=404) return response.Response( plugins.serialize_plugin(user_plugin[0], confs=plugins.get_confs(user=user)))
def test_can_update_user_plugin(logged_in_api_client): plugin = plugins.get_plugin_config( name="test_plugin", description="Hello world", conf=[{ "name": "foo", "type": "boolean" }], user=True, ) plugins.get_plugin_config(name="test_plugin2", user=False) url = reverse("api:v1:plugins-detail", kwargs={"pk": "test_plugin"}) response = logged_in_api_client.post(url, {"foo": True}) assert response.status_code == 200 assert logged_in_api_client.user.plugins.latest("id").conf == {"foo": True} assert response.data == plugins.serialize_plugin( plugin, plugins.get_confs(logged_in_api_client.user))
def test_can_list_user_plugins(logged_in_api_client): plugin = plugins.get_plugin_config( name="test_plugin", description="Hello world", conf=[{ "name": "foo", "type": "boolean" }], user=True, ) plugins.get_plugin_config(name="test_plugin2", user=False) url = reverse("api:v1:plugins-list") response = logged_in_api_client.get(url) assert response.status_code == 200 assert response.data == [ plugins.serialize_plugin(plugin, plugins.get_confs(logged_in_api_client.user)) ]
def test_get_confs_user(factories): plugins.get_plugin_config("test1") plugins.get_plugin_config("test2") plugins.get_plugin_config("test3") user1 = factories["users.User"]() user2 = factories["users.User"]() factories["common.PluginConfiguration"](code="test1", conf={ "hello": "world" }) factories["common.PluginConfiguration"](code="test2", conf={"foo": "bar"}) factories["common.PluginConfiguration"](code="test3", conf={ "user": True }, user=user1) factories["common.PluginConfiguration"](code="test4", conf={ "user": False }, user=user2) assert plugins.get_confs(user=user1) == { "test1": { "conf": { "hello": "world" }, "enabled": False }, "test2": { "conf": { "foo": "bar" }, "enabled": False }, "test3": { "conf": { "user": True }, "enabled": False }, }
def test_serialize_plugin_user_enabled(factories): user = factories["users.User"]() plugin = plugins.get_plugin_config( name="test_plugin", description="Hello world", conf=[{ "name": "foo", "type": "boolean" }], user=True, homepage="https://example.com", ) factories["common.PluginConfiguration"](code="test_plugin", user=user, enabled=True, conf={ "foo": "bar" }) expected = { "name": "test_plugin", "enabled": True, "description": "Hello world", "conf": [{ "name": "foo", "type": "boolean" }], "user": True, "source": False, "label": "test_plugin", "values": { "foo": "bar" }, "homepage": "https://example.com", } assert plugins.serialize_plugin(plugin, plugins.get_confs(user)) == expected
def test_get_confs(factories): plugins.get_plugin_config("test1") plugins.get_plugin_config("test2") factories["common.PluginConfiguration"](code="test1", conf={ "hello": "world" }) factories["common.PluginConfiguration"](code="test2", conf={"foo": "bar"}) assert plugins.get_confs() == { "test1": { "conf": { "hello": "world" }, "enabled": False }, "test2": { "conf": { "foo": "bar" }, "enabled": False }, }