public void AddRoomsTest()
        {
            CampfireState target = CampfireState.Instance;
            target.SetNameAndToken("fred", "9876543210");
            target.AddRoom(1, "Room1", 12);
            target.AddRoom(101, "Room2", 0);

            List<Room> newRooms = new List<Room>();
            Room rm;

            rm = new Room(3, "Room3");        // new room
            newRooms.Add(rm);

            rm = new Room(101, "Room2");        // duplicate
            newRooms.Add(rm);

            rm = new Room(1, "RoomOne");        // existing room, new name
            newRooms.Add(rm);

            target.AddRooms(newRooms);

            Assert.AreEqual(3, target.Rooms.Count);
            Assert.IsTrue(target.Rooms.Count(r => r.Id == 1 && r.Name == "RoomOne") == 1, "verify renamed room");
            Assert.IsTrue(target.Rooms.Count(r => r.Id == 3 && r.Name == "Room3") == 1, "verify new room");

            CampfireState newCampfireInfo = CampfireState_Accessor.Restore(BackingStorePath);
            Match(target, newCampfireInfo);
        }
        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);
        }