From 3f4b293be859d6430b0c75577ec4ae2a9d14c91a Mon Sep 17 00:00:00 2001 From: Felix Zumstein Date: Tue, 29 Oct 2024 20:58:16 -0300 Subject: [PATCH] added required_roles custom function test, closes #162 --- tests/e2e_custom_functions.py | 6 ++++++ tests/e2e_custom_functions.xlsx | Bin 38908 -> 39043 bytes 2 files changed, 6 insertions(+) diff --git a/tests/e2e_custom_functions.py b/tests/e2e_custom_functions.py index cb402db..e2d42cb 100644 --- a/tests/e2e_custom_functions.py +++ b/tests/e2e_custom_functions.py @@ -944,3 +944,9 @@ def varargs_with_object_handles(x, *args: object): r3 = frame_equal(args[0], df) r4 = frame_equal(args[1], df) return r1 and r2 and r3 and r4 + + +@func(required_roles=["test"]) +def required_roles(): + # Has to return an error cell + return True diff --git a/tests/e2e_custom_functions.xlsx b/tests/e2e_custom_functions.xlsx index 31bfa3535f08550c3a150248fd78ed8546bec45d..77f9ef256b97849bdcb868544e3d78f021b0d98f 100644 GIT binary patch delta 9982 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 W$wz<_lK3HJ!81u@um!RI=>8w9z2MaV delta 9747 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 SOAtyPqV