public void Task()
        {
            var query  = new Query(new MockAssetType("Task"), new MockAttributeDefinition("Story", AttributeType.Relation));
            var testMe = new QueryURLBuilder(query);

            Assert.AreEqual("Data/Task?sel=Mock.Story", testMe.ToString());
        }
		public void Find2() {
			var query = new Query(new MockAssetType());
			var findin = new AttributeSelection { new MockAttributeDefinition("Name"), new MockAttributeDefinition("Description") };
			query.Find = new QueryFind("TextToFind", findin);
			var testMe = new QueryURLBuilder(query);
			Assert.AreEqual("Data/Mock?sel=&find=\"TextToFind\"&findin=Mock.Name,Mock.Description", testMe.ToString());
		}
		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 SimpleQueryWithAttributes() {
			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 testMe = new QueryURLBuilder(query);
			Assert.AreEqual("Data/Mock?sel=Mock.DefaultRole,Mock.Name,Mock.Nickname", 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 StoryWithMomentByName()
        {
            var storyId = new Oid(new MockAssetType("Story"), 1094, 15);
            var query   = new Query(storyId);

            query.Selection.Add(new MockAttributeDefinition("Name"));
            var testMe = new QueryURLBuilder(query);

            Assert.AreEqual("Data/Story/1094/15/Name?", testMe.ToString());
        }
        public void Find1()
        {
            var query = new Query(new MockAssetType())
            {
                Find = new QueryFind("TextToFind")
            };
            var testMe = new QueryURLBuilder(query);

            Assert.AreEqual("Data/Mock?sel=&find=\"TextToFind\"", testMe.ToString());
        }
		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 MockItemByDate()
        {
            var testDate = new DateTime(2007, 10, 1, 3, 0, 0);
            var query    = new Query(new MockAssetType())
            {
                AsOf = testDate
            };
            var testMe = new QueryURLBuilder(query);

            Assert.AreEqual("Data/Mock?sel=&asof=2007-10-01T03:00:00", testMe.ToString());
        }
        public void SimpleQueryWithAttributes()
        {
            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 testMe = new QueryURLBuilder(query);

            Assert.AreEqual("Data/Mock?sel=Mock.DefaultRole,Mock.Name,Mock.Nickname", testMe.ToString());
        }
		public void NameAndEstimate() {
			IAttributeDefinition estimateAttribute = new MockAttributeDefinition("Estimate");
			var query = new Query(new MockAssetType());

			query.Selection.Add(new MockAttributeDefinition("Name"));
			query.Selection.Add(estimateAttribute);
			query.OrderBy.MinorSort(estimateAttribute, OrderBy.Order.Ascending);

			var testMe = new QueryURLBuilder(query);
			Assert.AreEqual("Data/Mock?sel=Mock.Name,Mock.Estimate&sort=Mock.Estimate", testMe.ToString());
		}
        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 Find2()
        {
            var query  = new Query(new MockAssetType());
            var findin = new AttributeSelection {
                new MockAttributeDefinition("Name"), new MockAttributeDefinition("Description")
            };

            query.Find = new QueryFind("TextToFind", findin);
            var testMe = new QueryURLBuilder(query);

            Assert.AreEqual("Data/Mock?sel=&find=\"TextToFind\"&findin=Mock.Name,Mock.Description", 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 NameAndEstimate()
        {
            IAttributeDefinition estimateAttribute = new MockAttributeDefinition("Estimate");
            var query = new Query(new MockAssetType());

            query.Selection.Add(new MockAttributeDefinition("Name"));
            query.Selection.Add(estimateAttribute);
            query.OrderBy.MinorSort(estimateAttribute, OrderBy.Order.Ascending);

            var testMe = new QueryURLBuilder(query);

            Assert.AreEqual("Data/Mock?sel=Mock.Name,Mock.Estimate&sort=Mock.Estimate", testMe.ToString());
        }
        public void MockItemByNameWithPaging()
        {
            var query = new Query(new MockAssetType());

            query.Selection.Add(new MockAttributeDefinition("Name"));
            query.Paging.Start = 5;
            var testMe = new QueryURLBuilder(query);

            Assert.AreEqual("Data/Mock?sel=Mock.Name&page=2147483647,5", testMe.ToString());

            query.Paging.PageSize = 10;
            testMe = new QueryURLBuilder(query);
            Assert.AreEqual("Data/Mock?sel=Mock.Name&page=10,5", testMe.ToString());
        }
        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 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());
        }
        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 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 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 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 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());
		}
		public void Find1() {
			var query = new Query(new MockAssetType()) {Find = new QueryFind("TextToFind")};
			var testMe = new QueryURLBuilder(query);
			Assert.AreEqual("Data/Mock?sel=&find=\"TextToFind\"", testMe.ToString());
		}
		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 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 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 MockItemByNameWithPaging() {
			var query = new Query(new MockAssetType());
			query.Selection.Add(new MockAttributeDefinition("Name"));
			query.Paging.Start = 5;
			var testMe = new QueryURLBuilder(query);
			Assert.AreEqual("Data/Mock?sel=Mock.Name&page=2147483647,5", testMe.ToString());

			query.Paging.PageSize = 10;
			testMe = new QueryURLBuilder(query);
			Assert.AreEqual("Data/Mock?sel=Mock.Name&page=10,5", testMe.ToString());
		}
		public void MockItemByDate() {
			var testDate = new DateTime(2007, 10, 1, 3, 0, 0);
			var query = new Query(new MockAssetType()) {AsOf = testDate};
			var testMe = new QueryURLBuilder(query);
			Assert.AreEqual("Data/Mock?sel=&asof=2007-10-01T03:00:00", testMe.ToString());
		}
		public void StoryWithMomentByName() {
			var storyId = new Oid(new MockAssetType("Story"), 1094, 15);
			var query = new Query(storyId);
			query.Selection.Add(new MockAttributeDefinition("Name"));
			var testMe = new QueryURLBuilder(query);
			Assert.AreEqual("Data/Story/1094/15/Name?", testMe.ToString());
		}
		public void SimpleQuery() {
			var testMe = new QueryURLBuilder(new Query(new MockAssetType()));
			Assert.AreEqual("Data/Mock?sel=", testMe.ToString());
		}
        public void SimpleQuery()
        {
            var testMe = new QueryURLBuilder(new Query(new MockAssetType()));

            Assert.AreEqual("Data/Mock?sel=", testMe.ToString());
        }
		public void Task() {
			var query = new Query(new MockAssetType("Task"), new MockAttributeDefinition("Story", AttributeType.Relation));
			var testMe = new QueryURLBuilder(query);
			Assert.AreEqual("Data/Task?sel=Mock.Story", testMe.ToString());
		}