public async Task Should_throw_error_when_get_api_throws_error() { _conferenceCacheMock.Setup(cache => cache.GetOrAddConferenceAsync(_testConference.Id, It.IsAny <Func <Task <ConferenceDetailsResponse> > >())) .Callback(async(Guid anyGuid, Func <Task <ConferenceDetailsResponse> > factory) => await factory()) .ReturnsAsync(_testConference); var conferenceId = _testConference.Id; var request = new UpdateParticipantStatusEventRequest { EventType = EventType.Joined }; var apiException = new VideoApiException <ProblemDetails>("Bad Request", (int)HttpStatusCode.BadRequest, "Please provide a valid conference Id", null, default, null);
public async Task <IActionResult> UpdateParticipantStatusAsync(Guid conferenceId, UpdateParticipantStatusEventRequest updateParticipantStatusEventRequest) { var conference = await _conferenceCache.GetOrAddConferenceAsync(conferenceId, () => { _logger.LogTrace($"Retrieving conference details for conference: ${conferenceId}"); return(_videoApiClient.GetConferenceDetailsByIdAsync(conferenceId)); }); var username = User.Identity.Name; var participantId = GetIdForParticipantByUsernameInConference(conference, username); var conferenceEventRequest = new ConferenceEventRequest { Conference_id = conferenceId.ToString(), Participant_id = participantId.ToString(), Event_id = Guid.NewGuid().ToString(), Event_type = updateParticipantStatusEventRequest.EventType, Time_stamp_utc = DateTime.UtcNow, Reason = EventTypeReasonMapper.Map(updateParticipantStatusEventRequest.EventType) }; var callbackEvent = CallbackEventMapper.MapConferenceEventToCallbackEventModel(conferenceEventRequest, conference); var handler = _eventHandlerFactory.Get(callbackEvent.EventType); try { await handler.HandleAsync(callbackEvent); } catch (ConferenceNotFoundException) { return(BadRequest()); } try { await _videoApiClient.RaiseVideoEventAsync(conferenceEventRequest); return(NoContent()); } catch (VideoApiException e) { return(StatusCode(e.StatusCode, e.Response)); } }
public async Task <IActionResult> UpdateParticipantStatusAsync(Guid conferenceId, UpdateParticipantStatusEventRequest updateParticipantStatusEventRequest) { var conference = await _conferenceCache.GetOrAddConferenceAsync(conferenceId, () => _videoApiClient.GetConferenceDetailsByIdAsync(conferenceId)); var participantId = GetIdForParticipantByUsernameInConference(conference); var eventTypeMapper = _mapperFactory.Get <EventType, string>(); var conferenceEventRequest = new ConferenceEventRequest { ConferenceId = conferenceId.ToString(), ParticipantId = participantId.ToString(), EventId = Guid.NewGuid().ToString(), EventType = updateParticipantStatusEventRequest.EventType, TimeStampUtc = DateTime.UtcNow, Reason = eventTypeMapper.Map(updateParticipantStatusEventRequest.EventType) }; var callbackEventMapper = _mapperFactory.Get <ConferenceEventRequest, Conference, CallbackEvent>(); var callbackEvent = callbackEventMapper.Map(conferenceEventRequest, conference); var handler = _eventHandlerFactory.Get(callbackEvent.EventType); try { await handler.HandleAsync(callbackEvent); } catch (ConferenceNotFoundException e) { _logger.LogError(e, $"Unable to retrieve conference details"); return(BadRequest(e)); } try { await _videoApiClient.RaiseVideoEventAsync(conferenceEventRequest); return(NoContent()); } catch (VideoApiException e) { _logger.LogError(e, $"Unable to update participant status for " + $"participant: {participantId} in conference: {conferenceId}"); return(StatusCode(e.StatusCode, e.Response)); } }
public async Task Should_call_api_when_cache_is_empty() { _conferenceCacheMock.Setup(cache => cache.GetOrAddConferenceAsync(_testConference.Id, It.IsAny <Func <Task <ConferenceDetailsResponse> > >())) .Callback(async(Guid anyGuid, Func <Task <ConferenceDetailsResponse> > factory) => await factory()) .ReturnsAsync(_testConference); var conferenceId = _testConference.Id; var request = new UpdateParticipantStatusEventRequest { EventType = EventType.Joined }; _videoApiClientMock .Setup(x => x.RaiseVideoEventAsync(It.IsAny <ConferenceEventRequest>())) .Returns(Task.FromResult(default(object))); await _controller.UpdateParticipantStatusAsync(conferenceId, request); _videoApiClientMock.Verify(x => x.GetConferenceDetailsByIdAsync(_testConference.Id), Times.Once); }
public async Task Should_return_ok() { _conferenceCacheMock.Setup(cache => cache.GetOrAddConferenceAsync(_testConference.Id, It.IsAny <Func <Task <ConferenceDetailsResponse> > >())) .Callback(async(Guid anyGuid, Func <Task <ConferenceDetailsResponse> > factory) => await factory()) .ReturnsAsync(_testConference); var conferenceId = _testConference.Id; var request = new UpdateParticipantStatusEventRequest { EventType = EventType.Joined }; _videoApiClientMock .Setup(x => x.RaiseVideoEventAsync(It.IsAny <ConferenceEventRequest>())) .Returns(Task.FromResult(default(object))); var result = await _controller.UpdateParticipantStatusAsync(conferenceId, request); var typedResult = (NoContentResult)result; typedResult.Should().NotBeNull(); }