Skip to content

Commit 589ab1b

Browse files
committed
fixes
1 parent a76f2aa commit 589ab1b

File tree

3 files changed

+39
-8
lines changed

3 files changed

+39
-8
lines changed

backend/api/participants/types.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from typing import TYPE_CHECKING, Annotated, Optional
1+
from typing import TYPE_CHECKING, Annotated
22

33
from submissions.models import Submission as SubmissionModel
44
from strawberry.scalars import JSON
@@ -25,12 +25,12 @@ class Participant:
2525
facebook_url: str
2626
mastodon_handle: str
2727
fullname: str
28-
speaker_availabilities: JSON
2928

3029
_speaker_level: strawberry.Private[str]
3130
_previous_talk_video: strawberry.Private[str]
3231
_conference_id: strawberry.Private[int]
3332
_user_id: strawberry.Private[int]
33+
_speaker_availabilities: strawberry.Private[int]
3434

3535
@strawberry.field
3636
def proposals(
@@ -42,14 +42,21 @@ def proposals(
4242
)
4343

4444
@strawberry.field
45-
def speaker_level(self, info) -> Optional[str]:
45+
def speaker_availabilities(self, info) -> JSON | None:
46+
if not CanSeeSubmissionPrivateFields().has_permission(self, info):
47+
return None
48+
49+
return self._speaker_availabilities
50+
51+
@strawberry.field
52+
def speaker_level(self, info) -> str | None:
4653
if not CanSeeSubmissionPrivateFields().has_permission(self, info):
4754
return None
4855

4956
return self._speaker_level
5057

5158
@strawberry.field
52-
def previous_talk_video(self, info) -> Optional[str]:
59+
def previous_talk_video(self, info) -> str | None:
5360
if not CanSeeSubmissionPrivateFields().has_permission(self, info):
5461
return None
5562

@@ -70,7 +77,7 @@ def from_model(cls, instance):
7077
linkedin_url=instance.linkedin_url,
7178
facebook_url=instance.facebook_url,
7279
mastodon_handle=instance.mastodon_handle,
73-
speaker_availabilities=instance.speaker_availabilities or {},
80+
_speaker_availabilities=instance.speaker_availabilities or {},
7481
_conference_id=instance.conference_id,
7582
_user_id=instance.user_id,
7683
_speaker_level=instance.speaker_level,

backend/api/submissions/tests/test_submissions.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from participants.tests.factories import ParticipantFactory
12
from submissions.models import Submission
23
from users.tests.factories import UserFactory
34
from voting.tests.factories.vote import VoteFactory
@@ -110,6 +111,10 @@ def test_accepted_submissions_are_public(graphql_client):
110111
SubmissionFactory(
111112
id=2, conference=submission.conference, status=Submission.STATUS.proposed
112113
)
114+
participant = ParticipantFactory(
115+
user_id=submission.speaker_id, conference_id=submission.conference_id
116+
)
117+
ParticipantFactory(user_id=submission.speaker_id)
113118

114119
query = """query Submissions($code: String!, $page: Int) {
115120
submissions(code: $code, page: $page, pageSize: 5, onlyAccepted: true) {
@@ -119,6 +124,12 @@ def test_accepted_submissions_are_public(graphql_client):
119124
}
120125
items {
121126
id
127+
speaker {
128+
id
129+
participant {
130+
id
131+
}
132+
}
122133
}
123134
}
124135
}"""
@@ -130,6 +141,14 @@ def test_accepted_submissions_are_public(graphql_client):
130141
assert not resp.get("errors")
131142
assert len(resp["data"]["submissions"]["items"]) == 1
132143
assert resp["data"]["submissions"]["items"][0]["id"] == submission.hashid
144+
assert (
145+
resp["data"]["submissions"]["items"][0]["speaker"]["id"]
146+
== submission.speaker_id
147+
)
148+
assert (
149+
resp["data"]["submissions"]["items"][0]["speaker"]["participant"]
150+
== participant.hashid
151+
)
133152
assert resp["data"]["submissions"]["pageInfo"] == {"totalPages": 1, "totalItems": 1}
134153

135154

backend/api/submissions/types.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1+
from typing import Annotated
12
from participants.models import Participant as ParticipantModel
2-
from api.participants.types import Participant
33
import strawberry
44
from strawberry.types.field import StrawberryField
55
from strawberry.types import Info
@@ -11,11 +11,12 @@
1111
from voting.models import Vote
1212

1313
from .permissions import CanSeeSubmissionPrivateFields, CanSeeSubmissionRestrictedFields
14-
from typing import TYPE_CHECKING, Annotated
14+
from typing import TYPE_CHECKING
1515

1616
if TYPE_CHECKING:
1717
from api.conferences.types import Conference, Topic, Duration, AudienceLevel
1818
from api.schedule.types import ScheduleItem
19+
from api.participants.types import Participant
1920

2021

2122
def private_field() -> StrawberryField:
@@ -49,7 +50,11 @@ class SubmissionSpeaker:
4950
_conference_id: strawberry.Private[str]
5051

5152
@strawberry.field
52-
def participant(self, info: Info) -> Participant | None:
53+
def participant(
54+
self, info: Info
55+
) -> Annotated["Participant", strawberry.lazy("api.participants.types")] | None:
56+
from api.participants.types import Participant
57+
5358
participant = (
5459
ParticipantModel.objects.for_conference(self._conference_id)
5560
.filter(user_id=self.id)

0 commit comments

Comments
 (0)