public async Task ProcessEmailRequestBatch_CannotBeRetried()
        {
            var graphRequests = this.GetGraphRequest();

            var httpresponsemessage = this.GetEmailResponseMessage(graphRequests, "ErrorSubmissionQuotaExceeded", "Quota Exceeded", HttpStatusCode.TooManyRequests);

            var handlerMock = new Mock <HttpMessageHandler>();

            _ = handlerMock
                .Protected()
                .Setup <Task <HttpResponseMessage> >(
                "SendAsync",
                ItExpr.IsAny <HttpRequestMessage>(),
                ItExpr.IsAny <CancellationToken>())
                .ReturnsAsync(httpresponsemessage);

            var       httpClient      = new HttpClient(handlerMock.Object);
            Exception ex              = null;
            var       msGrpahProvider = new MSGraphProvider(this.MsGraphSetting, Options.Create(this.retrySetting), this.Logger, httpClient);

            try
            {
                var result = await msGrpahProvider.ProcessEmailRequestBatch(this.TestTokenHeader, graphRequests).ConfigureAwait(false);
            }
            catch (Exception e)
            {
                ex = e;
            }

            Assert.IsTrue(ex?.Message?.Contains("An error occurred while processing notification batch", StringComparison.OrdinalIgnoreCase));
        }
        public async Task ProcessDeleteInvite_BadRequest()
        {
            var eventId = Guid.NewGuid().ToString();
            var id      = Guid.NewGuid().ToString();
            HttpResponseMessage resp = this.GetHttpResponseMessage(HttpStatusCode.BadRequest, id);
            var handlerMock          = new Mock <HttpMessageHandler>();

            _ = handlerMock
                .Protected()
                .Setup <Task <HttpResponseMessage> >(
                "SendAsync",
                ItExpr.IsAny <HttpRequestMessage>(),
                ItExpr.IsAny <CancellationToken>())
                .ReturnsAsync(resp);
            var       httpClient      = new HttpClient(handlerMock.Object);
            var       notificationId  = Guid.NewGuid().ToString();
            var       msGrpahProvider = new MSGraphProvider(this.MsGraphSetting, Options.Create(this.retrySetting), this.Logger, httpClient);
            Exception ex = null;

            try
            {
                var result = await msGrpahProvider.DeleteMeetingInvite(this.TestTokenHeader, notificationId, eventId).ConfigureAwait(false);
            }
            catch (Exception e)
            {
                ex = e;
            }

            Assert.IsTrue(ex?.Message?.Contains($"An error occurred while sending notification id: {notificationId}"));
        }
        public async Task ProcessSendInvite_Response_Null()
        {
            var       notificationId  = Guid.NewGuid().ToString();
            Exception ex              = null;
            var       msGrpahProvider = new MSGraphProvider(this.MsGraphSetting, Options.Create(this.retrySetting), this.Logger, this.MockedHttpClient.Object);

            try
            {
                var result = await msGrpahProvider.SendMeetingInvite(this.TestTokenHeader, this.GetInvitePayload(), notificationId).ConfigureAwait(false);
            }
            catch (Exception e)
            {
                ex = e;
            }

            Assert.IsTrue(ex?.Message?.Contains($"An error occurred while sending notification id: {notificationId}"));
        }
        public async Task ProcessEmailRequestBatch_Response_Null()
        {
            var graphRequests = this.GetGraphRequest();

            Exception ex = null;
            var       msGrpahProvider = new MSGraphProvider(this.MsGraphSetting, Options.Create(this.retrySetting), this.Logger, this.MockedHttpClient.Object);

            try
            {
                var result = await msGrpahProvider.ProcessEmailRequestBatch(this.TestTokenHeader, graphRequests).ConfigureAwait(false);
            }
            catch (Exception e)
            {
                ex = e;
            }

            Assert.IsTrue(ex?.Message?.Contains("An error occurred while processing notification batch", StringComparison.OrdinalIgnoreCase));
        }
        public async Task ProcessSendInvite_RequestTimeout()
        {
            HttpResponseMessage resp = this.GetHttpResponseMessage(HttpStatusCode.RequestTimeout, null);
            var handlerMock          = new Mock <HttpMessageHandler>();

            _ = handlerMock
                .Protected()
                .Setup <Task <HttpResponseMessage> >(
                "SendAsync",
                ItExpr.IsAny <HttpRequestMessage>(),
                ItExpr.IsAny <CancellationToken>())
                .ReturnsAsync(resp);
            var httpClient      = new HttpClient(handlerMock.Object);
            var notificationId  = Guid.NewGuid().ToString();
            var msGrpahProvider = new MSGraphProvider(this.MsGraphSetting, Options.Create(this.retrySetting), this.Logger, httpClient);
            var result          = await msGrpahProvider.SendMeetingInvite(this.TestTokenHeader, this.GetInvitePayload(), notificationId).ConfigureAwait(false);

            Assert.AreEqual(result.StatusCode, HttpStatusCode.RequestTimeout);
        }
        public void ProcessSendInviteAttachments_Success()
        {
            var eventId = Guid.NewGuid().ToString();
            var id      = Guid.NewGuid().ToString();
            HttpResponseMessage resp = this.GetHttpResponseMessage(HttpStatusCode.TooManyRequests, null);
            var handlerMock          = new Mock <HttpMessageHandler>();

            _ = handlerMock
                .Protected()
                .Setup <Task <HttpResponseMessage> >(
                "SendAsync",
                ItExpr.IsAny <HttpRequestMessage>(),
                ItExpr.IsAny <CancellationToken>())
                .ReturnsAsync(resp);
            var httpClient      = new HttpClient(handlerMock.Object);
            var notificationId  = Guid.NewGuid().ToString();
            var msGrpahProvider = new MSGraphProvider(this.MsGraphSetting, Options.Create(this.retrySetting), this.Logger, httpClient);
            var result          = msGrpahProvider.SendMeetingInviteAttachments(this.TestTokenHeader, this.GetAttachments(), notificationId, eventId);

            Assert.AreEqual(result.Count, 2);
        }
        public async Task ProcessEmailRequestBatch_Success()
        {
            var graphRequests = this.GetGraphRequest();

            var httpresponsemessage = this.GetEmailResponseMessage(graphRequests, null, null, HttpStatusCode.Accepted);

            var handlerMock = new Mock <HttpMessageHandler>();

            _ = handlerMock
                .Protected()
                .Setup <Task <HttpResponseMessage> >(
                "SendAsync",
                ItExpr.IsAny <HttpRequestMessage>(),
                ItExpr.IsAny <CancellationToken>())
                .ReturnsAsync(httpresponsemessage);

            var httpClient = new HttpClient(handlerMock.Object);

            var msGrpahProvider = new MSGraphProvider(this.MsGraphSetting, Options.Create(this.retrySetting), this.Logger, httpClient);
            var result          = await msGrpahProvider.ProcessEmailRequestBatch(this.TestTokenHeader, graphRequests).ConfigureAwait(false);

            Assert.AreEqual(2, result.Where(x => x.Status == HttpStatusCode.Accepted).Count());
        }
        public async Task ProcessUpdateInvite_Success()
        {
            var eventId = Guid.NewGuid().ToString();
            var id      = Guid.NewGuid().ToString();
            HttpResponseMessage resp = this.GetHttpResponseMessage(HttpStatusCode.Accepted, id);
            var handlerMock          = new Mock <HttpMessageHandler>();

            _ = handlerMock
                .Protected()
                .Setup <Task <HttpResponseMessage> >(
                "SendAsync",
                ItExpr.IsAny <HttpRequestMessage>(),
                ItExpr.IsAny <CancellationToken>())
                .ReturnsAsync(resp);
            var httpClient      = new HttpClient(handlerMock.Object);
            var notificationId  = Guid.NewGuid().ToString();
            var msGrpahProvider = new MSGraphProvider(this.MsGraphSetting, Options.Create(this.retrySetting), this.Logger, httpClient);
            var result          = await msGrpahProvider.UpdateMeetingInvite(this.TestTokenHeader, this.GetInvitePayload(), notificationId, eventId).ConfigureAwait(false);

            Assert.AreEqual(result.StatusCode, HttpStatusCode.Accepted);
            var res = JsonConvert.DeserializeObject <InviteResponse>(result.Result);

            Assert.AreEqual(res.EventId, id);
        }