コード例 #1
0
        public static MockWorkItemStore AddChildLink(this MockWorkItemStore store, int parentId, int childId)
        {
            var child = store.Query(childId);

            if (child == null)
            {
                throw new ArgumentException($"Parameter {nameof(childId)} ({childId}) does not refer to a work item in the store.");
            }

            child.Links.Add(child.CreateRelatedLink(parentId, store.GetChildLinkTypeEnd()));
            store.BatchSave(child);

            return(store);
        }
コード例 #2
0
        public static MockWorkItemStore AddLink(this MockWorkItemStore store, int targetId, int sourceId, string linkType)
        {
            var child = store.Query(targetId);

            if (child == null)
            {
                throw new ArgumentException($"Parameter {nameof(targetId)} ({targetId}) does not refer to a work item in the store.");
            }

            var lt = store.WorkItemLinkTypes[linkType];

            child.Links.Add(child.CreateRelatedLink(sourceId, lt.ForwardEnd));

            store.BatchSave(child);


            return(store);
        }
コード例 #3
0
ファイル: MockQueryByWiql.cs プロジェクト: xul8tr/Qwiq
        public IEnumerable <IWorkItemLinkInfo> RunLinkQuery()
        {
            var linkPredicates       = _parts.Where(p => StringComparer.OrdinalIgnoreCase.Equals(CoreFieldRefNames.LinkType, p.Item2)).ToList();
            var fieldPredicateGroups = _parts.Except(linkPredicates).GroupBy(k => k.Item2, e => e).ToList();

            foreach (var li in _store.LinkInfo)
            {
                // If self link, return
                if (li.LinkType == null)
                {
                    yield return(li);
                }
                else
                {
                    // Check the link predicate values for a match on the immutable name
                    foreach (var linkPredicate in linkPredicates)
                    {
                        if (!StringComparer.OrdinalIgnoreCase.Equals(linkPredicate.Item3, li.LinkType.ImmutableName))
                        {
                            continue;
                        }

                        // The link type immutable name matches. Check for additional predicates
                        if (!fieldPredicateGroups.Any())
                        {
                            // No additional predicates -- return the link
                            yield return(li);
                        }
                        else
                        {
                            var match  = true;
                            var source = _store.Query(li.SourceId);
                            var target = _store.Query(li.TargetId);

                            foreach (var fieldPredicateGroup in fieldPredicateGroups)
                            {
                                var matchAny = fieldPredicateGroup.Count() > 1;

                                if (matchAny)
                                {
                                    // Must match ANY (e.g. an IN)
                                    var directionGroups = fieldPredicateGroup.GroupBy(k => k.Item1, e => e).ToList();
                                    foreach (var directionGroup in directionGroups)
                                    {
                                        var workItem = "Source".Equals(directionGroup.Key, StringComparison.OrdinalIgnoreCase) ? source : target;
                                        match = directionGroup.Any(e => StringComparer.OrdinalIgnoreCase.Equals(e.Item3, workItem[e.Item2]?.ToString()));

                                        if (!match)
                                        {
                                            break;
                                        }
                                    }

                                    //foreach (var fieldPredicate in fieldPredicateGroup.Where(p => !string.IsNullOrEmpty(p.Item1)))
                                    //{
                                    //    var workItem = "Source".Equals(fieldPredicate.Item1, StringComparison.OrdinalIgnoreCase) ? source : target;
                                    //    match = MatchAggregate(match,  fieldPredicate, workItem);


                                    //}
                                }
                                else
                                {
                                    // There should be only one, so must match
                                    var fieldPredicate = fieldPredicateGroup.Single();
                                    var workItem       = "Source".Equals(fieldPredicate.Item1, StringComparison.OrdinalIgnoreCase) ? source : target;
                                    match = MatchAggregate(match, fieldPredicate, workItem);
                                }

                                if (!match)
                                {
                                    break;
                                }
                            }

                            if (match)
                            {
                                yield return(li);
                            }
                        }
                    }
                }
            }
        }