public void Scenario_SSCommand_GuestUser_Test()
        {
            CampfireState   campInfo = CampfireState.Instance;
            MockCampfireAPI api      = new MockCampfireAPI();

            Assert.AreEqual(0, campInfo.Users.Count);

            int msgId       = 1;
            int fakeUserId  = 12;
            int guestUserId = 123;

            api.FakeUsers.Add(new User("Peter Potrebic", "*****@*****.**", fakeUserId));

            int roomId1 = 24;

            api.FakeRooms.Add(new Room(roomId1, "room #24"));

            MessageProcessor_Accessor.Work_ScanForAddOrRemoveRooms(campInfo, api);
            Assert.AreEqual(1, campInfo.Rooms.Count);

            List <Message> msgs;

            msgs = new List <Message>();
            api.MessagesInRoom[roomId1] = msgs;

            // Create a Text Message for the fakeUser
            api.MessagesInRoom[roomId1].Add(new CampfireAPI.Message(msgId++, CampfireAPI.Message.MType.TextMessage, roomId1, guestUserId,
                                                                    "@SSignal:[email protected] please"));

            // This process step should just ignore the command because it was issued by a quest.
            MessageProcessor_Accessor.Work_ProcessNewMessagesForAllRooms(campInfo, api);
        }
        public void Scenario_SSCommand_SetAltEmail_Test()
        {
            CampfireState   campInfo = CampfireState.Instance;
            MockCampfireAPI api      = new MockCampfireAPI();

            Assert.AreEqual(0, campInfo.Users.Count);

            int msgId      = 1;
            int fakeUserId = 12;

            api.FakeUsers.Add(new User("Peter Potrebic", "*****@*****.**", fakeUserId));

            int roomId1 = 24;

            api.FakeRooms.Add(new Room(roomId1, "room #24"));

            MessageProcessor_Accessor.Work_ScanForAddOrRemoveRooms(campInfo, api);
            Assert.AreEqual(1, campInfo.Rooms.Count);

            List <Message> msgs;

            msgs = new List <Message>();
            api.MessagesInRoom[roomId1] = msgs;

            // Create a Text Message for the fakeUser
            api.MessagesInRoom[roomId1].Add(new CampfireAPI.Message(msgId++, CampfireAPI.Message.MType.TextMessage, roomId1, fakeUserId,
                                                                    "hello"));

            // The process step should now process that Text Message which gets the current user into the system
            MessageProcessor_Accessor.Work_ProcessNewMessagesForAllRooms(campInfo, api);

            Assert.AreEqual("", campInfo.Users[0].AltEmailAddress);

            // Create a Text Message for the fakeUser
            api.MessagesInRoom[roomId1].Add(new CampfireAPI.Message(msgId++, CampfireAPI.Message.MType.TextMessage, roomId1, fakeUserId,
                                                                    "@SSignal:[email protected] please"));
            // The process step should now process that Text Message which gets the current user into the system
            MessageProcessor_Accessor.Work_ProcessNewMessagesForAllRooms(campInfo, api);

            Assert.AreEqual("*****@*****.**", campInfo.Users[0].AltEmailAddress);

            // Create a Text Message for the fakeUser
            api.MessagesInRoom[roomId1].Add(new CampfireAPI.Message(msgId++, CampfireAPI.Message.MType.TextMessage, roomId1, fakeUserId,
                                                                    "@SSignal:AltEmail=bogus_email please"));
            // The process step should now process that Text Message which gets the current user into the system
            MessageProcessor_Accessor.Work_ProcessNewMessagesForAllRooms(campInfo, api);

            Assert.AreEqual("*****@*****.**", campInfo.Users[0].AltEmailAddress);

            // Create a Text Message for the fakeUser
            api.MessagesInRoom[roomId1].Add(new CampfireAPI.Message(msgId++, CampfireAPI.Message.MType.TextMessage, roomId1, fakeUserId,
                                                                    "@SSignal:ALTEMAIL= please"));
            // The process step should now process that Text Message which gets the current user into the system
            MessageProcessor_Accessor.Work_ProcessNewMessagesForAllRooms(campInfo, api);

            Assert.AreEqual("", campInfo.Users[0].AltEmailAddress);
        }
        public void Scenario_AddAndRemovePendingNotif_Test()
        {
            CampfireState   campInfo = CampfireState.Instance;
            MockCampfireAPI api      = new MockCampfireAPI();

            Assert.AreEqual(0, campInfo.Users.Count);

            int msgId      = 1;
            int fakeUserId = 12;

            api.FakeUsers.Add(new User("Peter Potrebic", "*****@*****.**", fakeUserId));
            int fakeUserId2 = 13;

            api.FakeUsers.Add(new User("Joe Cabral", "*****@*****.**", fakeUserId2));

            int roomId1 = 24;
            int roomId2 = 25;

            api.FakeRooms.Add(new Room(roomId1, "room #24"));
            api.FakeRooms.Add(new Room(roomId2, "room #25"));

            MessageProcessor_Accessor.Work_ScanForAddOrRemoveRooms(campInfo, api);
            Assert.AreEqual(2, campInfo.Rooms.Count);

            List <Message> msgs;

            msgs = new List <Message>();
            api.MessagesInRoom[roomId1] = msgs;
            msgs = new List <Message>();
            api.MessagesInRoom[roomId2] = msgs;

            // Create a Entered Message for the fakeUser
            api.MessagesInRoom[roomId1].Add(new CampfireAPI.Message(msgId++, CampfireAPI.Message.MType.EnterMessage, roomId1, fakeUserId, string.Empty));
            api.MessagesInRoom[roomId2].Add(new CampfireAPI.Message(msgId++, CampfireAPI.Message.MType.EnterMessage, roomId2, fakeUserId2, string.Empty));

            MessageProcessor_Accessor.Work_ProcessNewMessagesForAllRooms(campInfo, api);
            Assert.AreEqual(2, campInfo.Users.Count);
            Assert.IsTrue(campInfo.Users.Any(u => u.Id == fakeUserId && u.Name == "Peter Potrebic"));
            Assert.IsTrue(campInfo.Users.Any(u => u.Id == fakeUserId2 && u.Name == "Joe Cabral"));
            campInfo.UpdateUser(fakeUserId2, 10);

            // Create a Text Message for the fakeUser
            api.MessagesInRoom[roomId1].Add(new CampfireAPI.Message(msgId++, CampfireAPI.Message.MType.TextMessage, roomId1, fakeUserId, "Hey, @JoeC care to join us"));

            // The process step should now process that Text Message
            MessageProcessor_Accessor.Work_ProcessNewMessagesForAllRooms(campInfo, api);
            Assert.AreEqual(1, campInfo.PendingNotifications.Count);
            CampfireState.PendingNotify pn = campInfo.PendingNotifications[0];
            Assert.IsTrue(pn.TriggerTime > DateTime.Now.AddMinutes(9));

            // now the target of the notication enters the room... which should cancel the notification
            api.MessagesInRoom[roomId1].Add(new CampfireAPI.Message(msgId++, CampfireAPI.Message.MType.EnterMessage, roomId1, fakeUserId2, string.Empty));
            MessageProcessor_Accessor.Work_ProcessNewMessagesForAllRooms(campInfo, api);
            Assert.AreEqual(0, campInfo.PendingNotifications.Count);
        }
        public void Work_FetchNewMessagesForAllRoomsTest()
        {
            CampfireState   campInfo = CampfireState.Instance;
            MockCampfireAPI api      = new MockCampfireAPI();

            List <Message> msgs;

            // Create a new room (at the API level)
            int roomId1 = 123;
            int roomId2 = 1001;
            int userId1 = 100;
            int userId2 = 200;

            api.FakeUsers.Add(new User("Peter", "*****@*****.**", userId1));
            api.FakeUsers.Add(new User("Casey", "*****@*****.**", userId2));

            Room rm1 = new Room(roomId1, "room #1");

            // The room must exist in the API and in cmapfireState
            api.FakeRooms.Add(rm1);
            campInfo.AddRoom(rm1.Id, rm1.Name, 0);

            // add a couple fake messages to room1
            msgs = new List <Message>();
            msgs.Add(new Message(1, Message.MType.EnterMessage, roomId1, userId1, ""));
            msgs.Add(new Message(2, Message.MType.TextMessage, roomId1, userId1, "Hello everyone"));
            api.MessagesInRoom.Add(roomId1, msgs);

            // add room 2
            Room rm2 = new Room(roomId2, "room #2");

            api.FakeRooms.Add(rm2);
            campInfo.AddRoom(rm2.Id, rm2.Name, 0);

            // add a couple fake messages to room1
            msgs = new List <Message>();
            msgs.Add(new Message(3, Message.MType.EnterMessage, roomId2, userId2, ""));
            msgs.Add(new Message(4, Message.MType.TextMessage, roomId2, userId2, "message from user 2"));
            msgs.Add(new Message(5, Message.MType.TextMessage, roomId2, userId1, "message from user 1"));
            api.MessagesInRoom.Add(roomId2, msgs);

            // The process step should now pick up the change and incorporate into campfileState
            MessageProcessor_Accessor.Work_ProcessNewMessagesForAllRooms(campInfo, api);

            // In the "Entered" queue there should be 2 entries
            MessageProcessor_Accessor.ProcessMessages_ProcessQueuedMessages(campInfo, api);
            Assert.AreEqual(2, campInfo.Users.Count);
            Assert.IsTrue(campInfo.Users.Any(u => u.Id == userId1));
            Assert.IsTrue(campInfo.Users.Any(u => u.Id == userId2));

            // In the Text Message queue there should be 3 entries
            MessageProcessor_Accessor.ProcessMessages_ProcessQueuedMessages(campInfo, api);
        }
        public void Work_ScanForAddOrRemoveRoomsTest()
        {
            CampfireState   campInfo = CampfireState.Instance;
            MockCampfireAPI api      = new MockCampfireAPI();

            // Create a new room (at the API level)
            int roomId = 123;

            api.FakeRooms.Add(new Room(roomId, "talking room"));

            // The process step should now pick up the change and incorporate into campfileState
            MessageProcessor_Accessor.Work_ScanForAddOrRemoveRooms(campInfo, api);
            Assert.AreEqual(1, campInfo.Rooms.Count);
            Assert.IsTrue(campInfo.Rooms.Any(u => u.Id == roomId && u.Name == "talking room"));
        }
        public void Work_ScanForUserChangesTest()
        {
            CampfireState   campInfo = CampfireState.Instance;
            MockCampfireAPI api      = new MockCampfireAPI();

            // initialize known state with 1 user
            int changedUserId = 12;

            campInfo.AddUser(changedUserId, "Peter", "*****@*****.**", "1234");

            // Now change the data assoc with that user (at the API level)
            api.FakeUsers.Add(new User("Jake", "*****@*****.**", changedUserId));

            // The process step should now pick up the change and incorporate into campfileState
            MessageProcessor_Accessor.Work_ScanForUserChanges(campInfo, api);
            Assert.AreEqual(1, campInfo.Users.Count);
            Assert.IsTrue(campInfo.Users.Any(u => u.Id == changedUserId && u.Name == "Jake" && u.EmailAddress == "*****@*****.**"));
        }
        public void Work_ConsumeQueuedEnterMessagesTest()
        {
            CampfireState   campInfo = CampfireState.Instance;
            MockCampfireAPI api      = new MockCampfireAPI();

            Assert.AreEqual(0, campInfo.Users.Count);

            int fakeUserId = 12;

            api.FakeUsers.Add(new User("Peter", "*****@*****.**", fakeUserId));

            // Create a Entered Message for the fakeUser
            campInfo.QueueMessage(new CampfireAPI.Message(1, CampfireAPI.Message.MType.EnterMessage, 23, fakeUserId, string.Empty));

            // The process step should now process that queued Enter Message
            MessageProcessor_Accessor.ProcessMessages_ProcessQueuedMessages(campInfo, api);
            Assert.AreEqual(1, campInfo.Users.Count);
            Assert.IsTrue(campInfo.Users.Any(u => u.Id == fakeUserId && u.Name == "Peter"));
        }
        public void Scenario_SSCommand_SetDelay_Test()
        {
            CampfireState   campInfo = CampfireState.Instance;
            MockCampfireAPI api      = new MockCampfireAPI();

            Assert.AreEqual(0, campInfo.Users.Count);

            int msgId      = 1;
            int fakeUserId = 12;

            api.FakeUsers.Add(new User("Peter Potrebic", "*****@*****.**", fakeUserId));

            int roomId1 = 24;

            api.FakeRooms.Add(new Room(roomId1, "room #24"));

            MessageProcessor_Accessor.Work_ScanForAddOrRemoveRooms(campInfo, api);
            Assert.AreEqual(1, campInfo.Rooms.Count);

            List <Message> msgs;

            msgs = new List <Message>();
            api.MessagesInRoom[roomId1] = msgs;

            //// Create a Entered Message for the fakeUser
            //api.MessagesInRoom[roomId1].Add(new CampfireAPI.Message(msgId++, CampfireAPI.Message.MType.EnterMessage, roomId1, fakeUserId, string.Empty));
            //api.MessagesInRoom[roomId2].Add(new CampfireAPI.Message(msgId++, CampfireAPI.Message.MType.EnterMessage, roomId2, fakeUserId2, string.Empty));

            //MessageProcessor_Accessor.Work_ProcessNewMessagesForAllRooms(campInfo, api);
            //Assert.AreEqual(2, campInfo.Users.Count);
            //Assert.IsTrue(campInfo.Users.Any(u => u.Id == fakeUserId && u.Name == "Peter Potrebic"));
            //Assert.IsTrue(campInfo.Users.Any(u => u.Id == fakeUserId2 && u.Name == "Joe Cabral"));
            //campInfo.UpdateUser(fakeUserId2, 10);

            // Create a Text Message for the fakeUser
            api.MessagesInRoom[roomId1].Add(new CampfireAPI.Message(msgId++, CampfireAPI.Message.MType.TextMessage, roomId1, fakeUserId, "@SSignal:Delay=6 please"));

            // The process step should now process that Text Message
            MessageProcessor_Accessor.Work_ProcessNewMessagesForAllRooms(campInfo, api);

            Assert.AreEqual(6, campInfo.Users[0].DelayInMinutes);
        }
        public void Scenario_GuestUser_SendsSmokeSignal_Test()
        {
            CampfireState   campInfo = CampfireState.Instance;
            MockCampfireAPI api      = new MockCampfireAPI();

            Assert.AreEqual(0, campInfo.Users.Count);

            int msgId       = 1;
            int realUserId  = 12;
            int guestUserId = 123;

            api.FakeUsers.Add(new User("Peter Potrebic", "*****@*****.**", realUserId));

            int roomId1 = 24;

            api.FakeRooms.Add(new Room(roomId1, "room #24"));

            MessageProcessor_Accessor.Work_ScanForAddOrRemoveRooms(campInfo, api);
            Assert.AreEqual(1, campInfo.Rooms.Count);

            List <Message> msgs;

            msgs = new List <Message>();
            api.MessagesInRoom[roomId1] = msgs;

            // Create a Text Message for the real user
            api.MessagesInRoom[roomId1].Add(new CampfireAPI.Message(msgId++, CampfireAPI.Message.MType.TextMessage, roomId1, realUserId,
                                                                    "hello"));

            // The process step should now process that Text Message which gets the user into the system
            MessageProcessor_Accessor.Work_ProcessNewMessagesForAllRooms(campInfo, api);

            // Create a Text Message for the fakeUser
            api.MessagesInRoom[roomId1].Add(new CampfireAPI.Message(msgId++, CampfireAPI.Message.MType.TextMessage, roomId1, guestUserId,
                                                                    "!PeterP can you help with problem XYZ?"));

            MessageProcessor_Accessor.Work_ProcessNewMessagesForAllRooms(campInfo, api);
        }
        public void Work_ConsumeQueuedEnterMessagesTest()
        {
            CampfireState campInfo = CampfireState.Instance;
            MockCampfireAPI api = new MockCampfireAPI();

            Assert.AreEqual(0, campInfo.Users.Count);

            int fakeUserId = 12;

            api.FakeUsers.Add(new User("Peter", "*****@*****.**", fakeUserId));

            // Create a Entered Message for the fakeUser
            campInfo.QueueMessage(new CampfireAPI.Message(1, CampfireAPI.Message.MType.EnterMessage, 23, fakeUserId, string.Empty));

            // The process step should now process that queued Enter Message
            MessageProcessor_Accessor.ProcessMessages_ProcessQueuedMessages(campInfo, api);
            Assert.AreEqual(1, campInfo.Users.Count);
            Assert.IsTrue(campInfo.Users.Any(u => u.Id == fakeUserId && u.Name == "Peter"));
        }
        public void Scenario_GuestUser_SendsSmokeSignal_Test()
        {
            CampfireState campInfo = CampfireState.Instance;
            MockCampfireAPI api = new MockCampfireAPI();

            Assert.AreEqual(0, campInfo.Users.Count);

            int msgId = 1;
            int realUserId = 12;
            int guestUserId = 123;
            api.FakeUsers.Add(new User("Peter Potrebic", "*****@*****.**", realUserId));

            int roomId1 = 24;
            api.FakeRooms.Add(new Room(roomId1, "room #24"));

            MessageProcessor_Accessor.Work_ScanForAddOrRemoveRooms(campInfo, api);
            Assert.AreEqual(1, campInfo.Rooms.Count);

            List<Message> msgs;
            msgs = new List<Message>();
            api.MessagesInRoom[roomId1] = msgs;

            // Create a Text Message for the real user
            api.MessagesInRoom[roomId1].Add(new CampfireAPI.Message(msgId++, CampfireAPI.Message.MType.TextMessage, roomId1, realUserId,
                "hello"));

            // The process step should now process that Text Message which gets the user into the system
            MessageProcessor_Accessor.Work_ProcessNewMessagesForAllRooms(campInfo, api);

            // Create a Text Message for the fakeUser
            api.MessagesInRoom[roomId1].Add(new CampfireAPI.Message(msgId++, CampfireAPI.Message.MType.TextMessage, roomId1, guestUserId,
                "!PeterP can you help with problem XYZ?"));

            MessageProcessor_Accessor.Work_ProcessNewMessagesForAllRooms(campInfo, api);
        }
        public void Scenario_SSCommand_GuestUser_Test()
        {
            CampfireState campInfo = CampfireState.Instance;
            MockCampfireAPI api = new MockCampfireAPI();

            Assert.AreEqual(0, campInfo.Users.Count);

            int msgId = 1;
            int fakeUserId = 12;
            int guestUserId = 123;
            api.FakeUsers.Add(new User("Peter Potrebic", "*****@*****.**", fakeUserId));

            int roomId1 = 24;
            api.FakeRooms.Add(new Room(roomId1, "room #24"));

            MessageProcessor_Accessor.Work_ScanForAddOrRemoveRooms(campInfo, api);
            Assert.AreEqual(1, campInfo.Rooms.Count);

            List<Message> msgs;
            msgs = new List<Message>();
            api.MessagesInRoom[roomId1] = msgs;

            // Create a Text Message for the fakeUser
            api.MessagesInRoom[roomId1].Add(new CampfireAPI.Message(msgId++, CampfireAPI.Message.MType.TextMessage, roomId1, guestUserId,
                "@SSignal:[email protected] please"));

            // This process step should just ignore the command because it was issued by a quest.
            MessageProcessor_Accessor.Work_ProcessNewMessagesForAllRooms(campInfo, api);
        }
        public void Scenario_SSCommand_SetAltEmail_Test()
        {
            CampfireState campInfo = CampfireState.Instance;
            MockCampfireAPI api = new MockCampfireAPI();

            Assert.AreEqual(0, campInfo.Users.Count);

            int msgId = 1;
            int fakeUserId = 12;
            api.FakeUsers.Add(new User("Peter Potrebic", "*****@*****.**", fakeUserId));

            int roomId1 = 24;
            api.FakeRooms.Add(new Room(roomId1, "room #24"));

            MessageProcessor_Accessor.Work_ScanForAddOrRemoveRooms(campInfo, api);
            Assert.AreEqual(1, campInfo.Rooms.Count);

            List<Message> msgs;
            msgs = new List<Message>();
            api.MessagesInRoom[roomId1] = msgs;

            // Create a Text Message for the fakeUser
            api.MessagesInRoom[roomId1].Add(new CampfireAPI.Message(msgId++, CampfireAPI.Message.MType.TextMessage, roomId1, fakeUserId, 
                "hello"));

            // The process step should now process that Text Message which gets the current user into the system
            MessageProcessor_Accessor.Work_ProcessNewMessagesForAllRooms(campInfo, api);

            Assert.AreEqual("", campInfo.Users[0].AltEmailAddress);

            // Create a Text Message for the fakeUser
            api.MessagesInRoom[roomId1].Add(new CampfireAPI.Message(msgId++, CampfireAPI.Message.MType.TextMessage, roomId1, fakeUserId,
                "@SSignal:[email protected] please"));
            // The process step should now process that Text Message which gets the current user into the system
            MessageProcessor_Accessor.Work_ProcessNewMessagesForAllRooms(campInfo, api);

            Assert.AreEqual("*****@*****.**", campInfo.Users[0].AltEmailAddress);

            // Create a Text Message for the fakeUser
            api.MessagesInRoom[roomId1].Add(new CampfireAPI.Message(msgId++, CampfireAPI.Message.MType.TextMessage, roomId1, fakeUserId,
                "@SSignal:AltEmail=bogus_email please"));
            // The process step should now process that Text Message which gets the current user into the system
            MessageProcessor_Accessor.Work_ProcessNewMessagesForAllRooms(campInfo, api);

            Assert.AreEqual("*****@*****.**", campInfo.Users[0].AltEmailAddress);

            // Create a Text Message for the fakeUser
            api.MessagesInRoom[roomId1].Add(new CampfireAPI.Message(msgId++, CampfireAPI.Message.MType.TextMessage, roomId1, fakeUserId,
                "@SSignal:ALTEMAIL= please"));
            // The process step should now process that Text Message which gets the current user into the system
            MessageProcessor_Accessor.Work_ProcessNewMessagesForAllRooms(campInfo, api);

            Assert.AreEqual("", campInfo.Users[0].AltEmailAddress);
        }
        public void Scenario_SSCommand_SetDelay_Test()
        {
            CampfireState campInfo = CampfireState.Instance;
            MockCampfireAPI api = new MockCampfireAPI();

            Assert.AreEqual(0, campInfo.Users.Count);

            int msgId = 1;
            int fakeUserId = 12;
            api.FakeUsers.Add(new User("Peter Potrebic", "*****@*****.**", fakeUserId));

            int roomId1 = 24;
            api.FakeRooms.Add(new Room(roomId1, "room #24"));

            MessageProcessor_Accessor.Work_ScanForAddOrRemoveRooms(campInfo, api);
            Assert.AreEqual(1, campInfo.Rooms.Count);

            List<Message> msgs;
            msgs = new List<Message>();
            api.MessagesInRoom[roomId1] = msgs;

            //// Create a Entered Message for the fakeUser
            //api.MessagesInRoom[roomId1].Add(new CampfireAPI.Message(msgId++, CampfireAPI.Message.MType.EnterMessage, roomId1, fakeUserId, string.Empty));
            //api.MessagesInRoom[roomId2].Add(new CampfireAPI.Message(msgId++, CampfireAPI.Message.MType.EnterMessage, roomId2, fakeUserId2, string.Empty));

            //MessageProcessor_Accessor.Work_ProcessNewMessagesForAllRooms(campInfo, api);
            //Assert.AreEqual(2, campInfo.Users.Count);
            //Assert.IsTrue(campInfo.Users.Any(u => u.Id == fakeUserId && u.Name == "Peter Potrebic"));
            //Assert.IsTrue(campInfo.Users.Any(u => u.Id == fakeUserId2 && u.Name == "Joe Cabral"));
            //campInfo.UpdateUser(fakeUserId2, 10);

            // Create a Text Message for the fakeUser
            api.MessagesInRoom[roomId1].Add(new CampfireAPI.Message(msgId++, CampfireAPI.Message.MType.TextMessage, roomId1, fakeUserId, "@SSignal:Delay=6 please"));

            // The process step should now process that Text Message
            MessageProcessor_Accessor.Work_ProcessNewMessagesForAllRooms(campInfo, api);

            Assert.AreEqual(6, campInfo.Users[0].DelayInMinutes);
        }
        public void Work_ScanForUserChangesTest()
        {
            CampfireState campInfo = CampfireState.Instance;
            MockCampfireAPI api = new MockCampfireAPI();

            // initialize known state with 1 user
            int changedUserId = 12;
            campInfo.AddUser(changedUserId, "Peter", "*****@*****.**", "1234");

            // Now change the data assoc with that user (at the API level)
            api.FakeUsers.Add(new User("Jake", "*****@*****.**", changedUserId));

            // The process step should now pick up the change and incorporate into campfileState
            MessageProcessor_Accessor.Work_ScanForUserChanges(campInfo, api);
            Assert.AreEqual(1, campInfo.Users.Count);
            Assert.IsTrue(campInfo.Users.Any(u => u.Id == changedUserId && u.Name == "Jake" && u.EmailAddress == "*****@*****.**"));
        }
        public void Scenario_AddAndRemovePendingNotif_Test()
        {
            CampfireState campInfo = CampfireState.Instance;
            MockCampfireAPI api = new MockCampfireAPI();

            Assert.AreEqual(0, campInfo.Users.Count);

            int msgId = 1;
            int fakeUserId = 12;
            api.FakeUsers.Add(new User("Peter Potrebic", "*****@*****.**", fakeUserId));
            int fakeUserId2 = 13;
            api.FakeUsers.Add(new User("Joe Cabral", "*****@*****.**", fakeUserId2));

            int roomId1 = 24;
            int roomId2 = 25;
            api.FakeRooms.Add(new Room(roomId1, "room #24"));
            api.FakeRooms.Add(new Room(roomId2, "room #25"));

            MessageProcessor_Accessor.Work_ScanForAddOrRemoveRooms(campInfo, api);
            Assert.AreEqual(2, campInfo.Rooms.Count);

            List<Message> msgs;
            msgs = new List<Message>();
            api.MessagesInRoom[roomId1] = msgs;
            msgs = new List<Message>();
            api.MessagesInRoom[roomId2] = msgs;

            // Create a Entered Message for the fakeUser
            api.MessagesInRoom[roomId1].Add(new CampfireAPI.Message(msgId++, CampfireAPI.Message.MType.EnterMessage, roomId1, fakeUserId, string.Empty));
            api.MessagesInRoom[roomId2].Add(new CampfireAPI.Message(msgId++, CampfireAPI.Message.MType.EnterMessage, roomId2, fakeUserId2, string.Empty));

            MessageProcessor_Accessor.Work_ProcessNewMessagesForAllRooms(campInfo, api);
            Assert.AreEqual(2, campInfo.Users.Count);
            Assert.IsTrue(campInfo.Users.Any(u => u.Id == fakeUserId && u.Name == "Peter Potrebic"));
            Assert.IsTrue(campInfo.Users.Any(u => u.Id == fakeUserId2 && u.Name == "Joe Cabral"));
            campInfo.UpdateUser(fakeUserId2, 10);

            // Create a Text Message for the fakeUser
            api.MessagesInRoom[roomId1].Add(new CampfireAPI.Message(msgId++, CampfireAPI.Message.MType.TextMessage, roomId1, fakeUserId, "Hey, @JoeC care to join us"));

            // The process step should now process that Text Message
            MessageProcessor_Accessor.Work_ProcessNewMessagesForAllRooms(campInfo, api);
            Assert.AreEqual(1, campInfo.PendingNotifications.Count);
            CampfireState.PendingNotify pn = campInfo.PendingNotifications[0];
            Assert.IsTrue(pn.TriggerTime > DateTime.Now.AddMinutes(9));

            // now the target of the notication enters the room... which should cancel the notification
            api.MessagesInRoom[roomId1].Add(new CampfireAPI.Message(msgId++, CampfireAPI.Message.MType.EnterMessage, roomId1, fakeUserId2, string.Empty));
            MessageProcessor_Accessor.Work_ProcessNewMessagesForAllRooms(campInfo, api);
            Assert.AreEqual(0, campInfo.PendingNotifications.Count);
        }
        public void Work_FetchNewMessagesForAllRoomsTest()
        {
            CampfireState campInfo = CampfireState.Instance;
            MockCampfireAPI api = new MockCampfireAPI();

            List<Message> msgs;

            // Create a new room (at the API level)
            int roomId1 = 123;
            int roomId2 = 1001;
            int userId1 = 100;
            int userId2 = 200;
            api.FakeUsers.Add(new User("Peter", "*****@*****.**", userId1));
            api.FakeUsers.Add(new User("Casey", "*****@*****.**", userId2));
            
            Room rm1 = new Room(roomId1, "room #1");
            
            // The room must exist in the API and in cmapfireState
            api.FakeRooms.Add(rm1);
            campInfo.AddRoom(rm1.Id, rm1.Name, 0);

            // add a couple fake messages to room1
            msgs = new List<Message>();
            msgs.Add(new Message(1, Message.MType.EnterMessage, roomId1, userId1, ""));
            msgs.Add(new Message(2, Message.MType.TextMessage, roomId1, userId1, "Hello everyone"));
            api.MessagesInRoom.Add(roomId1, msgs);

            // add room 2
            Room rm2 = new Room(roomId2, "room #2");
            api.FakeRooms.Add(rm2);
            campInfo.AddRoom(rm2.Id, rm2.Name, 0);

            // add a couple fake messages to room1
            msgs = new List<Message>();
            msgs.Add(new Message(3, Message.MType.EnterMessage, roomId2, userId2, ""));
            msgs.Add(new Message(4, Message.MType.TextMessage, roomId2, userId2, "message from user 2"));
            msgs.Add(new Message(5, Message.MType.TextMessage, roomId2, userId1, "message from user 1"));
            api.MessagesInRoom.Add(roomId2, msgs);

            // The process step should now pick up the change and incorporate into campfileState
            MessageProcessor_Accessor.Work_ProcessNewMessagesForAllRooms(campInfo, api);

            // In the "Entered" queue there should be 2 entries
            MessageProcessor_Accessor.ProcessMessages_ProcessQueuedMessages(campInfo, api);
            Assert.AreEqual(2, campInfo.Users.Count);
            Assert.IsTrue(campInfo.Users.Any(u => u.Id == userId1));
            Assert.IsTrue(campInfo.Users.Any(u => u.Id == userId2));

            // In the Text Message queue there should be 3 entries
            MessageProcessor_Accessor.ProcessMessages_ProcessQueuedMessages(campInfo, api);
        }
        public void Work_ScanForAddOrRemoveRoomsTest()
        {
            CampfireState campInfo = CampfireState.Instance;
            MockCampfireAPI api = new MockCampfireAPI();

            // Create a new room (at the API level)
            int roomId = 123;
            api.FakeRooms.Add(new Room(roomId, "talking room"));

            // The process step should now pick up the change and incorporate into campfileState
            MessageProcessor_Accessor.Work_ScanForAddOrRemoveRooms(campInfo, api);
            Assert.AreEqual(1, campInfo.Rooms.Count);
            Assert.IsTrue(campInfo.Rooms.Any(u => u.Id == roomId && u.Name == "talking room"));
        }