public ScheduleResult Build()
        {
            Rooms     = InitializeList <ScheduleRoom>(RoomField.GetOrderedValues()).ToList();
            TimeSlots = InitializeList <TimeSlot>(TimeSlotField.GetOrderedValues()).ToList();
            Slots     = InitializeSlots(TimeSlots, Rooms);

            var allItems = new List <ProgramItemPlaced>();

            foreach (var character in characters)
            {
                var programItem = ConvertToProgramItem(character);
                var slots       = SelectSlots(character);
                PutItem(programItem, slots);
                if (slots.Any())
                {
                    allItems.Add(new ProgramItemPlaced(programItem, slots));
                }
            }
            return(new ScheduleResult()
            {
                Conflicted = Conflicted.ToList(),
                NotScheduled = NotScheduled.ToList(),
                Rooms = Rooms,
                TimeSlots = TimeSlots,
                Slots = Slots.Select(row => row.Select(r => r.ProgramItem).ToList()).ToList(),
                AllItems = allItems,
            });
        }
    protected override void Awake()
    {
        base.Awake();

        pun = PUNManager.Instance;

        if (pun == null)
        {
            Debug.LogError($"{typeof(PUNMenuController)} could not find an instance of {typeof(PUNManager)}", this);
            return;
        }

        menu = InitialiseNewElement("Multi Player");
        VisualElement optionRoot = menu.Q(OPTION_ROOT);

        { //Join Room
            RoomField newRoomElement = new RoomField("New Room", "Room Name", "Create");
            newRoomElement.OnSubmit += () => CreateRoom(newRoomElement);
            optionRoot.Add(newRoomElement);
        }

        { //Join Room
            RoomField joinRoomElement = new RoomField("Join Room", "Room Name", "Connect");
            joinRoomElement.OnSubmit += () => JoinRoom(joinRoomElement);
            optionRoot.Add(joinRoomElement);
        }
        optionRoot.Add(InitialiseOption("Back to Main Menu", () =>
        {
            StartAnimation(AnimState.Out, OnComplete: () =>
            {
                Destroy(PUNManager.Instance);
                SceneManager.LoadScene(0);
            });
        }));
    }
 private void CreateRoom(RoomField element)
 {
     element.Error_Text = "";
     if (IsValidInput(element))
     {
         if (pun.CreateNewRoom(element.Value))
         {
             element.Error_Text += "Attempting to create room...\n";
             pun.OnCreatedRoomEvent.AddListener(() =>
             {
                 element.Error_Text += "Room created successfully\n";
             });
             pun.OnJoinedRoomEvent.AddListener(() =>
             {
                 element.Error_Text += "Room joined successfully\n";
             });
             pun.OnCreateRoomFailedEvent.AddListener((c, r) =>
             {
                 element.Error_Text += $"Error {c}: {r}\n";
             });
             pun.OnJoinRoomFailedEvent.AddListener((c, r) =>
             {
                 element.Error_Text += $"Error {c}: {r}\n";
             });
         }
         else
         {
             element.Error_Text += "Failed to send message to photon server\n";
         }
     }
 }
    private bool IsValidInput(RoomField element, int minChar = 4)
    {
        Debug.Log(element.Value);
        if (string.IsNullOrWhiteSpace(element.Value))
        {
            element.Error_Text += "Room name cannot be blank\n";
            return(false);
        }

        if (element.Value.Length <= minChar)
        {
            element.Error_Text += $"Room name must be greater than {minChar} characters\n";
            return(false);
        }
        return(true);
    }
        public async Task Test_GetRoomFields_sucess()
        {
            //Arrange
            var roomField = new RoomField()
            {
                Name            = "F1",
                Id              = 1,
                IsActive        = true,
                IsDeleted       = false,
                Code            = "cd100",
                FacilityGroupId = 1,
                FacilityId      = 1,
                FacilityTypeId  = 1,
                IconPath        = "sym100",
            };
            var baseResult = new BaseResult <List <RoomField> >()
            {
                Result = new List <RoomField>()
                {
                    roomField
                }
            };
            var pred = new Func <RoomField, bool>(x => x.IsActive && !x.IsDeleted);

            iRoomFieldLibrary.Setup
            (
                x => x.GetListByPredicate(It.Is <Func <RoomField, bool> >(y => y.GetType() == pred.GetType()))
            )
            .Returns(Task.FromResult(baseResult));
            //Act
            var result = templateRepository.GetRoomFields();

            //Assert
            Assert.IsTrue(result.Result is BaseResult <List <RoomField> >);
            Assert.IsTrue(result.Result.Result.Any(x => x.Id == roomField.Id));
        }