From 5ccd9b2543152dbdb8bd94b903a844e897b3a7c8 Mon Sep 17 00:00:00 2001
From: Bert Palm <bert.palm@ufz.de>
Date: Mon, 30 May 2022 23:32:43 +0200
Subject: [PATCH] added basic call-redirect test for core.modules

---
 saqc/lib/types.py                 |  4 ++--
 tests/core/test_FunctionsMixin.py | 28 ++++++++++++++++++++++++++++
 2 files changed, 30 insertions(+), 2 deletions(-)
 create mode 100644 tests/core/test_FunctionsMixin.py

diff --git a/saqc/lib/types.py b/saqc/lib/types.py
index 6a448460c..6080d661c 100644
--- a/saqc/lib/types.py
+++ b/saqc/lib/types.py
@@ -32,7 +32,7 @@ ExternalFlag = Union[str, float, int]
 # needed for deeper type hinting magic
 class CurveFitter(Protocol):
     def __call__(self, data: np.ndarray, *params: float) -> np.ndarray:
-        ...
+        ...  # pragma: no cover
 
 
 class GenericFunction(Protocol):
@@ -41,7 +41,7 @@ class GenericFunction(Protocol):
     __globals__: Dict[str, Any]
 
     def __call__(self, *args: pd.Series) -> PandasLike:
-        ...
+        ...  # pragma: no cover
 
 
 class OptionalNone:
diff --git a/tests/core/test_FunctionsMixin.py b/tests/core/test_FunctionsMixin.py
new file mode 100644
index 000000000..a7ac03098
--- /dev/null
+++ b/tests/core/test_FunctionsMixin.py
@@ -0,0 +1,28 @@
+#!/usr/bin/env python
+import inspect
+
+import pytest
+
+from saqc.core.modules import FunctionsMixin
+
+
+methods = [
+    attr
+    for attr in dir(FunctionsMixin)
+    if callable(getattr(FunctionsMixin, attr)) and not attr.startswith("_")
+]
+
+
+@pytest.mark.parametrize("name", methods)
+def test_redirect_call(name):
+    fmixin = FunctionsMixin()
+    method = getattr(fmixin, name)
+    params = inspect.signature(method).parameters
+    assert "field" in params
+    assert "kwargs" in params
+    dummy_params = dict.fromkeys(params.keys())
+    dummy_params.pop("kwargs")
+
+    err_msg = "'FunctionsMixin' object has no attribute '_wrap'"
+    with pytest.raises(AttributeError, match=err_msg):
+        method(**dummy_params)
-- 
GitLab