diff --git a/docs/plugins/wev-echo.md b/docs/plugins/wev-echo.md index 9f04895..49fc9c8 100644 --- a/docs/plugins/wev-echo.md +++ b/docs/plugins/wev-echo.md @@ -10,9 +10,10 @@ ## Configuration -| Property | Required | Description | -|----------|----------|----------------------| -| value | ✔️ | Value to resolve to. | +| Property | Required | Description | +|-----------|----------|---------------------------------------------------------------------------------| +| separator | ⨯ | Separator to insert between values when `value` is a list. Defaults to a space. | +| value | ✔️ | Value to resolve to. String or list of strings. | ## Examples diff --git a/wev/wev_echo/plugin.py b/wev/wev_echo/plugin.py index d4b92f8..14282aa 100644 --- a/wev/wev_echo/plugin.py +++ b/wev/wev_echo/plugin.py @@ -1,6 +1,6 @@ from datetime import datetime, timedelta from logging import Logger -from typing import List +from typing import List, Union from wev.sdk import PluginBase, Resolution, ResolutionSupport from wev.sdk.exceptions import MissingConfigurationError @@ -34,16 +34,27 @@ def resolve(self, support: ResolutionSupport) -> Resolution: Returns: Resolution. """ - expires_at = datetime.now() + timedelta(seconds=60) - support.logger.debug("Calculated expiry date: %s", expires_at) - return Resolution.make(value=self.value, expires_at=expires_at) + value = ( + self.value + if isinstance(self.value, str) + else self.separator.join(self.value) + ) + return Resolution.make( + value=value, + expires_at=datetime.now() + timedelta(seconds=60), + ) @property - def value(self) -> str: - """ - Gets the hard-coded value from the configuration. - """ + def separator(self) -> str: + """ Gets the single value to return. """ + return self.get("separator", " ") + + @property + def value(self) -> Union[str, List[str]]: + """ Gets the single value or list of values to return. """ try: + if isinstance(self["value"], list): + return self["value"] return str(self["value"]) except KeyError as ex: raise MissingConfigurationError( diff --git a/wev/wev_echo/test_plugin.py b/wev/wev_echo/test_plugin.py index 8c8bbda..3eb7010 100644 --- a/wev/wev_echo/test_plugin.py +++ b/wev/wev_echo/test_plugin.py @@ -1,6 +1,7 @@ from logging import Logger +from typing import Any, Dict -from pytest import raises +from pytest import mark, raises from wev.sdk import ResolutionSupport from wev.sdk.exceptions import MissingConfigurationError @@ -13,9 +14,20 @@ def test_explain(logger: Logger) -> None: ] -def test_resolve(resolution_support: ResolutionSupport) -> None: - resolution = Plugin({"value": "foo"}).resolve(support=resolution_support) - assert resolution.values == ("foo",) +@mark.parametrize( + "d, expect", + [ + ({"value": "foo"}, ("foo",)), + ({"value": ["foo", "bar"]}, ("foo bar",)), + ({"separator": ".", "value": ["foo", "bar"]}, ("foo.bar",)), + ], +) +def test_resolve( + d: Dict[str, Any], + expect: str, + resolution_support: ResolutionSupport, +) -> None: + assert Plugin(d).resolve(support=resolution_support).values == expect def test_resolve__missing_config(resolution_support: ResolutionSupport) -> None: