Exemple #1
0
        public static void Test_adding_lines( )
        {
            var randomProvider = new Random( );
            var newRecords     = new List <PersonColorPreferenceModel>
            {
                PreferencesHelpers.GenerateRandomRecord(randomProvider),
                PreferencesHelpers.GenerateRandomRecord(randomProvider),
                PreferencesHelpers.GenerateRandomRecord(randomProvider),
                PreferencesHelpers.GenerateRandomRecord(randomProvider),
                PreferencesHelpers.GenerateRandomRecord(randomProvider)
            }.ToSafeList( );

            const char DelimiterChar = '|';
            var        asLines       = newRecords.Select(newRecord => UnitTestHelpers.GenerateLine(newRecord, DelimiterChar)).ToSafeList( );

            var model = new PreferencesModel( );

            model.Add(asLines, DelimiterChar);

            // check records were added
            var added    = model.PersonColorPreferences.ToSafeList( );
            var knownIds = new Dictionary <int, IPersonColorPreferenceModel> ( );

            foreach (var newRecord in newRecords)
            {
                var singleRecord = Assert.Single(added, r => r.NotNull( ).LastName == newRecord.LastName).NotNull( );
                UnitTestHelpers.AssertRecordIdentical(newRecord.NotNull( ), singleRecord);
                knownIds [singleRecord.Id] = singleRecord;
            }

            Assert.NotEmpty(knownIds);
        }
        public static void Test_that_an_unknown_file_is_associated_with_char_minValue( )
        {
            var fileInfo = new FileInfo("something.bin");
            var actual   = PreferencesHelpers.AssociatedDelimiter(fileInfo);

            Assert.Equal(char.MinValue, actual);
        }
Exemple #3
0
        public static void Test_add_IEnumerable_records( )
        {
            var randomProvider = new Random( );
            var newRecords     = new List <PersonColorPreferenceModel>
            {
                PreferencesHelpers.GenerateRandomRecord(randomProvider),
                PreferencesHelpers.GenerateRandomRecord(randomProvider),
                PreferencesHelpers.GenerateRandomRecord(randomProvider),
                PreferencesHelpers.GenerateRandomRecord(randomProvider),
                PreferencesHelpers.GenerateRandomRecord(randomProvider)
            }.ToSafeList( );

            var model = new PreferencesModel( );

            model.Add(newRecords);

            // check records were added
            var added    = model.PersonColorPreferences.ToSafeList( );
            var knownIds = new Dictionary <int, IPersonColorPreferenceModel> ( );

            foreach (var newRecord in newRecords)
            {
                var singleRecord = Assert.Single(added, r => r.NotNull( ).LastName == newRecord.LastName).NotNull( );
                UnitTestHelpers.AssertRecordIdentical(newRecord.NotNull( ), singleRecord);
                knownIds [singleRecord.Id] = singleRecord;
            }

            Assert.NotEmpty(knownIds);

            #endregion
        }
        public static void Test_that_pipe_is_associated_delimiter_for_pipe_files( )
        {
            var fileInfo = new FileInfo("something.pIpE");
            var actual   = PreferencesHelpers.AssociatedDelimiter(fileInfo);

            Assert.Equal('|', actual);
        }
        public static void Test_generation_of_random_records( )
        {
            var records      = PreferencesHelpers.GenerateRandomRecords(10, new Random( ), 7);
            var asDictionary = records.ToDictionary(r => r.ToString( ), r => r);

            Assert.Equal(10, asDictionary.Count);
        }
        public static void Test_that_comma_is_associated_delimiter_for_csv_files( )
        {
            var fileInfo = new FileInfo("something.csv");
            var actual   = PreferencesHelpers.AssociatedDelimiter(fileInfo);

            Assert.Equal(',', actual);
        }
        public static void Test_that_blank_is_associated_delimiter_for_txt_files( )
        {
            var fileInfo = new FileInfo("something.tXt");
            var actual   = PreferencesHelpers.AssociatedDelimiter(fileInfo);

            Assert.Equal(' ', actual);
        }
Exemple #8
0
        public void Test_id_is_determined_during_add( )
        {
            // Set the second last bit to ensure not 0 or 1;
            var id     = Guid.NewGuid( ).GetHashCode( ) | 0x02;
            var target = PreferencesHelpers.GenerateRandomRecord(new Random( ));

            target.Id = id;

            var model = new PreferencesModel( );

            model.Add(target);

            // Check that target.Id was not modified
            Assert.Equal(id, target.Id);

            var records  = model.PersonColorPreferences.ToSafeList( );
            var notAdded = records.FirstOrDefault(r => r.Id == id);

            Assert.Null(notAdded);

            var added = records.Single(r => r.Id == 1);

            UnitTestHelpers.AssertRecordIsShallowCopy(target, added);

            Assert.True(ReferenceEquals(added, records.Single(r => r.DateOfBirth == target.DateOfBirth)));
            Assert.True(ReferenceEquals(added, records.Single(r => r.FavoriteColor == target.FavoriteColor)));
            Assert.True(ReferenceEquals(added, records.Single(r => r.FirstName == target.FirstName)));
            Assert.True(ReferenceEquals(added, records.Single(r => r.Gender == target.Gender)));
            Assert.True(ReferenceEquals(added, records.Single(r => r.LastName == target.LastName)));
        }
Exemple #9
0
        /// <summary>
        ///     Initializes static members of the <see cref="RecordsApiModel" /> class.
        /// </summary>
        /// <autogeneratedoc />
        /// TODO Edit XML Comment Template for #ctor
        static RecordsApiModel( )
        {
            CurrentModel = new PreferencesModel( );

            // Add some random records
            var generatedRecords = PreferencesHelpers.GenerateRandomRecords(10, new Random( ), 7);

            CurrentModel.Add(generatedRecords);
        }
Exemple #10
0
        /// <summary>
        ///     Initializes static members of the <see cref="RecordsModel" /> class.
        /// </summary>
        /// <autogeneratedoc />
        /// TODO Edit XML Comment Template for #ctor
        static RecordsModel( )
        {
            // we are not persisting data for now, otherwise this would use a connection
            CurrentModel = new PreferencesModel( );

            // Add some random records
            var generatedRecords = PreferencesHelpers.GenerateRandomRecords(10, new Random( ), 7);

            CurrentModel.Add(generatedRecords);
        }
        public static void Test_that_an_exception_is_thrown_if_multiple_nonblank_delimiters_present( )
        {
            var multipleSeparator = new string ( PreferencesHelpers.SupportedDelimiters.ToArray( ));
            var line = string.Join(multipleSeparator, Guid.NewGuid( ).ToString( ), Guid.NewGuid( ).ToString( ), Guid.NewGuid( ).ToString( ));

            var exception = Record.Exception(() => PreferencesHelpers.DecideDelimiterFromLine(line));

            Assert.NotNull(exception);
            Assert.IsType <InvalidOperationException> (exception);
        }
Exemple #12
0
        public static void Test_populates_from( )
        {
            var original = PreferencesHelpers.GenerateRandomRecord(new Random( ));
            var copy     = new GetPersonColorPreferenceModelDto( ).PopulateFrom(original);

            UnitTestHelpers.AssertRecordIsShallowCopy(original, copy);

            Assert.Equal(0, copy.Id);

            // cross-checks
            Assert.Equal("", copy.FirstNameUpper);
            Assert.Equal("", copy.LastNameUpper);
            Assert.Equal(DateTime.MinValue, copy.DateTimeBirth);
        }
Exemple #13
0
        public static void Test_mapping_to_enumerable( )
        {
            var randomProvider = new Random( );
            var original       = new List <IPersonColorPreferenceModel>
            {
                PreferencesHelpers.GenerateRandomRecord(randomProvider),
                PreferencesHelpers.GenerateRandomRecord(randomProvider),
                PreferencesHelpers.GenerateRandomRecord(randomProvider)
            };

            var dtos = original.To <GetPersonColorPreferenceModelDto> ( ).ToSafeList( );

            Assert.Equal(original.Count, dtos.Count);
        }
Exemple #14
0
        public static void Test_mapping_to( )
        {
            var original = PreferencesHelpers.GenerateRandomRecord(new Random( ));
            var dto      = original.To <GetPersonColorPreferenceModelDto> ( );

            UnitTestHelpers.AssertRecordIsShallowCopy(original, dto);

            Assert.Equal(0, dto.Id);

            // cross-checks
            Assert.Equal("", dto.FirstNameUpper);
            Assert.Equal("", dto.LastNameUpper);
            Assert.Equal(DateTime.MinValue, dto.DateTimeBirth);
        }
Exemple #15
0
        public static void Test_to_string_reflects_size( )
        {
            var random = new Random( );
            var model1 = new PreferencesModel( );
            var model2 = new PreferencesModel( );

            for (var i = 0; i < 5; i += 1)
            {
                Assert.Equal(i, model1.RecordsAdded);
                Assert.Equal(0, model2.RecordsAdded);
                Assert.Equal($"{model1.PersonColorPreferences.Count ( )} entries", model1.ToString( ));
                Assert.Equal($"{model2.PersonColorPreferences.Count ( )} entries", model2.ToString( ));
                model1.Add(PreferencesHelpers.GenerateRandomRecord(random));
            }
        }
        public static void Test_that_a_single_delimiter_with_blanks_also_is_properly_recognized( )
        {
            foreach (var delimiter in PreferencesHelpers.SupportedDelimiters)
            {
                var separator = new string ( new []
                {
                    delimiter,
                    ' '
                } );
                var line = string.Join(separator, Guid.NewGuid( ).ToString( ), Guid.NewGuid( ).ToString( ), Guid.NewGuid( ).ToString( ));

                var actual = PreferencesHelpers.DecideDelimiterFromLine(line);

                Assert.Equal(delimiter, actual);
            }
        }
        public static void Test_generated_random_record( )
        {
            var random1 = new Random(1);
            var record1 = PreferencesHelpers.GenerateRandomRecord(random1);

            var random2 = new Random(1);
            var record2 = PreferencesHelpers.GenerateRandomRecord(random2);

            UnitTestHelpers.AssertRecordIdentical(record1, record2);

            Assert.Equal(0, record1.Id);

            // cross-checks
            Assert.Equal(record1.FirstName.ToUpperInvariant( ), record2.FirstNameUpper);
            Assert.Equal(record2.LastName.ToUpperInvariant( ), record1.LastNameUpper);
            Assert.NotEqual(DateTime.MinValue, record1.DateTimeBirth);
        }
        public static void Test_parse_line_bad( )
        {
            var        record        = PreferencesHelpers.GenerateRandomRecord(new Random( ));
            const char SeparatorChar = '|';
            var        asLine        = UnitTestHelpers.GenerateLine(record, SeparatorChar);

            var goodParse = PreferencesHelpers.Parse(asLine, SeparatorChar);

            UnitTestHelpers.AssertRecordIdentical(goodParse, record);

            var exception = Record.Exception(() =>
            {
                var substring = asLine.Substring(asLine.Length / 2);
                return(PreferencesHelpers.Parse(substring, SeparatorChar));
            });

            Assert.NotNull(exception);
        }
Exemple #19
0
        public static void Test_add_with_just_line_properly_adds_record( )
        {
            var newRecord = PreferencesHelpers.GenerateRandomRecord(new Random( ));

            foreach (var separatorChar in PreferencesHelpers.SupportedDelimiters)
            {
                //LastName | FirstName | Gender | FavoriteColor | DateOfBirth
                //LastName, FirstName, Gender, FavoriteColor, DateOfBirth
                //LastName FirstName Gender FavoriteColor DateOfBirth
                var asLine = UnitTestHelpers.GenerateLine(newRecord, separatorChar);

                var model = new PreferencesModel( );

                model.Add(asLine);

                var added = model.PersonColorPreferences.Single( ).NotNull( );
                UnitTestHelpers.AssertRecordIdentical(newRecord, added);
            }
        }
Exemple #20
0
        public static void Test_that_ordering_is_correct()
        {
            var randomProvider = new Random();
            var person1        = PreferencesHelpers.GenerateRandomRecord(randomProvider);
            var person1A       = new PersonColorPreferenceModel().PopulateFrom(person1);

            person1A.LastName = "person1A";
            var person2  = PreferencesHelpers.GenerateRandomRecord(randomProvider);
            var person3  = PreferencesHelpers.GenerateRandomRecord(randomProvider);
            var person3A = new PersonColorPreferenceModel().PopulateFrom(person3);

            person3A.LastName = "person3A";

            var newRecords = new List <PersonColorPreferenceModel>
            {
                person1,
                PreferencesHelpers.GenerateRandomRecord(randomProvider),
                person1,
                PreferencesHelpers.GenerateRandomRecord(randomProvider),
                person2,
                PreferencesHelpers.GenerateRandomRecord(randomProvider),
                person2,
                PreferencesHelpers.GenerateRandomRecord(randomProvider),
                PreferencesHelpers.GenerateRandomRecord(randomProvider),
                person3,
                PreferencesHelpers.GenerateRandomRecord(randomProvider),
                person3
            }.ToSafeList();

            var apiModel = new RecordsApiModel( );
            var model    = RecordsApiModel.CurrentModel;

            newRecords.ForEach(newRecord => apiModel.Create(UnitTestHelpers.GenerateLine(newRecord, '|')));

            model.Add(newRecords);

            var added                = model.PersonColorPreferences.ToSafeList();
            var byBirthDate          = apiModel.ByBirthDate().ToSafeList();
            var byGenderLastName     = apiModel.ByGender().ToSafeList();
            var byLastNameDescending = apiModel.ByLastNameDescending().ToSafeList();
            var byName               = apiModel.ByName().ToSafeList();
            var byIndex              = apiModel.ByIndex( ).ToSafeList( );

            added.Aggregate((arg1, arg2) =>
            {
                Assert.True(arg1.Id < arg2.Id);
                return(arg2);
            });

            byBirthDate.Aggregate((arg1, arg2) =>
            {
                Assert.True(arg1.DateTimeBirth <= arg2.DateTimeBirth);
                return(arg2);
            });

            byGenderLastName.Aggregate((arg1, arg2) =>
            {
                var order = string.Compare(arg1.Gender, arg2.Gender, StringComparison.InvariantCulture);
                Assert.True(order <= 0);
                if (order == 0)
                {
                    var order2 = string.Compare(arg1.LastNameUpper, arg2.LastNameUpper, StringComparison.InvariantCulture);
                    Assert.True(order2 <= 0);
                }

                return(arg2);
            });

            byLastNameDescending.Aggregate((arg1, arg2) =>
            {
                Assert.True(string.Compare(arg1.LastNameUpper, arg2.LastNameUpper, StringComparison.InvariantCulture) >= 0);
                return(arg2);
            });

            byName.Aggregate((arg1, arg2) =>
            {
                var order = string.Compare(arg1.LastNameUpper, arg2.LastNameUpper, StringComparison.InvariantCulture);
                Assert.True(order <= 0);
                if (order == 0)
                {
                    var order2 = string.Compare(arg1.FirstNameUpper, arg2.FirstNameUpper, StringComparison.InvariantCulture);
                    Assert.True(order2 <= 0);
                }

                return(arg2);
            });
        }
Exemple #21
0
        /// <summary>
        ///     Defines the entry point of the application.
        /// </summary>
        /// <param name="args">The arguments.</param>
        static void Main([NotNull][ItemNotNull] string [] args)
        {
            var programName = Process.GetCurrentProcess( ).ProcessName;

            if (args.Length == 1)
            {
                var fileName = args [0];
                var fileInfo = new FileInfo(fileName);

                if (!fileInfo.Exists)
                {
                    Console.WriteLine($"File '{fileInfo.FullName} does not exist");
                }

                var preferencesModel = new PreferencesModel( );
                PreferencesHelpers.Load(preferencesModel, fileInfo);

                var byGender = preferencesModel.ByGenderLastName( );
                WriteRecords("By gender, then last name ascending", byGender);

                var byBirthDate = preferencesModel.ByBirthDate( );
                WriteRecords("By birth date", byBirthDate);

                var byLastNameDescending = preferencesModel.ByLastNameDescending( );
                WriteRecords("By last name descending", byLastNameDescending);

                var byName = preferencesModel.ByName( );
                WriteRecords("By name", byName);
            }
            else if (args.Length == 2)
            {
                if (!int.TryParse(args [1], out var recordsToGenerate))
                {
                    throw new InvalidOperationException( );
                }
                var fileName = args [0];
                var fileInfo = new FileInfo(fileName);
                var format   = fileInfo.Extension.ToUpperInvariant( );

                if (fileInfo.Exists)
                {
                    Console.WriteLine($"File '{fileInfo.FullName} already exists, you must remove it manually");
                }

                var randomRecords = PreferencesHelpers.GenerateRandomRecords(recordsToGenerate, new Random( ), 7);
                using (var writer = new StreamWriter(fileInfo.FullName, false))
                {
                    var delimiterChar   = PreferencesHelpers.AssociatedDelimiter(fileInfo);
                    var delimiterString = delimiterChar.ToString( );
                    randomRecords.ForEach(r =>
                    {
                        var strings = new []
                        {
                            r.LastName,
                            r.FirstName,
                            r.Gender,
                            r.FavoriteColor,
                            r.DateOfBirth
                        }.ToList( );
                        var line = string.Join(delimiterString, strings);
                        writer.WriteLine(line);
                    });
                }
            }
            else
            {
                WriteUsageInfo( );
            }
        }