public void TestCommonCase()
        {
            var averageKeeperFactory = new AverageKeeperFactoryMock();
            var keeper = averageKeeperFactory.Instance;
            var selectorByCountryAndAge = new SelectorByCountryAndAgeMock();
            var singleAverageGetter     = new SingleAverageGetter(averageKeeperFactory, selectorByCountryAndAge);

            var source  = GenerateStorage;
            var age     = 20;
            var country = "USA";

            var result = singleAverageGetter.Calculate(source, age, country);

            Assert.Equal(1, selectorByCountryAndAge.RequestsCount);
            Assert.True(selectorByCountryAndAge.LastRequestedSource.SequenceEqual(source));
            Assert.Equal(age, selectorByCountryAndAge.LastRequestedAge);
            Assert.Equal(country, selectorByCountryAndAge.LastRequestedCountry);
            Assert.True(keeper.LastRequestedAnswer.HasValue);
            Assert.Equal(result, keeper.LastRequestedAnswer.Value);
            Assert.Equal(1, keeper.RequestsCount);
            Assert.True(keeper.IncomingValues.SequenceEqual(new List <double>()
            {
                2000, 2500, 1500
            }));
        }
        public void WithoutCall()
        {
            var source = GenerateStorage;
            var singleAverageGetter = new SingleAverageGetter(new AverageKeeperFactory(), new SelectorByCountryAndAge());

            var selectorByCountryAndAgeMock = new SelectorByCountryAndAgeMock();
            var grossSalaryAverageSetter    = new GrossSalaryAverageSetter(selectorByCountryAndAgeMock);
            var checkStorage = GenerateStorage;

            Assert.Equal(0, selectorByCountryAndAgeMock.CountOfCalling);
            Func <Person, string> serializer = p => $"{p.Age} {p.Country} {p.Gender} {p.GrossSalary}";

            Assert.True(checkStorage.Select(serializer).SequenceEqual(source.Select(serializer)));
        }
        public void TestNotRequestedResult()
        {
            var averageKeeperFactory = new AverageKeeperFactoryMock();
            var keeper = averageKeeperFactory.Instance;
            var selectorByCountryAndAge = new SelectorByCountryAndAgeMock();
            var singleAverageGetter     = new SingleAverageGetter(averageKeeperFactory, selectorByCountryAndAge);


            Assert.Equal(0, selectorByCountryAndAge.RequestsCount);
            Assert.True(selectorByCountryAndAge.LastRequestedSource == default(IEnumerable <Person>));
            Assert.False(selectorByCountryAndAge.LastRequestedAge.HasValue);
            Assert.True(string.IsNullOrEmpty(selectorByCountryAndAge.LastRequestedCountry));
            Assert.False(keeper.LastRequestedAnswer.HasValue);
            Assert.Equal(0, keeper.RequestsCount);
            Assert.False(keeper.IncomingValues.Any());
        }
        public void CommonCase()
        {
            var source = GenerateStorage;
            var singleAverageGetter = new SingleAverageGetter(new AverageKeeperFactory(), new SelectorByCountryAndAge());
            var age     = 20;
            var country = "USA";
            var average = 4000;

            var selectorByCountryAndAgeMock = new SelectorByCountryAndAgeMock();
            var grossSalaryAverageSetter    = new GrossSalaryAverageSetter(selectorByCountryAndAgeMock);


            var result = grossSalaryAverageSetter.SetAverage(source, age, country, average);

            Assert.Equal(average, singleAverageGetter.Calculate(result.ToList(), age, country));
            Assert.Equal(1, selectorByCountryAndAgeMock.CountOfCalling);
            Assert.True(result.SequenceEqual(selectorByCountryAndAgeMock.CopyOfLastReturnedCollection));
        }