Skip to content

Commit 967c41a

Browse files
committed
fix(test): fix nodeinfo tests
1 parent 34fc281 commit 967c41a

File tree

4 files changed

+41
-16
lines changed

4 files changed

+41
-16
lines changed

src/apmodel/nodeinfo/__init__.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,4 @@
1-
from .nodeinfo import Nodeinfo
1+
from .nodeinfo import Nodeinfo
2+
3+
def load(data: dict) -> Nodeinfo:
4+
return Nodeinfo.model_validate(data)

src/apmodel/nodeinfo/nodeinfo.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
from __future__ import annotations
22

3-
from enum import Enum
3+
import sys
44
from typing import List, Literal, Optional
55

6+
if sys.version_info >= (3, 11):
7+
from enum import StrEnum
8+
else:
9+
from backports.strenum import StrEnum
10+
611
from pydantic import (
712
BaseModel,
813
ConfigDict,
@@ -12,7 +17,7 @@
1217
from pydantic_core import PydanticCustomError
1318

1419

15-
class NodeinfoProtocol(Enum):
20+
class NodeinfoProtocol(StrEnum):
1621
ACTIVITYPUB = "activitypub"
1722
BUDDYCLOUD = "buddycloud"
1823
DFRN = "dfrn"
@@ -25,7 +30,7 @@ class NodeinfoProtocol(Enum):
2530
ZOT = "zot"
2631

2732

28-
class NodeinfoInbound(Enum):
33+
class NodeinfoInbound(StrEnum):
2934
ATOM1_0 = "atom1.0"
3035
GNUSOCIAL = "gnusocial"
3136
IMAP = "imap"
@@ -36,7 +41,7 @@ class NodeinfoInbound(Enum):
3641
TWITTER = "twitter"
3742

3843

39-
class NodeinfoOutbound(Enum):
44+
class NodeinfoOutbound(StrEnum):
4045
ATOM1_0 = "atom1.0"
4146
GNUSOCIAL = "gnusocial"
4247
BLOGGER = "blogger"

tests/data/nodeinfo_sample_2.0.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@
22
"version": "2.0",
33
"software": {
44
"name": "foofedi",
5-
"version": "2025.8.27",
6-
"homepage": "https://foofedi.example.com/"
5+
"version": "2025.8.27"
76
},
87
"protocols": [
98
"activitypub"

tests/test_nodeinfo.py

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,57 @@
11
import json
22
from pathlib import Path
3-
from apmodel.nodeinfo.nodeinfo import Nodeinfo, NodeinfoProtocol, NodeinfoOutbound
4-
from apmodel.types import Undefined
3+
4+
from pydantic import ValidationError
5+
from pydantic_core import PydanticCustomError
6+
7+
from apmodel import nodeinfo as ni
8+
from apmodel.nodeinfo.nodeinfo import NodeinfoOutbound, NodeinfoProtocol
9+
10+
import pytest
511

612
def test_nodeinfo_2_0():
713
path = Path(__file__).parent / "data" / "nodeinfo_sample_2.0.json"
814
with open(path) as f:
915
data = json.load(f)
10-
11-
nodeinfo = Nodeinfo.from_json(data)
16+
17+
nodeinfo = ni.load(data)
1218

1319
assert nodeinfo.version == "2.0"
1420
assert nodeinfo.software.name == "foofedi"
1521
assert nodeinfo.software.version == "2025.8.27"
16-
assert isinstance(nodeinfo.software.homepage, Undefined)
22+
assert not nodeinfo.software.homepage
1723
assert nodeinfo.protocols[0] == NodeinfoProtocol.ACTIVITYPUB
1824
assert NodeinfoOutbound.ATOM1_0 in nodeinfo.services.outbound
1925
assert nodeinfo.openRegistrations is False
2026
assert nodeinfo.usage.users.total == 4
2127
assert nodeinfo.metadata["nodeName"] == "FooFedi TEST"
2228

29+
def test_nodeinfo_2_0_incorrect():
30+
path = Path(__file__).parent / "data" / "nodeinfo_sample_2.0_incorrect.json"
31+
with open(path) as f:
32+
data = json.load(f)
33+
34+
with pytest.raises(ValidationError) as e:
35+
ni.load(data)
36+
37+
2338
def test_nodeinfo_2_1():
2439
path = Path(__file__).parent / "data" / "nodeinfo_sample_2.1.json"
2540
with open(path) as f:
2641
data = json.load(f)
27-
28-
nodeinfo = Nodeinfo.from_json(data)
42+
43+
nodeinfo = ni.load(data)
2944

3045
assert nodeinfo.version == "2.1"
3146
assert nodeinfo.software.name == "foofedi"
3247
assert nodeinfo.software.version == "2025.8.27"
3348
assert nodeinfo.software.homepage == "https://foofedi.example.com/"
34-
assert nodeinfo.software.repository == "https://git.example.com/foofedi/foofedi"
49+
assert (
50+
nodeinfo.software.repository
51+
== "https://git.example.com/foofedi/foofedi"
52+
)
3553
assert nodeinfo.protocols[0] == NodeinfoProtocol.ACTIVITYPUB
3654
assert NodeinfoOutbound.ATOM1_0 in nodeinfo.services.outbound
3755
assert nodeinfo.openRegistrations is False
3856
assert nodeinfo.usage.users.total == 4
39-
assert nodeinfo.metadata["nodeName"] == "FooFedi TEST"
57+
assert nodeinfo.metadata["nodeName"] == "FooFedi TEST"

0 commit comments

Comments
 (0)