public async Task CanRequest_RuleRun_WithProcessOperation_AllFields()
        {
            // arrange
            this._dbContext.DbRuleRuns.Add(
                new SystemProcessOperationRuleRun
            {
                Id                       = 3,
                CorrelationId            = "abc",
                RuleDescription          = "this is a description",
                RuleVersion              = "1.2.3",
                ScheduleRuleStart        = new DateTime(2020, 04, 05, 03, 45, 22, DateTimeKind.Utc),
                ScheduleRuleEnd          = new DateTime(2020, 04, 06, 04, 46, 23, DateTimeKind.Utc),
                SystemProcessOperationId = 7
            });
            this._dbContext.DbProcessOperations.Add(
                new SystemProcessOperation
            {
                Id             = 7,
                OperationStart = new DateTime(2020, 07, 05, 03, 45, 22, DateTimeKind.Utc),
                OperationEnd   = new DateTime(2020, 07, 06, 03, 45, 22, DateTimeKind.Utc),
                OperationState = 99
            });
            this._dbContext.DbProcessOperations.Add(
                new SystemProcessOperation
            {
                // system process operation not to be found
                Id = 8
            });
            await this._dbContext.SaveChangesAsync();

            var query = new RuleRunQuery();

            query.Filter.Node.FieldId().FieldCorrelationId().FieldRuleDescription().FieldRuleVersion()
            .FieldScheduleRuleStart().FieldScheduleRuleEnd().FieldProcessOperation().FieldId().FieldOperationStart()
            .FieldOperationEnd().FieldOperationState();

            // act
            var ruleRuns = await this._apiClient.QueryAsync(query, CancellationToken.None);

            // assert
            Assert.That(ruleRuns, Has.Count.EqualTo(1));
            var ruleRun = ruleRuns[0];

            Assert.That(ruleRun.Id, Is.EqualTo(3));
            Assert.That(ruleRun.CorrelationId, Is.EqualTo("abc"));
            Assert.That(ruleRun.RuleDescription, Is.EqualTo("this is a description"));
            Assert.That(ruleRun.RuleVersion, Is.EqualTo("1.2.3"));
            Assert.That(
                ruleRun.ScheduleRuleStart,
                Is.EqualTo(new DateTime(2020, 04, 05, 03, 45, 22, DateTimeKind.Utc)));
            Assert.That(ruleRun.ScheduleRuleEnd, Is.EqualTo(new DateTime(2020, 04, 06, 04, 46, 23, DateTimeKind.Utc)));
            Assert.That(ruleRun.ProcessOperation.Id, Is.EqualTo(7));
            Assert.That(
                ruleRun.ProcessOperation.OperationStart,
                Is.EqualTo(new DateTime(2020, 07, 05, 03, 45, 22, DateTimeKind.Utc)));
            Assert.That(
                ruleRun.ProcessOperation.OperationEnd,
                Is.EqualTo(new DateTime(2020, 07, 06, 03, 45, 22, DateTimeKind.Utc)));
            Assert.That(ruleRun.ProcessOperation.OperationState, Is.EqualTo(99));
        }
        public async Task CanRequest_RuleRuns_ByCorrelationIds()
        {
            // arrange
            this._dbContext.DbRuleRuns.Add(new SystemProcessOperationRuleRun {
                Id = 3, CorrelationId = "abc"
            });
            this._dbContext.DbRuleRuns.Add(new SystemProcessOperationRuleRun {
                Id = 4, CorrelationId = "abc"
            });
            this._dbContext.DbRuleRuns.Add(new SystemProcessOperationRuleRun {
                Id = 5, CorrelationId = "def"
            });
            this._dbContext.DbRuleRuns.Add(
                new SystemProcessOperationRuleRun
            {
                // a rule run which shouldn't be found
                Id = 6, CorrelationId = "xyz"
            });
            await this._dbContext.SaveChangesAsync();

            var query = new RuleRunQuery();

            query.Filter.ArgumentCorrelationIds(new List <string> {
                "abc", "def"
            }).Node.FieldId().FieldCorrelationId();

            // act
            var ruleRuns = await this._apiClient.QueryAsync(query, CancellationToken.None);

            // assert
            Assert.That(ruleRuns, Has.Count.EqualTo(3));
        }
        public async Task CanRequest_RuleRun_ProcessOperation_DateTimeCanBeNull()
        {
            // arrange
            this._dbContext.DbRuleRuns.Add(new SystemProcessOperationRuleRun {
                Id = 3, SystemProcessOperationId = 7
            });
            this._dbContext.DbProcessOperations.Add(new SystemProcessOperation {
                Id = 7
            });
            await this._dbContext.SaveChangesAsync();

            var query = new RuleRunQuery();

            query.Filter.Node.FieldProcessOperation().FieldOperationEnd();

            // act
            var ruleRuns = await this._apiClient.QueryAsync(query, CancellationToken.None);

            // assert
            Assert.That(ruleRuns, Has.Count.EqualTo(1));
            var ruleRun = ruleRuns[0];

            Assert.That(ruleRun.ProcessOperation.OperationEnd, Is.EqualTo(null));
        }