public static string ConvertFilterTermToString(FilterTerm filter) { string f; switch (filter) { case FilterTerm.EqualTo: case FilterTerm.NotEqualTo: f = "="; break; case FilterTerm.GreaterThan: f = "<"; break; case FilterTerm.LessThan: f = ">"; break; default: throw new NotImplementedException(); } return(f); }
/// <summary> /// Returns an Entity of Type T with the given ID or null if the ID is invalid /// </summary> /// <typeparam name="T">Entity Type to retrieve</typeparam> /// <param name="displayID">DisplayID of the Entity to retrieve</param> /// <returns>an instance of an Entity of Type T or null if ID is invalid</returns> public T GetByDisplayID <T>(string displayID) where T : ProjectAsset { var assetTypeToken = GetAssetTypeToken(typeof(T)); var projectAssetType = instance.MetaModel.GetAssetType(assetTypeToken); var idDef = projectAssetType.GetAttributeDefinition("Number"); var query = new Query(projectAssetType); var idTerm = new FilterTerm(idDef); idTerm.Equal(displayID); query.Filter = idTerm; var result = instance.Services.Retrieve(query); if (result.Assets.Count == 0) { return(null); } var asset = result.Assets[0]; // need to validate here to make sure the DisplayID is for the proper type // This is a problem with Epics and Stories. return(instance.wrapperManager.Create <T>(asset.Oid.Token, true)); }
public void Complex2() { var termA = new FilterTerm(WorkitemToDo); termA.Greater(5); var termB = new FilterTerm(WorkitemToDo); termB.Less(10); var termC = new FilterTerm(WorkitemToDo); termC.GreaterOrEqual(20); var termD = new FilterTerm(WorkitemToDo); termD.LessOrEqual(30); var and1 = new AndFilterTerm(termA, termB); var and2 = new AndFilterTerm(termC, termD); var o = new OrFilterTerm(and1, and2); Assert.AreEqual("((Workitem.ToDo>'5';Workitem.ToDo<'10')|(Workitem.ToDo>='20';Workitem.ToDo<='30'))", o.Token); }
protected string CheckForDuplicateIterationByName(string ScheduleOID, string Name) { IAssetType assetType = _metaAPI.GetAssetType("Timebox"); Query query = new Query(assetType); IAttributeDefinition scheduleAttribute = assetType.GetAttributeDefinition("Schedule"); query.Selection.Add(scheduleAttribute); FilterTerm scheduleFilter = new FilterTerm(scheduleAttribute); scheduleFilter.Equal(GetNewAssetOIDFromDB(ScheduleOID)); IAttributeDefinition nameAttribute = assetType.GetAttributeDefinition("Name"); query.Selection.Add(nameAttribute); FilterTerm nameFilter = new FilterTerm(nameAttribute); nameFilter.Equal(Name); query.Filter = new AndFilterTerm(scheduleFilter, nameFilter); QueryResult result = _dataAPI.Retrieve(query); if (result.TotalAvaliable > 0) { return(result.Assets[0].Oid.Token.ToString()); } else { return(null); } }
internal static string GetAssetIDFromName(string AssetType, string Name, IMetaModel MetaAPI, IServices DataAPI) { IAssetType assetType = MetaAPI.GetAssetType(AssetType); Query query = new Query(assetType); IAttributeDefinition nameAttribute = assetType.GetAttributeDefinition("Name"); FilterTerm term = new FilterTerm(nameAttribute); term.Equal(Name); query.Filter = term; QueryResult result; try { result = DataAPI.Retrieve(query); } catch { return(String.Empty); } if (result.TotalAvaliable > 0) { return(result.Assets[0].Oid.Token); } else { return(String.Empty); } }
public static string ConvertFilterDictionaryToString(FilterTerm filter) { string firstKey = dictionary.Keys.ToArray()[0]; StringBuilder sb = new StringBuilder(); foreach (string s in dictionary.Keys) { foreach (FilterObject j in dictionary[s]) { if (j.filterTerm == filter) { if (sb.Length > 0) { sb.Append(" or "); } sb.Append(HelperFunctions.FilterByString(s, j.stringFilterTerm, j.valueToFilterOn)); } } } if (sb.Length == 0) { return(null); } else { return(sb.ToString()); } }
protected Object GetSingleListValue(VersionOne.SDK.APIClient.Attribute attribute) { if (attribute.Value != null && attribute.Value.ToString() != "NULL") { IAssetType assetType = _metaAPI.GetAssetType("List"); Query query = new Query(assetType); IAttributeDefinition assetIDAttribute = assetType.GetAttributeDefinition("ID"); query.Selection.Add(assetIDAttribute); IAttributeDefinition nameAttribute = assetType.GetAttributeDefinition("Name"); query.Selection.Add(nameAttribute); FilterTerm assetName = new FilterTerm(assetIDAttribute); assetName.Equal(attribute.Value.ToString()); query.Filter = assetName; QueryResult result = _dataAPI.Retrieve(query); return(result.Assets[0].GetAttribute(nameAttribute).Value.ToString()); } else { return(DBNull.Value); } }
public GroupFilterTerm GetFilter(IAssetType type) { var terms = new List <IFilterTerm>(); foreach (var value in values) { var term = new FilterTerm(type.GetAttributeDefinition(Name)); switch (value.Action) { case FilterValuesActions.Equal: term.Equal(value.Value); break; case FilterValuesActions.NotEqual: term.NotEqual(value.Value); break; case FilterValuesActions.Greater: term.Greater(value.Value); break; default: throw new NotSupportedException(); } terms.Add(term); } return(Operation == FilterActions.And ? (GroupFilterTerm) new AndFilterTerm(terms.ToArray()) : new OrFilterTerm(terms.ToArray())); }
private Query GetPropertyValuesQuery(string propertyName, out IAttributeDefinition nameDef) { IAssetType assetType; try { assetType = services.Meta.GetAssetType(propertyName); } catch (MetaException ex) { throw new AssetTypeException(string.Format("{0} is unknown asset type.", propertyName), ex); } nameDef = assetType.GetAttributeDefinition("Name"); IAttributeDefinition inactiveDef; var query = new Query(assetType); query.Selection.Add(nameDef); if (assetType.TryGetAttributeDefinition("Inactive", out inactiveDef)) { var filter = new FilterTerm(inactiveDef); filter.Equal("False"); query.Filter = filter; } query.OrderBy.MajorSort(assetType.DefaultOrderBy, OrderBy.Order.Ascending); return(query); }
public void Complex1() { var termA = new FilterTerm(WorkitemParent); termA.Equal(Oid.FromToken("Theme:5", Meta)); termA.Equal(Oid.FromToken("Theme:6", Meta)); var termB = new FilterTerm(WorkitemScope); termB.Equal(Oid.FromToken("Scope:0", Meta)); var termC = new FilterTerm(WorkitemParent); termC.NotEqual(Oid.FromToken("Theme:7", Meta)); termC.NotEqual(Oid.FromToken("Theme:8", Meta)); var termD = new FilterTerm(WorkitemScope); termD.NotEqual(Oid.FromToken("Scope:1", Meta)); var and1 = new AndFilterTerm(termA, termB); var and2 = new AndFilterTerm(termC, termD); var o = new OrFilterTerm(and1, and2); Assert.AreEqual( "((Workitem.Parent='Theme%3a5','Theme%3a6';Workitem.Scope='Scope%3a0')|(Workitem.Parent!='Theme%3a7','Theme%3a8';Workitem.Scope!='Scope%3a1'))", o.Token); }
/// <summary> /// Get collection of reference fields for asset type. /// </summary> /// <param name="assetTypeToken">AssetType token</param> public List <string> GetReferenceFieldList(string assetTypeToken) { var attributeDefinitionAssetType = services.Meta.GetAssetType("AttributeDefinition"); var nameAttributeDef = attributeDefinitionAssetType.GetAttributeDefinition("Name"); var assetNameAttributeDef = attributeDefinitionAssetType.GetAttributeDefinition("Asset.AssetTypesMeAndDown.Name"); var isCustomAttributeDef = attributeDefinitionAssetType.GetAttributeDefinition("IsCustom"); var attributeTypeAttributeDef = attributeDefinitionAssetType.GetAttributeDefinition("AttributeType"); var assetTypeTerm = new FilterTerm(assetNameAttributeDef); assetTypeTerm.Equal(assetTypeToken); var isCustomTerm = new FilterTerm(isCustomAttributeDef); isCustomTerm.Equal("true"); var attributeTypeTerm = new FilterTerm(attributeTypeAttributeDef); attributeTypeTerm.Equal("Text"); var result = GetFieldList(new AndFilterTerm(assetTypeTerm, isCustomTerm, attributeTypeTerm), new List <IAttributeDefinition> { nameAttributeDef }); var fieldList = new List <string>(); result.ForEach(x => fieldList.Add(x.GetAttribute(nameAttributeDef).Value.ToString())); return(fieldList); }
public void HistorySingleAssetTest() { IMetaModel metaModel = new MetaModel(new VersionOneAPIConnector(_metaUrl)); IServices services = new Services( metaModel, new VersionOneAPIConnector(_dataUrl).WithVersionOneUsernameAndPassword(_username, _password)); var memberType = metaModel.GetAssetType("Member"); var idAttribute = memberType.GetAttributeDefinition("ID"); var changeDateAttribute = memberType.GetAttributeDefinition("ChangeDate"); var emailAttribute = memberType.GetAttributeDefinition("Email"); // the boolean parameter specifies we want the historical data var query = new Query(memberType, true); query.Selection.Add(changeDateAttribute); query.Selection.Add(emailAttribute); var idTerm = new FilterTerm(idAttribute); idTerm.Equal("Member:20"); query.Filter = idTerm; var result = services.Retrieve(query); Assert.AreNotEqual(0, result.Assets.Count); }
protected string GetCustomListTypeAssetOIDFromV1(string AssetType, string AssetValue) { IAssetType assetType = _metaAPI.GetAssetType(AssetType); Query query = new Query(assetType); IAttributeDefinition nameAttribute = assetType.GetAttributeDefinition("Name"); FilterTerm term = new FilterTerm(nameAttribute); term.Equal(AssetValue); query.Filter = term; QueryResult result; try { result = _dataAPI.Retrieve(query); } catch { return(null); } if (result.TotalAvaliable > 0) { return(result.Assets[0].Oid.Token.ToString()); } else { return(null); } }
protected string CheckForDuplicateInV1(string AssetType, string AttributeName, string AttributeValue) { //if (AssetType.StartsWith("Custom_")) //{ // return null; //} IAssetType assetType = _metaAPI.GetAssetType(AssetType); //_logger.Info("CheckForDuplicateInV1: assetType is {0} amd value is {1} ", AssetType, AttributeValue); Query query = new Query(assetType); IAttributeDefinition valueAttribute = assetType.GetAttributeDefinition(AttributeName); query.Selection.Add(valueAttribute); FilterTerm idFilter = new FilterTerm(valueAttribute); idFilter.Equal(AttributeValue); query.Filter = idFilter; QueryResult result = _dataAPI.Retrieve(query); if (result.TotalAvaliable > 0) { return(result.Assets[0].Oid.Token.ToString()); } else { return(null); } }
public void QueryStoryByChangeDate() { const int millisecondOffset = 5; var storyAsset = CreateDisposableStory(InitialStoryName, "Scope:0"); storyAsset = GetAssetsByOid(storyAsset.Oid.Momentless, attributesToQuery)[0]; var changeDate = (DateTime)storyAsset.GetAttribute(changeDateDef).Value; if (changeDate.Millisecond < millisecondOffset) { Assert.Ignore("Querying items by date with high precision does not make sense because seconds number will be changed by offset"); } var dateTerm = new FilterTerm(changeDateDef); dateTerm.Greater(changeDate.AddMilliseconds(-millisecondOffset)); var stories = GetStoryAssets(dateTerm); Assert.IsTrue(stories.Any(x => x.Oid.Momentless.Equals(storyAsset.Oid.Momentless))); dateTerm = new FilterTerm(changeDateDef); dateTerm.Less(changeDate.AddMilliseconds(-millisecondOffset)); stories = GetStoryAssets(dateTerm); Assert.IsFalse(stories.Any(x => x.Oid.Momentless.Equals(storyAsset.Oid.Momentless))); }
public List <Asset> FilterListOfAssets() { var assetType = _context.MetaModel.GetAssetType("Task"); var query = new Query(assetType); var nameAttribute = assetType.GetAttributeDefinition("Name"); var todoAttribute = assetType.GetAttributeDefinition("ToDo"); query.Selection.Add(nameAttribute); query.Selection.Add(todoAttribute); var toDoTerm = new FilterTerm(todoAttribute); toDoTerm.Equal(0); query.Filter = toDoTerm; var result = _context.Services.Retrieve(query); result.Assets.ForEach(taskAsset => LogResult(taskAsset.Oid.Token, GetValue(taskAsset.GetAttribute(nameAttribute).Value), GetValue(taskAsset.GetAttribute(todoAttribute).Value.ToString()))); /***** OUTPUT EXAMPLE ***** * Task:1153 * Code Review * 0 * * Task:1154 * Design Component * 0 ... ******************/ return(result.Assets); }
public List <Asset> HistorySingleAsset() { var memberType = _context.MetaModel.GetAssetType("Member"); var query = new Query(memberType, true); var idAttribute = memberType.GetAttributeDefinition("ID"); var changeDateAttribute = memberType.GetAttributeDefinition("ChangeDate"); var emailAttribute = memberType.GetAttributeDefinition("Email"); query.Selection.Add(changeDateAttribute); query.Selection.Add(emailAttribute); var idTerm = new FilterTerm(idAttribute); idTerm.Equal("Member:20"); query.Filter = idTerm; var result = _context.Services.Retrieve(query); result.Assets.ForEach(asset => LogResult(asset.Oid.Token, GetValue(asset.GetAttribute(changeDateAttribute).Value), GetValue(asset.GetAttribute(emailAttribute).Value))); /***** OUTPUT EXAMPLE ***** * Member:1000:105 * 4/2/2007 1:22:03 PM * [email protected] * * Member:1000:101 * 3/29/2007 4:10:29 PM * [email protected] ******************/ return(result.Assets); }
private PropertyValues QueryPropertyValues(string propertyName) { var res = new PropertyValues(); var assetType = connector.MetaModel.GetAssetType(propertyName); var nameDef = assetType.GetAttributeDefinition(Entity.NameProperty); IAttributeDefinition inactiveDef; var query = new Query(assetType); query.Selection.Add(nameDef); if (assetType.TryGetAttributeDefinition("Inactive", out inactiveDef)) { var filter = new FilterTerm(inactiveDef); filter.Equal("False"); query.Filter = filter; } query.OrderBy.MajorSort(assetType.DefaultOrderBy, OrderBy.Order.Ascending); res.Add(new ValueId()); foreach (var asset in connector.Services.Retrieve(query).Assets) { var name = asset.GetAttribute(nameDef).Value as string; res.Add(new ValueId(asset.Oid, name)); } return(res); }
public ICollection <Scope> LookupProjects(string term) { var projectType = services.Meta.GetAssetType(ScopeType); var parentDef = projectType.GetAttributeDefinition("Parent"); var nameDef = projectType.GetAttributeDefinition(Entity.NameProperty); var stateDef = projectType.GetAttributeDefinition(AssetStateAttribute); var filter = new FilterTerm(stateDef); filter.NotEqual(AssetState.Closed); var query = new Query(projectType, parentDef) { Filter = filter }; query.Selection.Add(nameDef); query.OrderBy.MajorSort(projectType.DefaultOrderBy, OrderBy.Order.Ascending); var assets = services.Retrieve(query).Assets.Flatten(); var selectAll = string.IsNullOrEmpty(term.Trim()); return(assets .Where(x => selectAll || x.GetAttribute(nameDef).Value.ToString().ToLowerInvariant().Contains(term.ToLowerInvariant())) .Select(asset => new Scope(asset)) .ToList()); }
/// <summary> /// Attempts to match owners of the workitem in the external system to users in VersionOne. /// </summary> /// <param name="ownerNames">Comma seperated list of usernames.</param> /// <returns>Oids of matching users in VersionOne.</returns> //TODO refactor private IEnumerable <Oid> GetOwnerOids(string ownerNames) { var result = new List <Oid>(); if (!string.IsNullOrEmpty(ownerNames)) { var memberType = services.Meta.GetAssetType("Member"); var ownerQuery = new Query(memberType); var terms = new List <IFilterTerm>(); foreach (var ownerName in ownerNames.Split(',')) { var term = new FilterTerm(memberType.GetAttributeDefinition("Username")); term.Equal(ownerName); terms.Add(term); } ownerQuery.Filter = new AndFilterTerm(terms.ToArray()); var matches = services.Retrieve(ownerQuery).Assets; result.AddRange(matches.Select(owner => owner.Oid)); } return(result.ToArray()); }
public void MultiRelation <T>(string name, ICollection <T> values) where T : Entity { if (values.Count > 0) { var def = Resolve(name); FilterTerm valuesTerm = null; FilterTerm notExistsTerm = null; foreach (var t in values) { if (t == null) { if (notExistsTerm == null) { notExistsTerm = new FilterTerm(def); notExistsTerm.NotExists(); } } else { if (valuesTerm == null) { valuesTerm = new FilterTerm(def); } valuesTerm.Equal(GetOid(t.ID)); } } Root.Or(valuesTerm, notExistsTerm); } }
// TODO it is known that primary workitem statuses do not have to be unique in VersionOne. In this case, the following method fails. private IDictionary <string, string> QueryPropertyValues(string propertyName) { var res = new Dictionary <string, string>(); var assetType = services.Meta.GetAssetType(propertyName); var valueDef = assetType.GetAttributeDefinition("Name"); IAttributeDefinition inactiveDef; var query = new Query(assetType); query.Selection.Add(valueDef); if (assetType.TryGetAttributeDefinition("Inactive", out inactiveDef)) { var filter = new FilterTerm(inactiveDef); filter.Equal("False"); query.Filter = filter; } query.OrderBy.MajorSort(assetType.DefaultOrderBy, OrderBy.Order.Ascending); foreach (var asset in services.Retrieve(query).Assets) { var name = asset.GetAttribute(valueDef).Value.ToString(); res.Add(name, asset.Oid.ToString()); } return(res); }
public void Name() { var query = new Query(new MockAssetType()); var term = new FilterTerm(new MockAttributeDefinition("Name")); term.Exists(); query.Filter = term; var testMe = new QueryURLBuilder(query); Assert.AreEqual("Data/Mock?sel=&where=%2BMock.Name", testMe.ToString()); }
public void Filter() { var query = new Query(new MockAssetType()); var term = new FilterTerm(new MockAttributeDefinition("Name")); term.Equal("Jerry's Story"); query.Filter = term; var testMe = new QueryURLBuilder(query); const string expectedUrl = "Data/Mock?sel=&where=Mock.Name='Jerry''s+Story'"; Assert.AreEqual(expectedUrl, Uri.UnescapeDataString(testMe.ToString())); }
public void SingleNestedTerm() { var f1 = new FilterTerm(WorkitemToDo); f1.Greater(5); var o1 = new OrFilterTerm(f1); var o2 = new OrFilterTerm(); var a1 = new AndFilterTerm(o1, o2); var a2 = new AndFilterTerm(a1); Assert.AreEqual("Workitem.ToDo>'5'", a2.Token); }
public Query(AssetType assetType, IEnumerable <AttributeDefinition> selection, FilterTerm filter, IEnumerable <OrderTerm> orderTerms, int?skip, int?take, MetaModel metaModel) { AssetType = assetType; Selection = selection; Filter = filter; OrderTerms = orderTerms; Skip = skip; Take = take; MetaModel = metaModel; }
private IEnumerable<string> GetCustomFields(string assetTypeName, FieldType fieldType) { var attrType = services.Meta.GetAssetType(AttributeDefinitionType); var assetType = services.Meta.GetAssetType(assetTypeName); var isCustomAttributeDef = attrType.GetAttributeDefinition("IsCustom"); var nameAttrDef = attrType.GetAttributeDefinition(Entity.NameProperty); var termType = new FilterTerm(attrType.GetAttributeDefinition("Asset.AssetTypesMeAndDown.Name")); termType.Equal(assetTypeName); IAttributeDefinition inactiveDef; FilterTerm termState = null; if (assetType.TryGetAttributeDefinition("Inactive", out inactiveDef)) { termState = new FilterTerm(inactiveDef); termState.Equal("False"); } var fieldTypeName = string.Empty; var attributeTypeName = string.Empty; switch (fieldType) { case FieldType.List: fieldTypeName = "OneToManyRelationDefinition"; attributeTypeName = "Relation"; break; case FieldType.Numeric: fieldTypeName = "SimpleAttributeDefinition"; attributeTypeName = "Numeric"; break; case FieldType.Text: fieldTypeName = "SimpleAttributeDefinition"; attributeTypeName = "Text"; break; } var assetTypeTerm = new FilterTerm(attrType.GetAttributeDefinition(AssetTypeAttribute)); assetTypeTerm.Equal(fieldTypeName); var attributeTypeTerm = new FilterTerm(attrType.GetAttributeDefinition("AttributeType")); attributeTypeTerm.Equal(attributeTypeName); var isCustomTerm = new FilterTerm(isCustomAttributeDef); isCustomTerm.Equal("true"); var result = GetFieldList(new AndFilterTerm(termState, termType, assetTypeTerm, isCustomTerm, attributeTypeTerm), new List<IAttributeDefinition> { nameAttrDef }); var fieldList = new List<string>(); result.ForEach(x => fieldList.Add(x.GetAttribute(nameAttrDef).Value.ToString())); return fieldList; }
public void MultipleAttributes() { var query = new Query(new MockAssetType()); query.Selection.Add(new MockAttributeDefinition("DefaultRole")); query.Selection.Add(new MockAttributeDefinition("Name")); query.Selection.Add(new MockAttributeDefinition("Nickname")); var term = new FilterTerm(new MockAttributeDefinition("Name")); term.Equal("Jerry"); query.Filter = term; var testMe = new QueryURLBuilder(query); Assert.AreEqual("Data/Mock?sel=Mock.DefaultRole,Mock.Name,Mock.Nickname&where=Mock.Name='Jerry'", testMe.ToString()); }
public void ConstructBasicFilterTerm() { var name = Guid.NewGuid().ToString(); var op = FilterOperators.NotEqual; var value = Guid.NewGuid(); var term = new FilterTerm(name, op, value); Assert.Equal(name, term.PropertyName); Assert.Equal(op, term.Operator); Assert.Equal(value, term.Value); }
/// <summary> /// Gets the active values of a standard list type. /// </summary> /// <typeparam name="T">The type of Entity that represents the V1 List Type.</typeparam> /// <returns>A list of active values for this list type.</returns> public IEnumerable <T> ListTypeValues <T>() where T : ListValue { var typeToGet = instance.MetaModel.GetAssetType(GetAssetTypeToken(typeof(T))); var query = new Query(typeToGet); var assetStateTerm = new FilterTerm(typeToGet.GetAttributeDefinition("AssetState")); assetStateTerm.NotEqual(AssetState.Closed); query.Filter = new AndFilterTerm(assetStateTerm); return(instance.QueryToEntityEnum <T>(query)); }
internal IEnumerable <CustomListValue> GetCustomListTypeValues(Entity entity, string attributeName) { var typeToGet = GetRelatedType(entity, attributeName); var query = new Query(typeToGet); var assetStateTerm = new FilterTerm(typeToGet.GetAttributeDefinition("AssetState")); assetStateTerm.NotEqual(AssetState.Closed); query.Filter = new AndFilterTerm(assetStateTerm); return(Services.Retrieve(query).Assets.Select(asset => CreateWrapper <CustomListValue>(new AssetID(asset.Oid.Token), false)).ToList()); }
public void QueryStoryByMoment() { var storyAsset = CreateDisposableStory(InitialStoryName, "Scope:0"); storyAsset = GetAssetsByOid(storyAsset.Oid.Momentless, attributesToQuery)[0]; var moment = storyAsset.GetAttribute(momentDef).Value; Assert.AreEqual(storyAsset.GetAttribute(nameDef).Value, InitialStoryName); storyAsset.SetAttributeValue(nameDef, ChangedStoryName); services.Save(storyAsset); storyAsset = GetAssetsByOid(storyAsset.Oid.Momentless, attributesToQuery)[0]; Assert.AreEqual(storyAsset.GetAttribute(nameDef).Value, ChangedStoryName); var filter = new FilterTerm(momentDef); filter.Equal(moment); storyAsset = GetAssetsByOid(storyAsset.Oid.Momentless, attributesToQuery, filter)[0]; Assert.AreEqual(storyAsset.GetAttribute(nameDef).Value, ChangedStoryName, "Data query should return latest workitem snapshot ignoring Moment filter"); }
public void Asset_with_valid_Guid_Attribute() { var payloadGuid = Guid.Parse("98771fb4-71b8-42ec-be8b-69414daa020e"); var subject = new Services(Meta, DataConnector); var publicationType = Meta.GetAssetType("Publication"); var payloadAttribute = publicationType.GetAttributeDefinition("Payload"); var query = new Query(publicationType); query.Selection.Add(payloadAttribute); var filter = new FilterTerm(payloadAttribute); filter.Equal(payloadGuid); query.Filter = filter; var result = subject.Retrieve(query); var payloadFromResult = (Guid)result.Assets[0].GetAttribute(payloadAttribute).Value; Assert.AreEqual(payloadGuid, payloadFromResult); }
public void MockItemWithVariables() { var variable = new QueryVariable("Name", "Name1", "Name2", "Name3"); var nameAttribute = new MockAttributeDefinition("Name"); var query = new Query(new MockAssetType()); query.Variables.Add(variable); var filter = new FilterTerm(nameAttribute); filter.Operate(FilterTerm.Operator.Equal, variable); query.Filter = filter; query.Selection.Add(new MockAttributeDefinition("Reference")); var builder = new QueryURLBuilder(query); Assert.AreEqual("Data/Mock?sel=Mock.Reference&where=Mock.Name=$Name&with=$Name=Name1,Name2,Name3", builder.ToString()); }
/// <summary> /// Use the Filter property of the Query object to filter the results that are returned. /// This query will retrieve only Story assets with a "ToDo" of zero. /// </summary> public void FilterListOfAssetsTest() { IMetaModel metaModel = new MetaModel(new VersionOneAPIConnector(_metaUrl)); IServices services = new Services( metaModel, new VersionOneAPIConnector(_dataUrl).WithVersionOneUsernameAndPassword(_username, _password)); var assetType = metaModel.GetAssetType("Task"); var query = new Query(assetType); var nameAttribute = assetType.GetAttributeDefinition("Name"); var todoAttribute = assetType.GetAttributeDefinition("ToDo"); query.Selection.Add(nameAttribute); query.Selection.Add(todoAttribute); var toDoTerm = new FilterTerm(todoAttribute); toDoTerm.Equal(0); query.Filter = toDoTerm; var result = services.Retrieve(query); result.Assets.ForEach(asset => Assert.AreEqual(0, asset.GetAttribute(todoAttribute).Value)); }
public void DatePrecisionInVariable() { var date = new DateTime(2012, 6, 21, 15, 17, 53, 504); var changeDateAttribute = new MockAttributeDefinition("ChangeDate"); var query = new Query(new MockAssetType()); var variable = new QueryVariable("requestedDate", date); query.Selection.Add(new MockAttributeDefinition("Name")); query.Variables.Add(variable); var filter = new FilterTerm(changeDateAttribute); filter.Operate(FilterTerm.Operator.Equal, variable); var builder = new QueryURLBuilder(query); query.Filter = filter; var queryString = builder.ToString(); Assert.AreEqual("Data/Mock?sel=Mock.Name&where=Mock.ChangeDate=$requestedDate&with=$requestedDate=2012-06-21T15%3a17%3a53.504", queryString); }
public void QueryTrackedEpicsByProject() { var metaConnector = new V1APIConnector(VersionOneUrl + "meta.v1/", "admin", "admin"); var metaModel = new MetaModel(metaConnector); var epicType = metaModel.GetAssetType("Epic"); var scopeType = metaModel.GetAssetType("Scope"); var query = new Query(epicType); const string scopeId = "Scope:1025"; var notClosedScopeAttribute = scopeType.GetAttributeDefinition("AssetState"); var notClosedEpicAttribute = epicType.GetAttributeDefinition("AssetState"); var notClosedEpicTerm = new FilterTerm(notClosedEpicAttribute); notClosedEpicTerm.NotEqual("Closed"); var notClosedScopeTerm = new FilterTerm(notClosedScopeAttribute); notClosedScopeTerm.NotEqual("Closed"); var scopeAttribute = epicType.GetAttributeDefinition("Scope.ParentMeAndUp"); scopeAttribute = scopeAttribute.Filter(notClosedScopeTerm); var scopeTerm = new FilterTerm(scopeAttribute); scopeTerm.Equal(scopeId); var superAndUpAttribute = epicType.GetAttributeDefinition("SuperAndUp"); superAndUpAttribute = superAndUpAttribute.Filter(scopeTerm); var superAndUpTerm = new FilterTerm(superAndUpAttribute); superAndUpTerm.NotExists(); var filter = new AndFilterTerm(scopeTerm, notClosedEpicTerm, superAndUpTerm); query.Filter = filter; var builder = new QueryURLBuilder(query); var result = builder.ToString(); Assert.AreEqual("Data/Epic?sel=&where=(Epic.Scope.ParentMeAndUp[AssetState!='Closed']='Scope%3a1025';Epic.AssetState!='Closed';-Epic.SuperAndUp[Scope.ParentMeAndUp[AssetState!='Closed']='Scope:1025'])", result); }
public void QueryStoryByChangeDate() { const int millisecondOffset = 5; var storyAsset = CreateDisposableStory(InitialStoryName, "Scope:0"); storyAsset = GetAssetsByOid(storyAsset.Oid.Momentless, attributesToQuery)[0]; var changeDate = (DateTime) storyAsset.GetAttribute(changeDateDef).Value; if(changeDate.Millisecond < millisecondOffset) { Assert.Ignore("Querying items by date with high precision does not make sense because seconds number will be changed by offset"); } var dateTerm = new FilterTerm(changeDateDef); dateTerm.Greater(changeDate.AddMilliseconds(-millisecondOffset)); var stories = GetStoryAssets(dateTerm); Assert.IsTrue(stories.Any(x => x.Oid.Momentless.Equals(storyAsset.Oid.Momentless))); dateTerm = new FilterTerm(changeDateDef); dateTerm.Less(changeDate.AddMilliseconds(-millisecondOffset)); stories = GetStoryAssets(dateTerm); Assert.IsFalse(stories.Any(x => x.Oid.Momentless.Equals(storyAsset.Oid.Momentless))); }
public void QueryTrackedEpicsForMultipleProjectsUsingVariables() { var metaConnector = new V1APIConnector(VersionOneUrl + "meta.v1/", "admin", "admin"); var metaModel = new MetaModel(metaConnector); var scopeVariable = new QueryVariable("Scope", "Scope:2176"); var epicType = metaModel.GetAssetType("Epic"); var query = new Query(epicType); var notClosedEpicAttribute = epicType.GetAttributeDefinition("AssetState"); var notClosedEpicTerm = new FilterTerm(notClosedEpicAttribute); notClosedEpicTerm.NotEqual("Closed"); var scopeAttribute = epicType.GetAttributeDefinition("Scope"); var scopeTerm = new FilterTerm(scopeAttribute); scopeTerm.Operate(FilterTerm.Operator.Equal, scopeVariable); var superAndUpAttribute = epicType.GetAttributeDefinition("SuperAndUp").Filter(scopeTerm); var superAndUpTerm = new FilterTerm(superAndUpAttribute); superAndUpTerm.NotExists(); var filter = new AndFilterTerm(notClosedEpicTerm, scopeTerm, superAndUpTerm); query.Filter = filter; query.Variables.Add(scopeVariable); var builder = new QueryURLBuilder(query); var result = builder.ToString(); Assert.AreEqual("Data/Epic?sel=&where=(Epic.AssetState!='Closed';Epic.Scope=$Scope;-Epic.SuperAndUp[Scope=$Scope])&with=$Scope=Scope%3A2176", result); }
public void QueryStoryHistoryByMoment() { var storyAsset = CreateDisposableStory(InitialStoryName, "Scope:0"); storyAsset = GetAssetsByOid(storyAsset.Oid.Momentless, attributesToQuery)[0]; var moment = storyAsset.GetAttribute(momentDef).Value; Assert.AreEqual(storyAsset.GetAttribute(nameDef).Value, InitialStoryName); storyAsset.SetAttributeValue(nameDef, ChangedStoryName); services.Save(storyAsset); storyAsset = GetAssetsByOid(storyAsset.Oid.Momentless, attributesToQuery)[0]; Assert.AreEqual(storyAsset.GetAttribute(nameDef).Value, ChangedStoryName); var filter = new FilterTerm(momentDef); filter.Equal(moment); storyAsset = GetAssetsByOid(storyAsset.Oid.Momentless, attributesToQuery, filter, true)[0]; Assert.AreEqual(storyAsset.GetAttribute(nameDef).Value, InitialStoryName, "Historical query should behave with respect to provided Moment"); }
public void QueryStoryChangesWithInequalityFilter() { var storyAsset = CreateDisposableStory(InitialStoryName, "Scope:0"); storyAsset = GetAssetsByOid(storyAsset.Oid.Momentless, attributesToQuery)[0]; var moment1 = storyAsset.GetAttribute(momentDef).Value; storyAsset.SetAttributeValue(nameDef, ChangedStoryName); services.Save(storyAsset); storyAsset.SetAttributeValue(nameDef, FinalStoryName); services.Save(storyAsset); storyAsset = GetAssetsByOid(storyAsset.Oid.Momentless, attributesToQuery)[0]; var moment3 = storyAsset.GetAttribute(momentDef).Value; var filter = new FilterTerm(momentDef); filter.GreaterOrEqual(moment1); var assets = GetAssetsByOid(storyAsset.Oid.Momentless, attributesToQuery, filter, true); Assert.AreEqual(3, assets.Count); Assert.IsTrue(assets.Any(x => x.GetAttribute(nameDef).Value.Equals(InitialStoryName))); Assert.IsTrue(assets.Any(x => x.GetAttribute(nameDef).Value.Equals(ChangedStoryName))); Assert.IsTrue(assets.Any(x => x.GetAttribute(nameDef).Value.Equals(FinalStoryName))); filter = new FilterTerm(momentDef); filter.Greater(moment1); assets = GetAssetsByOid(storyAsset.Oid.Momentless, attributesToQuery, filter, true); Assert.AreEqual(2, assets.Count); Assert.IsFalse(assets.Any(x => x.GetAttribute(nameDef).Value.Equals(InitialStoryName))); Assert.IsTrue(assets.Any(x => x.GetAttribute(nameDef).Value.Equals(ChangedStoryName))); Assert.IsTrue(assets.Any(x => x.GetAttribute(nameDef).Value.Equals(FinalStoryName))); var lessFilter = new FilterTerm(momentDef); lessFilter.Less(moment3); var greaterFilter = new FilterTerm(momentDef); greaterFilter.Greater(moment1); var groupFilter = new AndFilterTerm(lessFilter, greaterFilter); assets = GetAssetsByOid(storyAsset.Oid.Momentless, attributesToQuery, groupFilter, true); Assert.AreEqual(1, assets.Count); Assert.IsFalse(assets.Any(x => x.GetAttribute(nameDef).Value.Equals(InitialStoryName))); Assert.IsTrue(assets.Any(x => x.GetAttribute(nameDef).Value.Equals(ChangedStoryName))); Assert.IsFalse(assets.Any(x => x.GetAttribute(nameDef).Value.Equals(FinalStoryName))); }
public void DatePrecision() { var date = new DateTime(2012, 6, 21, 15, 17, 53, 504); var changeDateAttribute = new MockAttributeDefinition("ChangeDate"); var query = new Query(new MockAssetType()); query.Selection.Add(new MockAttributeDefinition("Name")); var filter = new FilterTerm(changeDateAttribute); filter.Greater(date); var builder = new QueryURLBuilder(query); query.Filter = filter; var queryString = builder.ToString(); Assert.AreEqual("Data/Mock?sel=Mock.Name&where=Mock.ChangeDate>'2012-06-21T15%3a17%3a53.504'", queryString); }
public List<Asset> FilterListOfAssets() { var assetType = _context.MetaModel.GetAssetType("Task"); var query = new Query(assetType); var nameAttribute = assetType.GetAttributeDefinition("Name"); var todoAttribute = assetType.GetAttributeDefinition("ToDo"); query.Selection.Add(nameAttribute); query.Selection.Add(todoAttribute); var toDoTerm = new FilterTerm(todoAttribute); toDoTerm.Equal(0); query.Filter = toDoTerm; var result = _context.Services.Retrieve(query); result.Assets.ForEach(taskAsset => LogResult(taskAsset.Oid.Token, GetValue(taskAsset.GetAttribute(nameAttribute).Value), GetValue(taskAsset.GetAttribute(todoAttribute).Value.ToString()))); /***** OUTPUT EXAMPLE ***** Task:1153 Code Review 0 Task:1154 Design Component 0 ... ******************/ return result.Assets; }
public List<Asset> HistorySingleAsset() { var memberType = _context.MetaModel.GetAssetType("Member"); var query = new Query(memberType, true); var idAttribute = memberType.GetAttributeDefinition("ID"); var changeDateAttribute = memberType.GetAttributeDefinition("ChangeDate"); var emailAttribute = memberType.GetAttributeDefinition("Email"); query.Selection.Add(changeDateAttribute); query.Selection.Add(emailAttribute); var idTerm = new FilterTerm(idAttribute); idTerm.Equal("Member:20"); query.Filter = idTerm; var result = _context.Services.Retrieve(query); result.Assets.ForEach(asset => LogResult(asset.Oid.Token, GetValue(asset.GetAttribute(changeDateAttribute).Value), GetValue(asset.GetAttribute(emailAttribute).Value))); /***** OUTPUT EXAMPLE ***** Member:1000:105 4/2/2007 1:22:03 PM [email protected] Member:1000:101 3/29/2007 4:10:29 PM [email protected] ******************/ return result.Assets; }