public void CardGroup_ShouldOrderCardsOldestFirstForView()
        {
            // Arrange
            var regex = new Regex("Created (.*) days ago");
            Mock <IRepository> mock = new Mock <IRepository>();

            mock.SetupGet(x => x.ToDos).Returns(getMockData());
            var viewComponent = new CardGroupViewComponent(mock.Object);
            var urlHelper     = new Mock <IUrlHelper>();

            urlHelper.Setup(o => o.Action(It.IsAny <UrlActionContext>())).Returns("action/controller");
            viewComponent.Url = urlHelper.Object;

            //Act
            var componentResult = viewComponent.Invoke(3) as ViewViewComponentResult;
            var model           = (componentResult.ViewData.Model as IEnumerable <CardViewModel>).ToList();

            //Assert
            for (int i = 0; i < model.Count; i++)
            {
                var card      = model[i];
                var cardMatch = regex.Match(card.ActionDescription).Groups.Skip(1).First().Value;
                var cardDay   = int.Parse(cardMatch);
                foreach (var item in model.Skip(i))
                {
                    var itemMatch = regex.Match(item.ActionDescription).Groups.Skip(1).First().Value;
                    var itemDay   = int.Parse(itemMatch);
                    Assert.True(cardDay >= itemDay);
                }
            }
        }
            public void Component_ShouldGet4ToDoItemsWhichAreTheOldest()
            {
                // Assemble
                var fakeData = new List <ToDo>
                {
                    new ToDo
                    {
                        Title   = "Oldest",
                        Created = new DateTime(1990, 10, 1)
                    },
                    new ToDo
                    {
                        Title   = "2nd Oldest",
                        Created = new DateTime(1990, 10, 2)
                    },
                    new ToDo
                    {
                        Title   = "3rd Oldest",
                        Created = new DateTime(1990, 10, 3)
                    },
                    new ToDo
                    {
                        Title   = "4th Oldest",
                        Created = new DateTime(1990, 10, 4)
                    },
                    new ToDo
                    {
                        Title   = "Youngest",
                        Created = new DateTime(2020, 10, 1)
                    }
                };
                Mock <IRepository> mockRepository = new Mock <IRepository>();

                mockRepository.SetupGet(x => x.ToDos)
                .Returns(fakeData);
                IRepository repository = mockRepository.Object;

                var component = new CardGroupViewComponent(repository);

                // Act
                var result = component.Invoke() as ViewViewComponentResult;

                // Assert
                var viewModel = result.ViewData.Model as IEnumerable <CardViewModel>;

                Assert.Contains(viewModel, x => x.Title == "Oldest");
                Assert.Contains(viewModel, x => x.Title == "2nd Oldest");
                Assert.Contains(viewModel, x => x.Title == "3rd Oldest");
                Assert.Contains(viewModel, x => x.Title == "4th Oldest");
                Assert.Equal(4, viewModel.Count());
            }
        public void CardGroup_ShouldGetRequestedCountForView()
        {
            // Arrange
            var viewComponent = new CardGroupViewComponent();
            var urlHelper     = new Mock <IUrlHelper>();

            urlHelper.Setup(o => o.Action(It.IsAny <UrlActionContext>())).Returns("action/controller");
            viewComponent.Url = urlHelper.Object;

            //Act
            var componentResult = viewComponent.Invoke(3) as ViewViewComponentResult;
            var model           = componentResult.ViewData.Model as IEnumerable <CardViewModel>;

            //Assert
            Assert.Equal(3, model.Count());
        }