public void ProjectSortOptionsAppearInSpecifiedOrder()
        {
            // Arrange

            const int reverseAlphabeticalSortIndex = 0;
            const int alphabeticalSortIndex        = 1;

            var projectAlphabeticalSort        = new ProjectAlphabeticalSort();
            var projectReverseAlphabeticalSort = new ProjectReverseAlphabeticalSort();

            var options = new ISortOption[]
            {
                // Order should be different from indexes specified above
                projectAlphabeticalSort,
                projectReverseAlphabeticalSort
            };

            var displayOrder = new Type[2];

            displayOrder[reverseAlphabeticalSortIndex] = typeof(ProjectReverseAlphabeticalSort);
            displayOrder[alphabeticalSortIndex]        = typeof(ProjectAlphabeticalSort);

            // Act

            var builder = new OptionsListsBuilder
            {
                SortOptions             = options,
                SortOptionsDisplayOrder = displayOrder,
                SortOptionsService      = new SortOptionsService()
            };

            var lists = builder.CreateOptionsLists();

            // Assert

            Assert.That(lists.ProjectSortOptions.Count, Is.EqualTo(2));

            Assert.That(
                lists.ProjectSortOptions[reverseAlphabeticalSortIndex],
                Is.EqualTo(projectReverseAlphabeticalSort));

            Assert.That(
                lists.ProjectSortOptions[alphabeticalSortIndex],
                Is.EqualTo(projectAlphabeticalSort));
        }
        public void DocumentSortOptionsAppearInSpecifiedOrder()
        {
            // Arrange

            const int chronologicalSortIndex = 0;
            const int alphabeticalSortIndex  = 1;

            var alphabeticalSort  = new AlphabeticalSort();
            var chronologicalSort = new ChronologicalSort();

            var options = new ISortOption[]
            {
                // Order should be different from indexes specified above
                alphabeticalSort,
                chronologicalSort
            };

            var displayOrder = new Type[2];

            displayOrder[chronologicalSortIndex] = typeof(ChronologicalSort);
            displayOrder[alphabeticalSortIndex]  = typeof(AlphabeticalSort);

            // Act

            var builder = new OptionsListsBuilder
            {
                SortOptions             = options,
                SortOptionsDisplayOrder = displayOrder,
                SortOptionsService      = new SortOptionsService()
            };

            var lists = builder.CreateOptionsLists();

            // Assert

            Assert.That(lists.DocumentSortOptions.Count, Is.EqualTo(2));

            Assert.That(
                lists.DocumentSortOptions[chronologicalSortIndex],
                Is.EqualTo(chronologicalSort));

            Assert.That(
                lists.DocumentSortOptions[alphabeticalSortIndex],
                Is.EqualTo(alphabeticalSort));
        }
        public void ProjectSortOptionsContainsOnlyApplicableItems()
        {
            // Arrange

            var documentSortOption = new TestingSortOption(
                "Document",
                null,
                ListSortDirection.Ascending,
                ProjectItemType.Document);

            var projectSortOption = new TestingSortOption(
                "Project",
                null,
                ListSortDirection.Ascending,
                ProjectItemType.Project);

            var options = new List <ISortOption>
            {
                documentSortOption,
                projectSortOption
            };

            // Act

            var builder = new OptionsListsBuilder
            {
                SortOptions = options
            };

            var lists = builder.CreateOptionsLists();

            // Assert

            Assert.That(lists.ProjectSortOptions.Count, Is.EqualTo(1));
            Assert.That(lists.ProjectSortOptions[0], Is.EqualTo(projectSortOption));
        }