public void testPostParticipantToGroupIsSuccessful()
        {
            const int groupId = 456;

            List<ParticipantSignup> particpantIdToAdd = new List<ParticipantSignup>
            {
                new ParticipantSignup(){
                    particpantId = 90210,
                    childCareNeeded = false
                },
                new ParticipantSignup()
                {
                    particpantId = 41001,
                    childCareNeeded = false
                }
            };

            List<Event> events = new List<Event>();
            Event e1 = new Event();
            e1.EventId = 101;
            Event e2 = new Event();
            e2.EventId = 202;
            events.Add(e1);
            events.Add(e2);

            var participantsAdded = new List<Dictionary<string, object>>
            {
                new Dictionary<string, object> {
                    {"123", "456"}
                },
                new Dictionary<string, object> {
                    {"abc", "def"}
                },
            };
            groupServiceMock.Setup(mocked => mocked.addParticipantsToGroup(groupId, particpantIdToAdd));

            IHttpActionResult result = fixture.Post(groupId, particpantIdToAdd);

            authenticationServiceMock.VerifyAll();
            groupServiceMock.VerifyAll();

            Assert.IsNotNull(result);
            Assert.IsInstanceOf(typeof(OkResult), result);
        }
        public Event GetEvent(int eventId)
        {
            var token = ApiLogin();
            var searchString = string.Format("{0},", eventId);
            var r = _ministryPlatformService.GetPageViewRecords("EventsWithDetail", token, searchString);
            if (r.Count == 1)
            {
                var record = r[0];
                var e = new Event
                {
                    EventEndDate = record.ToDate("Event_End_Date"),
                    EventId = record.ToInt("Event_ID"),
                    EventStartDate = record.ToDate("Event_Start_Date"),
                    EventTitle = record.ToString("Event_Title"),
                    ParentEventId = record.ToNullableInt("Parent_Event_ID"),
                    PrimaryContact = new Contact
                    {
                        ContactId = record.ToInt("Contact_ID"),
                        EmailAddress = record.ToString("Email_Address")
                    }
                };


                return e;
            }
            if (r.Count == 0)
            {
                return null;
            }
            throw new ApplicationException(string.Format("Duplicate Event ID detected: {0}", eventId));
        }
        public void SendTwoRsvpEmails()
        {
            const int daysBefore = 999;
            const int emailTemplateId = 77;
            const int unassignedContact = 7386594;
            var participants = new List<EventParticipant>
            {
                new EventParticipant
                {
                    ParticipantId = 1,
                    EventId = 123,
                    ContactId = 987654
                },
                new EventParticipant
                {
                    ParticipantId = 2,
                    EventId = 456,
                    ContactId = 456123
                }
            };

            var mockPrimaryContact = new Contact
            {
                ContactId = 98765,
                EmailAddress = "*****@*****.**"
            };

            var defaultContact = new MyContact
            {
                Contact_ID = 123456,
                Email_Address = "*****@*****.**"
            };

            var mockEvent1 = new Event {EventType = "Childcare", PrimaryContact = mockPrimaryContact};
            var mockEvent2 = new Event {EventType = "DoggieDaycare", PrimaryContact = mockPrimaryContact};
            var mockEvents = new List<Event> {mockEvent1, mockEvent2};

            _configurationWrapper.Setup(m => m.GetConfigIntValue("NumberOfDaysBeforeEventToSend")).Returns(daysBefore);
            _configurationWrapper.Setup(m => m.GetConfigIntValue("ChildcareRequestTemplate")).Returns(emailTemplateId);
            _communicationService.Setup(m => m.GetTemplate(emailTemplateId)).Returns(new MessageTemplate());            
            _eventParticipantService.Setup(m => m.GetChildCareParticipants(daysBefore)).Returns(participants);
            _communicationService.Setup(m => m.SendMessage(It.IsAny<Communication>())).Verifiable();

            var kids = new List<Participant> { new Participant { ContactId = 456321987 } };
            _crdsEventService.Setup(m => m.EventParticpants(987654321, It.IsAny<string>())).Returns(kids);
            var mockChildcareEvent = new Event {EventId = 987654321};
            var mockContact = new Contact
            {
                ContactId = 8888888,
                EmailAddress = "*****@*****.**"
            };
            mockChildcareEvent.PrimaryContact = mockContact;
            _crdsEventService.Setup(m => m.GetChildcareEvent(participants[0].EventId)).Returns(mockChildcareEvent);
            _crdsEventService.Setup(m => m.GetChildcareEvent(participants[1].EventId)).Returns(mockChildcareEvent);
            _configurationWrapper.Setup(m => m.GetConfigIntValue("DefaultContactEmailId")).Returns(1234);
            _contactService.Setup(mocked => mocked.GetContactById(1234)).Returns(defaultContact); 
            var myKids = new List<Participant>();
            _crdsEventService.Setup(m => m.MyChildrenParticipants(987654, kids, It.IsAny<string>())).Returns(myKids);

            _fixture.SendRequestForRsvp();

            _configurationWrapper.VerifyAll();
            _communicationService.VerifyAll();
            _contactService.VerifyAll();
            _eventParticipantService.VerifyAll();
            _communicationService.VerifyAll();
            _communicationService.Verify(m => m.SendMessage(It.IsAny<Communication>()), Times.Exactly(2));
            _eventService.VerifyAll();
        }
        private Dictionary<string, object> HandleNoRsvp(Participant participant,
                                                        Event e,
                                                        List<int> opportunityIds,
                                                        string token,
                                                        MyContact groupLeader)
        {
            int templateId;
            Opportunity previousOpportunity = null;

            try
            {
                templateId = AppSetting("RsvpNoTemplate");
                //opportunityId = opportunityIds.First();
                _eventService.UnregisterParticipantForEvent(participant.ParticipantId, e.EventId);
            }
            catch (ApplicationException ex)
            {
                logger.Debug(ex.Message + ": There is no need to remove the event participant because there is not one.");
                templateId = AppSetting("RsvpNoTemplate");
            }

            // Responding no means that we are saying no to all opportunities for this group for this event            
            foreach (var oid in opportunityIds)
            {
                var comments = string.Empty; //anything of value to put in comments?
                var updatedOpp = _opportunityService.RespondToOpportunity(participant.ParticipantId,
                                                                          oid,
                                                                          comments,
                                                                          e.EventId,
                                                                          false);
                if (updatedOpp > 0)
                {
                    previousOpportunity = _opportunityService.GetOpportunityById(oid, token);
                }
            }

            if (previousOpportunity != null)
            {
                var emailName = participant.DisplayName;
                var emailEmail = participant.EmailAddress;
                var emailTeamName = previousOpportunity.GroupName;
                var emailOpportunityName = previousOpportunity.OpportunityName;
                var emailEventDateTime = e.EventStartDate.ToString();

                SendCancellationMessage(groupLeader, emailName, emailEmail, emailTeamName, emailOpportunityName, emailEventDateTime);
            }

            return new Dictionary<string, object>()
            {
                {"templateId", templateId},
                {"previousOpportunity", previousOpportunity},
                {"rsvp", false}
            };
        }
        private Dictionary<string, object> HandleYesRsvp(Participant participant,
                                                         Event e,
                                                         int opportunityId,
                                                         IReadOnlyCollection<int> opportunityIds,
                                                         String token)
        {
            var templateId = AppSetting("RsvpYesTemplate");
            var deletedRSVPS = new List<int>();
            Opportunity previousOpportunity = null;

            var opportunity = _opportunityService.GetOpportunityById(opportunityId,token);
            //Try to register this user for the event
            _eventService.RegisterParticipantForEvent(participant.ParticipantId, e.EventId, opportunity.GroupId);

            // Make sure we are only rsvping for 1 opportunity by removing all existing responses
            deletedRSVPS.AddRange(from oid in opportunityIds
                let deletedResponse =
                                      _opportunityService.DeleteResponseToOpportunities(participant.ParticipantId, oid, e.EventId)
                where deletedResponse != 0
                select oid);

            if (deletedRSVPS.Count > 0)
            {
                templateId = AppSetting("RsvpChangeTemplate");
                if (opportunityIds.Count != deletedRSVPS.Count)
                {
                    //Changed yes to yes
                    //prevOppId = deletedRSVPS.First();
                    previousOpportunity = _opportunityService.GetOpportunityById(deletedRSVPS.First(), token);
                }
            }
            var comments = string.Empty; //anything of value to put in comments?
            _opportunityService.RespondToOpportunity(participant.ParticipantId,
                                                     opportunityId,
                                                     comments,
                                                     e.EventId,
                                                     true);
            return new Dictionary<string, object>()
            {
                {"templateId", templateId},
                {"previousOpportunity", previousOpportunity},
                {"rsvp", true}
            };
        }
 private Dictionary<string, object> CreateRsvp(string token,
                                               int opportunityId,
                                               List<int> opportunityIds,
                                               bool signUp,
                                               Participant participant,
                                               Event @event,
                                               MyContact groupLeader)
 {
     var response = signUp
         ? HandleYesRsvp(participant, @event, opportunityId, opportunityIds, token)
         : HandleNoRsvp(participant, @event, opportunityIds, token, groupLeader);
     return response;
 }
 private static DateTime IncrementSequenceDate(Event @event, DateTime sequenceDate, int increment)
 {
     if (@event.EventStartDate.Date > sequenceDate.Date)
     {
         sequenceDate = sequenceDate.AddDays(increment);
     }
     return sequenceDate;
 }
 private static MyContact ReplyToContact(Event childEvent)
 {
     var contact = childEvent.PrimaryContact;
     var replyToContact = new MyContact
     {
         Contact_ID = contact.ContactId,
         Email_Address = contact.EmailAddress
     };
     return replyToContact;
 }