def test_success_authed(self, auth_fred_bloggs): with mock.patch( "lumina.database.operations.get_member" ) as mock_get_member, mock.patch( "lumina.github.submissions.create_generic_submission_issue" ) as mock_create_generic_submission_issue, mock.patch( "lumina.database.operations.put_submission" ) as mock_put_submission: submission_request = GenericSubmissionRequest( target_type="test", target_id="test-page", target_name="Test Page", target_url="https://example.com/test-page", subject="Hi there", message="Hello World", ) mock_get_member.return_value = MEMBER_MODEL_FRED_BLOGGS mock_create_generic_submission_issue.return_value = GITHUB_ISSUE mock_put_submission.return_value = submission_request.to_model( submission_id=123, submitter_id=auth_fred_bloggs.id, member=mock_get_member(), github_issue=GITHUB_ISSUE, ) response = client.post( "/submissions/message", json=submission_request.dict(), ) assert response.status_code == HTTPStatus.OK assert response.json() == { "id": 123, "subject": "Hi there", "message": "Hello World", "submitter": { "id": "fred_bloggs", "verified": True, "name": "Fred Bloggs" }, "targetId": "test-page", "targetName": "Test Page", "targetType": "test", "targetUrl": "https://example.com/test-page", "githubIssue": { "closedAt": None, "comments": 0, "createdAt": "2020-01-01T00:00:00+00:00", "number": 123, "state": "open", "title": "Test issue", "updatedAt": "2020-01-01T00:00:00+00:00", "url": "https://github.com/newtheatre/lumina-test/issues/123", }, }
def test_make_issue_model(): issue = submissions.create_generic_submission_issue( submission_request=GenericSubmissionRequest( target_type="show", target_id="11_12/faust_is_dead", target_name="Faust is Dead", target_url= "https://history.newtheatre.org.uk/years/11_12/faust_is_dead/", subject="Test submission", message="This is a test submission.", submitter=None, ), member=MemberModel( pk="fred_bloggs", name="Fred Bloggs", email="*****@*****.**", year_of_graduation=2020, ), ) issue_model = submissions.make_issue_model(issue) assert issue_model == GitHubIssueModel( number=8, state=GitHubIssueState.OPEN, title="Test submission", created_at="2022-01-26T20:45:07", updated_at="2022-01-26T20:45:07", closed_at=None, comments=0, )
def create_generic_submission( submission: GenericSubmissionRequest, member: Optional[MemberModel] = Depends(auth.optional_member), ): require_submitter_or_member(submission, member) submitter_id = member.pk if member else submission.submitter.id issue = lumina.github.submissions.create_generic_submission_issue( submission_request=submission, member=member) submission_instance = lumina.database.operations.put_submission( submission.to_model( submission_id=issue.number, submitter_id=submitter_id, member=member, github_issue=issue, )) return SubmissionResponse.from_model(submission_instance)
def test_create_generic_submission_issue_anonymous(): issue = submissions.create_generic_submission_issue( submission_request=GenericSubmissionRequest( target_type="show", target_id="11_12/faust_is_dead", target_name="Faust is Dead", target_url= "https://history.newtheatre.org.uk/years/11_12/faust_is_dead/", subject="Test submission", message="This is a test submission.", submitter=SubmitterRequest( id="c0286cf1-15cc-4e43-93de-aaca592e447b", name="Fred Bloggs", email="*****@*****.**", year_of_graduation=2020, ), ), member=None, ) assert issue.title == "Test submission" assert issue.number == 1 assert issue.state == "open" assert issue.html_url == "https://github.com/newtheatre/lumina-test/issues/1"
def test_success_not_authed(self): with mock.patch( "lumina.github.submissions.create_generic_submission_issue" ) as mock_create_generic_submission_issue, mock.patch( "lumina.database.operations.put_submission" ) as mock_put_submission: submission_request = GenericSubmissionRequest( target_type="test", target_id="test-page", target_name="Test Page", target_url="https://example.com/test-page", subject="Hi there", message="Hello World", submitter=dict( id="c0286cf1-15cc-4e43-93de-aaca592e447b", name="Fred Bloggs", year_of_graduation=2020, email="*****@*****.**", ), ) mock_create_generic_submission_issue.return_value = GITHUB_ISSUE mock_put_submission.return_value = submission_request.to_model( submission_id=123, submitter_id=submission_request.submitter.id, member=None, github_issue=GITHUB_ISSUE, ) response = client.post( "/submissions/message", # This mess needed as pydantic doesn't serialise UUID by default # See https://github.com/samuelcolvin/pydantic/issues/1157 json={ **submission_request.dict(), "submitter": { **submission_request.submitter.dict(), "id": str(submission_request.submitter.id), }, }, ) assert response.status_code == HTTPStatus.OK assert response.json() == { "id": 123, "subject": "Hi there", "message": "Hello World", "submitter": { "id": "c0286cf1-15cc-4e43-93de-aaca592e447b", "verified": False, "name": "Fred Bloggs", }, "targetId": "test-page", "targetName": "Test Page", "targetType": "test", "targetUrl": "https://example.com/test-page", "githubIssue": { "closedAt": None, "comments": 0, "createdAt": "2020-01-01T00:00:00+00:00", "number": 123, "state": "open", "title": "Test issue", "updatedAt": "2020-01-01T00:00:00+00:00", "url": "https://github.com/newtheatre/lumina-test/issues/123", }, }