private void ExecuteRoomCommand(int roomId, UserRoomCommand command) { var request = new RestRequest( string.Format("roominfo/?roomId={0}&userRoomCommand={1}", roomId, command), Method.POST); request.AddHeader("login-token", LoginToken); IRestResponse result = Client.Execute(request); //Assert.AreEqual(HttpStatusCode.OK, result.StatusCode); }
//adds a user to a room public void Post(HttpRequestMessage request, int roomId, UserRoomCommand userRoomCommand) { long userId; if (!_authenticationManager.TryAuthenticateForWriteOperation(request.GetToken(), out userId)) { if (Log.IsDebugEnabled) { Log.Debug("room entry failed due to authentication"); } throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.Forbidden)); } if (Log.IsDebugEnabled) { Log.DebugFormat("user ({0}) room ({1}) command ({2})", userId, roomId, userRoomCommand); } var room = _roomRepository.GetRoom(roomId); if (room == null) { throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.BadRequest) { ReasonPhrase = "No Room found" }); } var account = _accounts.Get(userId); if (account == null) { throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.BadRequest) { ReasonPhrase = "No Account Found" }); } if (room.Users.Contains(account) && userRoomCommand == UserRoomCommand.Join) { throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.BadRequest) { ReasonPhrase = "Already in room" }); } //remove from all current rooms... if (UserRoomCommand.Join == userRoomCommand) { IEnumerable <Room> currentRooms = _roomRepository.GetRooms(account.Id); foreach (var currentRoom in currentRooms) { currentRoom.Remove(account); _roomRepository.Add(currentRoom); } } lock (room) { switch (userRoomCommand) { case (UserRoomCommand.Join): room.Add(account); break; case (UserRoomCommand.Leave): room.Remove(account); break; default: throw new InvalidEnumArgumentException("userRoomCommand", (int)userRoomCommand, typeof(UserRoomCommand)); } } if (Log.IsDebugEnabled) { Log.Debug("adding to room"); } //todo: dont do this if the user collection is unchanged. _roomRepository.Add(room); }