public async Task Analyzed_as_valid_issue()
        {
            var stateFiltering = new StateFilteringParameter(new string[0], new string[0]);

            var issue = new CachedIssue()
            {
                Project       = DefaultProjectKey,
                Key           = DefaultProjectKey + "-1",
                Type          = "Story",
                StatusChanges = new Collection <CachedIssueStatusChange>()
            };

            _jiraCacheAdapter.Issues.Add(issue);
            var issues = await _tasksSource.GetAllIssues(DefaultProjectKey, stateFiltering);

            var analyzedIssue = Assert.Single(issues);

            var expectedIssue = new AnalyzedIssue()
            {
                Project                 = DefaultProjectKey,
                Key                     = DefaultProjectKey + "-1",
                Type                    = "Story",
                StatusChanges           = issue.StatusChanges,
                SimplifiedStatusChanges = new Collection <CachedIssueStatusChange>()
            };

            _compareLogic.AssertEqual <object>(expectedIssue, analyzedIssue);
        }
        public async Task Non_started_issue_is_analyzed()
        {
            var stateFiltering = new StateFilteringParameter(new [] { "B" }, new string[0]);

            var issue = new CachedIssue()
            {
                Project       = DefaultProjectKey,
                Key           = DefaultProjectKey + "-1",
                StatusChanges = new Collection <CachedIssueStatusChange>()
                {
                    new CachedIssueStatusChange(new DateTime(2012, 1, 1), "A"),
                }
            };

            _jiraCacheAdapter.Issues.Add(issue);
            var issues = await _tasksSource.GetAllIssues(DefaultProjectKey, stateFiltering);

            var analyzedIssue = Assert.Single(issues);

            var expectedIssue = new AnalyzedIssue()
            {
                Project                 = DefaultProjectKey,
                Key                     = DefaultProjectKey + "-1",
                StatusChanges           = issue.StatusChanges,
                SimplifiedStatusChanges = new Collection <CachedIssueStatusChange>(),
                Started                 = null,
                Ended                   = null,
                Duration                = null
            };

            _compareLogic.AssertEqual <object>(expectedIssue, analyzedIssue);
        }
        public async Task Retrieves_no_issues()
        {
            var stateFiltering = new StateFilteringParameter(new string[0], new string[0]);

            var issues = await _tasksSource.GetAllIssues(DefaultProjectKey, stateFiltering);

            Assert.Empty(issues);
        }
        public static StateFilteringParameter GetParameters(StateFiltering stateFiltering)
        {
            var filteredStates = stateFiltering.FilteredStates.ToArray();
            var resetStates    = stateFiltering.ResetStates.ToArray();

            var stateFilteringParams = new StateFilteringParameter(filteredStates, resetStates);

            return(stateFilteringParams);
        }
        public async Task Retrieves_issue(CachedIssue issue)
        {
            var stateFiltering = new StateFilteringParameter(new string[0], new string[0]);

            issue.Project = DefaultProjectKey;
            issue.Key     = DefaultProjectKey + "-1";
            _jiraCacheAdapter.Issues.Add(issue);

            var issues = await _tasksSource.GetAllIssues(DefaultProjectKey, stateFiltering);

            _compareLogic.AssertEqual <object>(issues, _jiraCacheAdapter.Issues);
        }
        public async Task Finished_story_must_have_start()
        {
            var stateFiltering = new StateFilteringParameter(new [] { "A", "C" }, new string[0]);

            var issue = new CachedIssue()
            {
                Type          = "Story",
                StatusChanges = new Collection <CachedIssueStatusChange>()
                {
                    new CachedIssueStatusChange(new DateTime(2012, 2, 2), "B"),
                }
            };

            _jiraCacheAdapter.Issues.Add(issue);
            var issues = await _tasksSource.GetLatestFinishedStories(DefaultProjectKey, new IssuesFromParameters(null), stateFiltering);

            Assert.Empty(issues);
        }
        public async Task Finished_issue_is_analyzed()
        {
            var stateFiltering = new StateFilteringParameter(new [] { "A", "C" }, new string[0]);

            var issue = new CachedIssue()
            {
                Project       = DefaultProjectKey,
                Key           = DefaultProjectKey + "-1",
                Title         = "Title",
                Type          = "Story",
                StoryPoints   = 12,
                StatusChanges = new Collection <CachedIssueStatusChange>()
                {
                    new CachedIssueStatusChange(new DateTime(2012, 2, 1), "A"),
                    new CachedIssueStatusChange(new DateTime(2012, 2, 2), "B"),
                    new CachedIssueStatusChange(new DateTime(2012, 2, 3), "C"),
                }
            };

            _jiraCacheAdapter.Issues.Add(issue);
            var issues = await _tasksSource.GetLatestFinishedStories(DefaultProjectKey, new IssuesFromParameters(new DateTime(2012, 1, 1)), stateFiltering);

            var analyzedIssue = Assert.Single(issues);

            var expectedIssue = new FinishedIssue()
            {
                Project       = DefaultProjectKey,
                Key           = DefaultProjectKey + "-1",
                Title         = issue.Title,
                Type          = issue.Type,
                StoryPoints   = issue.StoryPoints,
                StatusChanges = new Collection <CachedIssueStatusChange>()
                {
                    new CachedIssueStatusChange(new DateTime(2012, 2, 1), "A"),
                    new CachedIssueStatusChange(new DateTime(2012, 2, 3), "C"),
                },
                Started  = new DateTime(2012, 2, 1),
                Ended    = new DateTime(2012, 2, 3),
                Duration = TimeSpan.FromDays(2)
            };

            _compareLogic.AssertEqual(expectedIssue, analyzedIssue);
        }
        public async Task Analyzed_issue_contains_simplified_states()
        {
            var stateFiltering = new StateFilteringParameter(new [] { "A", "C" }, new [] { "D" });

            var issue = new CachedIssue()
            {
                Project       = DefaultProjectKey,
                Key           = DefaultProjectKey + "-1",
                StatusChanges = new Collection <CachedIssueStatusChange>()
                {
                    new CachedIssueStatusChange(new DateTime(2012, 1, 1), "A"),
                    new CachedIssueStatusChange(new DateTime(2012, 1, 2), "D"),

                    new CachedIssueStatusChange(new DateTime(2012, 2, 1), "A"),
                    new CachedIssueStatusChange(new DateTime(2012, 2, 2), "B"),
                    new CachedIssueStatusChange(new DateTime(2012, 2, 3), "C"),
                }
            };

            _jiraCacheAdapter.Issues.Add(issue);
            var issues = await _tasksSource.GetAllIssues(DefaultProjectKey, stateFiltering);

            var analyzedIssue = Assert.Single(issues);

            var expectedIssue = new AnalyzedIssue
            {
                Project                 = DefaultProjectKey,
                Key                     = DefaultProjectKey + "-1",
                StatusChanges           = issue.StatusChanges,
                SimplifiedStatusChanges = new Collection <CachedIssueStatusChange>()
                {
                    new CachedIssueStatusChange(new DateTime(2012, 2, 1), "A"),
                    new CachedIssueStatusChange(new DateTime(2012, 2, 3), "C"),
                },
                Started  = new DateTime(2012, 2, 1),
                Ended    = new DateTime(2012, 2, 3),
                Duration = TimeSpan.FromDays(2)
            };

            _compareLogic.AssertEqual <object>(expectedIssue, analyzedIssue);
        }
        public async Task Filters_out_old_issues()
        {
            var stateFiltering = new StateFilteringParameter(new [] { "A", "C" }, new string[0]);
            var issuesFrom     = new DateTime(2012, 2, 3).AddSeconds(1);

            var issue = new CachedIssue()
            {
                Key           = "AC-1",
                Title         = "Title",
                Type          = "Story",
                StoryPoints   = 12,
                StatusChanges = new Collection <CachedIssueStatusChange>()
                {
                    new CachedIssueStatusChange(new DateTime(2012, 2, 1), "A"),
                    new CachedIssueStatusChange(new DateTime(2012, 2, 2), "B"),
                    new CachedIssueStatusChange(new DateTime(2012, 2, 3), "C"),
                }
            };

            _jiraCacheAdapter.Issues.Add(issue);
            var issues = await _tasksSource.GetLatestFinishedStories(DefaultProjectKey, new IssuesFromParameters(issuesFrom), stateFiltering);

            Assert.Empty(issues);
        }
예제 #10
0
        public async Task <IEnumerable <FinishedIssue> > GetLatestFinishedStories(string projectKey, IssuesFromParameters parameters, StateFilteringParameter stateFiltering)
        {
            var latestStories = await GetLatestStories(projectKey, parameters, stateFiltering);

            return(OfFinishedStories(latestStories));
        }
예제 #11
0
        private async Task <IEnumerable <AnalyzedIssue> > GetLatestStories(string projectKey, IssuesFromParameters parameters, StateFilteringParameter stateFiltering)
        {
            IEnumerable <AnalyzedIssue> stories = (await GetStories(projectKey, stateFiltering)).ToArray();

            var latestStories = stories
                                .Where(x => parameters.IssuesFrom == null || x.Ended >= parameters.IssuesFrom)
                                .ToArray();

            return(latestStories);
        }
예제 #12
0
        public async Task <IEnumerable <AnalyzedIssue> > GetStories(string projectKey, StateFilteringParameter stateFiltering)
        {
            var issues = await GetAllIssues(projectKey, stateFiltering);

            IEnumerable <AnalyzedIssue> stories = issues
                                                  .Where(IsValidIssue);

            return(stories);
        }
예제 #13
0
        public async Task <IEnumerable <AnalyzedIssue> > GetAllIssues(string projectKey, StateFilteringParameter stateFiltering)
        {
            List <CachedIssue> issues = await _jiraCache.GetIssues(projectKey);

            List <AnalyzedIssue> analyzedIssues = _mapper.Map <List <AnalyzedIssue> >(issues);

            SimplifyStateChangeOrder simplify =
                new SimplifyStateChangeOrder(stateFiltering.FilteredStates, stateFiltering.ResetStates);
            var finishedState = stateFiltering.FilteredStates.LastOrDefault();

            foreach (var item in analyzedIssues)
            {
                item.SimplifiedStatusChanges =
                    new Collection <CachedIssueStatusChange>(simplify.FilterStatusChanges(item.StatusChanges).ToList());

                item.Started = item.SimplifiedStatusChanges.FirstOrDefault()?.ChangeTime;

                CachedIssueStatusChange lastState = item.SimplifiedStatusChanges.LastOrDefault();
                if (lastState != null && lastState.State == finishedState)
                {
                    item.Ended = lastState.ChangeTime;
                }

                item.Duration = item.Ended - item.Started;
            }

            return(analyzedIssues);
        }
예제 #14
0
        public async Task <IEnumerable <FinishedIssue> > GetFinishedStories(string projectKey, StateFilteringParameter stateFiltering)
        {
            var stories = await GetStories(projectKey, stateFiltering);

            return(OfFinishedStories(stories));
        }
예제 #15
0
        public async Task <StateFilteringParameter> GetStateFilteringParameter()
        {
            await _stateFiltering.ReloadStates();

            return(StateFilteringParameter.GetParameters(_stateFiltering));
        }