Exemplo n.º 1
0
        private string processHotRules(string temperatureType, string commandList)
        {
            List <String> rejectedCommands = new List <String>()
            {
                "3", "5"
            };
            List <string> finalResponseList = new List <string>();
            string        response          = string.Empty;
            var           commands          = commandList.Split(',');

            if (commands?.Length > 0)
            {
                if (commands[0] != "8")
                {
                    return("Fail");
                }

                if (commands.Distinct().Count() < commands.Length)
                {
                    return(generateResponse(temperatureType, commands.Distinct().ToArray(),
                                            ref finalResponseList, ErrorConstants.DUPLICATE_COMMAND));
                }

                // check whether the command ids are not in the golden data
                HashSet <String> masterIds = new HashSet <string>(MasterData.getData().Select(s => s.Id.Trim()));
                var results = commands.Where(x => !masterIds.Contains(x.Trim())).ToList();
                if (results != null && results.Count() > 0)
                {
                    return(generateResponse(temperatureType, commands,
                                            ref finalResponseList, ErrorConstants.INVALID_COMMAND));
                }

                // put on socks or put on jacket - send fail
                if (commands.Contains("6") && commands.Contains("1"))
                {
                    var pantsIndex    = Array.FindIndex(commands, row => row == "6");
                    var footwearIndex = Array.FindIndex(commands, row => row == "1");
                    if (pantsIndex > footwearIndex)
                    {
                        return(generateResponse(temperatureType, commands,
                                                ref finalResponseList, ErrorConstants.SOCKS_MUST_BE_PUT_ON));
                    }
                }
                if (commands.Contains("4") && commands.Contains("2"))
                {
                    var shirtIndex = Array.FindIndex(commands, row => row == "4");
                    var headIndex  = Array.FindIndex(commands, row => row == "2");
                    if (shirtIndex > headIndex)
                    {
                        return(generateResponse(temperatureType, commands,
                                                ref finalResponseList, ErrorConstants.SHIRT_MUSTBEPUT_BEFORE_HEADWEAR));
                    }
                }

                response = generateResponse(temperatureType, commands, ref finalResponseList);
            }
            return(response);
        }
Exemplo n.º 2
0
        private string generateResponse(string temperatureType, string[] commands,
                                        ref List <String> finalResponse, string errorDesc = "")
        {
            foreach (var item in commands)
            {
                var command = MasterData.getDescription(item);
                if (command != null)
                {
                    if (temperatureType.ToLowerInvariant().Equals(
                            EnumTemperatureType.Hot.ToString().ToLowerInvariant()))
                    {
                        finalResponse.Add(command.HotResponse);
                        if (command.HotResponse.Equals("fail"))
                        {
                            finalResponse.Add("fail");
                            return(string.Join(",", finalResponse.Distinct()));
                        }
                    }
                    else if (temperatureType.ToLowerInvariant().Equals(
                                 EnumTemperatureType.Cold.ToString().ToLowerInvariant()))
                    {
                        finalResponse.Add(command.ColdResponse);
                    }
                }
            }
            switch (errorDesc)
            {
            case "invalidcommand":
            case "socksputonbeforefootwear":
            case "duplicate":
            case "shirtmustbeputbeforeheadwear":
            case "shirtmustbeputonbeforejacket":
            case "pantsmustbeputbeforefootwear":
                finalResponse.Add("fail");
                break;
            }

            if (commands[commands.Length - 1] != "7" && String.IsNullOrWhiteSpace(errorDesc))
            {
                finalResponse.Add("fail");
            }
            if (temperatureType.ToLowerInvariant().Equals(
                    EnumTemperatureType.Cold.ToString().ToLowerInvariant()) &&
                !finalResponse.Contains("fail") &&
                commands.Count() != MasterData.getData().Count())
            {
                finalResponse.Add("fail");
            }
            return(String.Join(",", finalResponse.Distinct()));
        }