Skip to content

Commit 40c9b4f

Browse files
authored
Merge pull request #2045 from python-gitlab/jlvillal/test_validate_attrs
test: add more tests for RequiredOptional
2 parents 7b9bb3c + ce40fde commit 40c9b4f

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed

tests/unit/test_types.py

+49
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,58 @@
1515
# You should have received a copy of the GNU Lesser General Public License
1616
# along with this program. If not, see <http://www.gnu.org/licenses/>.
1717

18+
import pytest
19+
1820
from gitlab import types
1921

2022

23+
class TestRequiredOptional:
24+
def test_requiredoptional_empty(self):
25+
b = types.RequiredOptional()
26+
assert not b.required
27+
assert not b.optional
28+
assert not b.exclusive
29+
30+
def test_requiredoptional_values_no_keywords(self):
31+
b = types.RequiredOptional(
32+
("required1", "required2"),
33+
("optional1", "optional2"),
34+
("exclusive1", "exclusive2"),
35+
)
36+
assert b.required == ("required1", "required2")
37+
assert b.optional == ("optional1", "optional2")
38+
assert b.exclusive == ("exclusive1", "exclusive2")
39+
40+
def test_requiredoptional_values_keywords(self):
41+
b = types.RequiredOptional(
42+
exclusive=("exclusive1", "exclusive2"),
43+
optional=("optional1", "optional2"),
44+
required=("required1", "required2"),
45+
)
46+
assert b.required == ("required1", "required2")
47+
assert b.optional == ("optional1", "optional2")
48+
assert b.exclusive == ("exclusive1", "exclusive2")
49+
50+
def test_validate_attrs_required(self):
51+
data = {"required1": 1, "optional2": 2}
52+
rq = types.RequiredOptional(required=("required1",))
53+
rq.validate_attrs(data=data)
54+
data = {"optional1": 1, "optional2": 2}
55+
with pytest.raises(AttributeError, match="Missing attributes: required1"):
56+
rq.validate_attrs(data=data)
57+
58+
def test_validate_attrs_exclusive(self):
59+
data = {"exclusive1": 1, "optional1": 1}
60+
rq = types.RequiredOptional(exclusive=("exclusive1", "exclusive2"))
61+
rq.validate_attrs(data=data)
62+
data = {"exclusive1": 1, "exclusive2": 2, "optional1": 1}
63+
with pytest.raises(
64+
AttributeError,
65+
match="Provide only one of these attributes: exclusive1, exclusive2",
66+
):
67+
rq.validate_attrs(data=data)
68+
69+
2170
def test_gitlab_attribute_get():
2271
o = types.GitlabAttribute("whatever")
2372
assert o.get() == "whatever"

0 commit comments

Comments
 (0)