public void Index_With_TrainName_Test()
        {
            // Arrange
            var data = new List <Train>()
            {
                new Train()
                {
                    TrainId = 1, TrainName = "WXG-123"
                },
                new Train()
                {
                    TrainId = 2, TrainName = "XYZ-543"
                }
            }.AsQueryable();

            var trainMockSet = Substitute.For <DbSet <Train>, IQueryable <Train> >();

            WireUpTheIQueryableImplementation(trainMockSet, data);

            var db = Substitute.For <WebPayment>();

            db.Train.Returns(trainMockSet);

            var sut = new TrainController(db);

            // Act
            var result = sut.Index("123") as ViewResult;
            var actual = result.Model as List <Train>;

            // Assert
            Assert.Single(actual);
        }
        public void Index_Without_TrainName_Test()
        {
            // Arrange
            var data = new List <Train>()
            {
                new Train()
                {
                    TrainId = 1, TrainName = "WXG-123"
                },
                new Train()
                {
                    TrainId = 2, TrainName = "XYZ-543"
                }
            }.AsQueryable();

            var mockSet = Substitute.For <DbSet <Train>, IQueryable <Train> >();

            ((IQueryable <Train>)mockSet).Provider.Returns(data.Provider);
            ((IQueryable <Train>)mockSet).Expression.Returns(data.Expression);
            ((IQueryable <Train>)mockSet).ElementType.Returns(data.ElementType);
            ((IQueryable <Train>)mockSet).GetEnumerator().Returns(data.GetEnumerator());

            var db = Substitute.For <WebPayment>();

            db.Train.Returns(mockSet);

            var sut = new TrainController(db);

            // Act
            var result = sut.Index(null) as ViewResult;
            var actual = result.Model as List <Train>;

            // Assert
            Assert.Equal(2, actual.Count);
        }