static void Main(string[] args)
        {
            try
            {
                Rules       rul = new Rules();
                JsonReader  jr  = new JsonReader();
                JsonPrinter jp  = new JsonPrinter();
                Validator   val = new Validator();

                //Loading input file
                jr.file_name = ConfigurationManager.AppSettings.Get("InputFileLocation");
                IEnumerable <RawInput> jsonInput = jr.ReadJson <RawInput>();

                //Loading Rules file
                jr.file_name = ConfigurationManager.AppSettings.Get("RulesFileLocation");
                IEnumerable <Rules> jsonRules = jr.ReadJson <Rules>();

                //Validating Signals
                val.Validation(jsonRules, jsonInput);

                //Print result in json format
                jp.PrintResult(ConfigurationManager.AppSettings.Get("OutputFileLocation"));

                Console.ReadKey();
            }
            catch (Exception e)
            {
                Console.Write("Error Occured: " + e);
            }
        }
Exemple #2
0
        public void ValidateBL()
        {
            Rules       rul = new Rules();
            JsonReader  jr  = new JsonReader();
            JsonPrinter jp  = new JsonPrinter();
            Validator   val = new Validator();

            //Generate output
            jr.file_name = "../../IOFiles/raw_data.Json";
            IEnumerable <RawInput> jsonInput = jr.ReadJson <RawInput>();


            jr.file_name = "../../Input/rules.json";
            IEnumerable <Rules> jsonRules = jr.ReadJson <Rules>();

            val.Validation(jsonRules, jsonInput);
            jp.PrintResult("../../IOFiles/Result.Json");

            //Actual output
            jr.file_name = "../../IOFiles/Result.Json";
            IEnumerable <TestInput> utOutput = jr.ReadJson <TestInput>();

            //Expected output
            jr.file_name = "../../IOFiles/UT_Result.Json";
            IEnumerable <TestInput> utCompare = jr.ReadJson <TestInput>();

            Compare(utOutput, utCompare);
        }
        /// <summary>
        /// Validates the Input Json file with the User defined Signal Rules
        /// </summary>
        /// <param name="jsonRules"></param>
        /// <param name="jsonInput"></param>
        public void Validation(IEnumerable <Rules> jsonRules, IEnumerable <RawInput> jsonInput)
        {
            JsonPrinter jp = new JsonPrinter();

            try
            {
                foreach (Rules rl in jsonRules)
                {
                    IEnumerable <RawInput> inputFiltered;
                    IEnumerable <RawInput> err;

                    inputFiltered = jsonInput.Cast <RawInput>().Where(x => x.Signal.ToLower() == rl.Signal.ToLower() && x.ValueType.ToLower() == rl.ValueType.ToLower()).ToList();

                    if (inputFiltered.Count() > 0)
                    {
                        if (rl.ValueType == "Integer")
                        {
                            switch (rl.Rule)
                            {
                            case ">":
                                err = inputFiltered.Cast <RawInput>().Where(x => Convert.ToDecimal(x.Value) > Convert.ToDecimal(rl.Value)).ToList();
                                jp.PrintResult(err, "Value should not Greater than " + rl.Value);
                                break;

                            case "=":
                                err = inputFiltered.Cast <RawInput>().Where(x => Convert.ToDecimal(x.Value) == Convert.ToDecimal(rl.Value)).ToList();
                                jp.PrintResult(err, "Value should not equal to " + rl.Value);
                                break;

                            case ">=":
                                err = inputFiltered.Cast <RawInput>().Where(x => Convert.ToDecimal(x.Value) >= Convert.ToDecimal(rl.Value)).ToList();
                                jp.PrintResult(err, "Value should not Greater than or equal to " + rl.Value);
                                break;

                            case "!=":
                                err = inputFiltered.Cast <RawInput>().Where(x => Convert.ToDecimal(x.Value) != Convert.ToDecimal(rl.Value)).ToList();
                                jp.PrintResult(err, "Value should be equal to " + rl.Value);
                                break;

                            case "<=":
                                err = inputFiltered.Cast <RawInput>().Where(x => Convert.ToDecimal(x.Value) <= Convert.ToDecimal(rl.Value)).ToList();
                                jp.PrintResult(err, "Value should not less than or equal to" + rl.Value);
                                break;

                            case "<":
                                err = inputFiltered.Cast <RawInput>().Where(x => Convert.ToDecimal(x.Value) < Convert.ToDecimal(rl.Value)).ToList();
                                jp.PrintResult(err, "Value should not less than " + rl.Value);
                                break;

                            default:
                                Console.WriteLine("ERROR: Invalid RULE for the Signal {0} and Value Type {1} as {2}", rl.Signal, rl.ValueType, rl.Rule);
                                break;
                            }
                        }
                        else if (rl.ValueType == "String")
                        {
                            switch (rl.Rule)
                            {
                            case "=":
                                err = inputFiltered.Cast <RawInput>().Where(x => x.Value.ToLower() == rl.Value.ToLower()).ToList();
                                jp.PrintResult(err, "Value should not equal to " + rl.Value);
                                break;

                            case "!=":
                                err = inputFiltered.Cast <RawInput>().Where(x => x.Value.ToLower() != rl.Value.ToLower()).ToList();
                                jp.PrintResult(err, "Value should be equal to " + rl.Value);
                                break;

                            default:
                                Console.WriteLine("ERROR: Invalid RULE for the Signal {0} and Value Type {1} as {2}", rl.Signal, rl.ValueType, rl.Rule);
                                break;
                            }
                        }
                        else if (rl.ValueType == "DateTime")
                        {
                            switch (rl.Rule.ToLower())
                            {
                            case "today":
                                err = inputFiltered.Cast <RawInput>().Where(x => DateTimeConvertor(x.Value) > DateTime.Now).ToList();
                                jp.PrintResult(err, "Value should not Greater than " + rl.Value);
                                break;

                            case ">":
                                err = inputFiltered.Cast <RawInput>().Where(x => DateTimeConvertor(x.Value) > DateTimeConvertor(rl.Value)).ToList();
                                jp.PrintResult(err, "Value should not Greater than " + rl.Value);
                                break;

                            case "=":
                                err = inputFiltered.Cast <RawInput>().Where(x => DateTimeConvertor(x.Value) == DateTimeConvertor(rl.Value)).ToList();
                                jp.PrintResult(err, "Value should not equal to " + rl.Value);
                                break;

                            case ">=":
                                err = inputFiltered.Cast <RawInput>().Where(x => DateTimeConvertor(x.Value) >= DateTimeConvertor(rl.Value)).ToList();
                                jp.PrintResult(err, "Value should not Greater than or equal to " + rl.Value);
                                break;

                            case "!=":
                                err = inputFiltered.Cast <RawInput>().Where(x => DateTimeConvertor(x.Value) != DateTimeConvertor(rl.Value)).ToList();
                                jp.PrintResult(err, "Value should be equal to " + rl.Value);
                                break;

                            case "<=":
                                err = inputFiltered.Cast <RawInput>().Where(x => DateTimeConvertor(x.Value) <= DateTimeConvertor(rl.Value)).ToList();
                                jp.PrintResult(err, "Value should not less than or equal to" + rl.Value);
                                break;

                            case "<":
                                err = inputFiltered.Cast <RawInput>().Where(x => DateTimeConvertor(x.Value) < DateTimeConvertor(rl.Value)).ToList();
                                jp.PrintResult(err, "Value should not less than " + rl.Value);
                                break;

                            default:
                                Console.WriteLine("ERROR: Invalid RULE for the Signal {0} and Value Type {1} as {2}", rl.Signal, rl.ValueType, rl.Rule);
                                break;
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Console.Write("Error Occured: " + e);
            }
        }