def test_set_vote(self): from pointing_poker.aws.repositories import sessions create_sessions_table(boto3.resource('dynamodb')) repo = sessions.SessionsDynamoDBRepo() session = session_factory() repo.create(session) participant = models.Participant(id=str(uuid4()), name='John', isModerator=True, vote=models.Vote(points=0, abstained=True)) repo.add_participant(session.id, participant) repo.set_vote(session.id, participant.id, models.Vote(points=5, abstained=False)) participant = repo.get_participant_in_session(session.id, participant.id) self.assertEqual(participant.vote.points, 5) self.assertEqual(participant.vote.abstained, False)
def test_remove_participant(self): from pointing_poker.aws.repositories import sessions table = create_sessions_table(boto3.resource('dynamodb')) repo = sessions.SessionsDynamoDBRepo() participant = models.Participant(id=str(uuid4()), name='John', isModerator=True, vote=models.Vote(points=0, abstained=True)) session_id = str(uuid4()) table.put_item( Item={ 'sessionID': str(session_id), 'id': participant.id, 'name': participant.name, 'isModerator': participant.isModerator }) repo.remove_participant(session_id, participant.id) record = table.get_item(Key={ 'sessionID': session_id, 'id': participant.id }) self.assertNotIn('Item', record)
def set_vote(event, _): session_id = event['sessionID'] participant_id = event['participantID'] vote = models.Vote(points=event['vote']['points'], abstained=event['vote']['abstained']) return session_service.SessionService(session_repo.SessionsDynamoDBRepo()).set_vote(session_id, participant_id, vote).to_json()
def test_set_reviewing_issue(self): from pointing_poker.aws.repositories import sessions table = create_sessions_table(boto3.resource('dynamodb')) repo = sessions.SessionsDynamoDBRepo() session = session_factory() repo.create(session) repo.set_reviewing_issue( session.id, models.ReviewingIssue( title='My Issue', description='Work to do', url='https://example.com', )) item = table.get_item(Key={'sessionID': session.id, 'id': session.id}) self.assertIn('Item', item) self.assertEqual(item['Item']['reviewingIssueTitle'], 'My Issue') self.assertEqual(item['Item']['reviewingIssueDescription'], 'Work to do') self.assertEqual(item['Item']['reviewingIssueURL'], 'https://example.com')
def test_create_session(self): from pointing_poker.aws.repositories import sessions table = create_sessions_table(boto3.resource('dynamodb')) repo = sessions.SessionsDynamoDBRepo() session = models.Session( id=str(uuid4()), name='test', pointingMax=0, pointingMin=1, votingStarted=False, createdAt=str(datetime.utcnow()), expiration=86400 # 24 hours in seconds ) repo.create(session) record = table.get_item(Key={ 'sessionID': session.id, 'id': session.id }) self.assertEqual(record['Item']['sessionID'], session.id) self.assertEqual(record['Item']['id'], session.id) self.assertEqual(record['Item']['pointingMax'], session.pointingMax) self.assertEqual(record['Item']['pointingMin'], session.pointingMin) self.assertEqual(record['Item']['expiration'], session.expiration) self.assertEqual(record['Item']['votingStarted'], session.votingStarted)
def test_add_participant_conflicts(self): from pointing_poker.aws.repositories import sessions create_sessions_table(boto3.resource('dynamodb')) repo = sessions.SessionsDynamoDBRepo() session = session_factory() repo.create(session) participant = models.Participant(id=str(uuid4()), name='John', isModerator=True, vote=models.Vote(points=0, abstained=True)) repo.add_participant(session.id, participant) try: repo.add_participant(session.id, participant) except Exception as err: self.assertEqual( err.args[0], f"participant with id {participant.id} already exists")
def test_add_participant(self): from pointing_poker.aws.repositories import sessions table = create_sessions_table(boto3.resource('dynamodb')) repo = sessions.SessionsDynamoDBRepo() session = session_factory() repo.create(session) participant = models.Participant(id=str(uuid4()), name='John', isModerator=True, vote=models.Vote(points=0, abstained=True)) repo.add_participant(session.id, participant) record = table.get_item(Key={ 'sessionID': session.id, 'id': participant.id }) self.assertEqual(record['Item']['id'], participant.id) self.assertEqual(record['Item']['name'], participant.name) self.assertEqual(record['Item']['isModerator'], participant.isModerator)
def join_session(event, _): session_id = event['sessionID'] payload = event['participant'] participant_description = models.ParticipantDescription( id=payload['id'], name=payload['name'] ) return session_service.SessionService(session_repo.SessionsDynamoDBRepo()).join_session( session_id, participant_description).to_json()
def set_reviewing_issue(event, _): session_id = event['sessionID'] description = event['issue'] issue = models.ReviewingIssueDescription( title=description['title'], description=description['description'], url=description['url'] ) return session_service.SessionService(session_repo.SessionsDynamoDBRepo()).set_reviewing_issue(session_id, issue).to_json()
def test_get_missing_participant(self): from pointing_poker.aws.repositories import sessions create_sessions_table(boto3.resource('dynamodb')) repo = sessions.SessionsDynamoDBRepo() session = session_factory() repo.create(session) self.assertIsNone(repo.get_participant_in_session(session.id, 'bogus'))
def test_get_session(self): from pointing_poker.aws.repositories import sessions create_sessions_table(boto3.resource('dynamodb')) repo = sessions.SessionsDynamoDBRepo() session = session_factory() repo.create(session) record = repo.get(session.id) self.assertEqual(record, session)
def create_session(event, _): payload = event['sessionDescription'] session_description = models.SessionDescription( name=payload['name'], pointingMax=payload['pointingMax'], pointingMin=payload['pointingMin'], ) moderator_description = models.ParticipantDescription( id=event['moderator']['id'], name=event['moderator']['name'] ) return session_service.SessionService(session_repo.SessionsDynamoDBRepo()).create_session( session_description, moderator_description).to_json()
def test_set_voting_state(self): from pointing_poker.aws.repositories import sessions table = create_sessions_table(boto3.resource('dynamodb')) repo = sessions.SessionsDynamoDBRepo() session = session_factory() repo.create(session) repo.set_voting_state(session.id, True) item = table.get_item(Key={'sessionID': session.id, 'id': session.id}) self.assertIn('Item', item) self.assertEqual(item['Item']['votingStarted'], True)
def test_get_session_with_participants(self): from pointing_poker.aws.repositories import sessions create_sessions_table(boto3.resource('dynamodb')) repo = sessions.SessionsDynamoDBRepo() session = session_factory() repo.create(session) participant = models.Participant(id=str(uuid4()), name='John', isModerator=True, vote=models.Vote(points=0, abstained=True)) repo.add_participant(session.id, participant) session = repo.get(session.id) self.assertIn(participant, session.participants)
def close_session(event, _): session_id = event['sessionID'] return session_service.SessionService(session_repo.SessionsDynamoDBRepo()).close_session(session_id).to_json()
def stop_voting(event, _): session_id = event['sessionID'] return session_service.SessionService(session_repo.SessionsDynamoDBRepo()).stop_voting(session_id).to_json()
def participant(event, _): user_id = event['id'] return session_service.SessionService(session_repo.SessionsDynamoDBRepo()).participant(user_id).to_json()
def leave_session(event, _): session_id = event['sessionID'] participant_id = event['participantID'] return session_service.SessionService(session_repo.SessionsDynamoDBRepo()).leave_session(session_id, participant_id).to_json()
def test_get_missing_session(self): from pointing_poker.aws.repositories import sessions create_sessions_table(boto3.resource('dynamodb')) self.assertIsNone(sessions.SessionsDynamoDBRepo().get('bogus'))