public virtual void testCreateDeploymentPa()
        {
            // given
            EmbeddedProcessApplication application = new EmbeddedProcessApplication();

            // when
            IDeployment deployment = repositoryService.CreateDeployment(application.Reference).Name(DEPLOYMENT_NAME).AddModelInstance(RESOURCE_NAME, createProcessWithServiceTask(PROCESS_KEY)).Deploy();

            // then
            IUserOperationLogEntry userOperationLogEntry = historyService.CreateUserOperationLogQuery().First();

            Assert.NotNull(userOperationLogEntry);

            Assert.AreEqual(EntityTypes.Deployment, userOperationLogEntry.EntityType);
            Assert.AreEqual(deployment.Id, userOperationLogEntry.DeploymentId);

            Assert.AreEqual(UserOperationLogEntryFields.OperationTypeCreate, userOperationLogEntry.OperationType);

            Assert.AreEqual("duplicateFilterEnabled", userOperationLogEntry.Property);
            Assert.IsNull(userOperationLogEntry.OrgValue);
            Assert.IsFalse(Convert.ToBoolean(userOperationLogEntry.NewValue));

            Assert.AreEqual(USER_ID, userOperationLogEntry.UserId);

            Assert.IsNull(userOperationLogEntry.JobDefinitionId);
            Assert.IsNull(userOperationLogEntry.ProcessInstanceId);
            Assert.IsNull(userOperationLogEntry.ProcessDefinitionId);
            Assert.IsNull(userOperationLogEntry.ProcessDefinitionKey);
            Assert.IsNull(userOperationLogEntry.CaseInstanceId);
            Assert.IsNull(userOperationLogEntry.CaseDefinitionId);
        }
        public virtual void testSetJobPriority()
        {
            // given a job
            runtimeService.StartProcessInstanceByKey("asyncTaskProcess");
            IJob job = managementService.CreateJobQuery().First();

            // when I set a job priority
            managementService.SetJobPriority(job.Id, 42);

            // then an op log entry is written
            IUserOperationLogEntry userOperationLogEntry = historyService.CreateUserOperationLogQuery().First();

            Assert.NotNull(userOperationLogEntry);

            Assert.AreEqual(EntityTypes.Job, userOperationLogEntry.EntityType);
            Assert.AreEqual(job.Id, userOperationLogEntry.JobId);

            Assert.AreEqual(UserOperationLogEntryFields.OperationTypeSetPriority, userOperationLogEntry.OperationType);

            Assert.AreEqual("priority", userOperationLogEntry.Property);
            Assert.AreEqual("42", userOperationLogEntry.NewValue);
            Assert.AreEqual("0", userOperationLogEntry.OrgValue);

            Assert.AreEqual(USER_ID, userOperationLogEntry.UserId);

            Assert.AreEqual(job.JobDefinitionId, userOperationLogEntry.JobDefinitionId);
            Assert.AreEqual(job.ProcessInstanceId, userOperationLogEntry.ProcessInstanceId);
            Assert.AreEqual(job.ProcessDefinitionId, userOperationLogEntry.ProcessDefinitionId);
            Assert.AreEqual(job.ProcessDefinitionKey, userOperationLogEntry.ProcessDefinitionKey);
            Assert.AreEqual(DeploymentId, userOperationLogEntry.DeploymentId);
        }
        public virtual void testCompositeBeanInteraction()
        {
            // given: a manually created task
            task = taskService.NewTask();

            // then: save the task without any property change
            taskService.SaveTask(task);

            // expect: no entry
            IQueryable <IUserOperationLogEntry> query = queryOperationDetails(UserOperationLogEntryFields.OperationTypeCreate);
            IUserOperationLogEntry create             = query.First();

            Assert.NotNull(create);
            Assert.AreEqual(EntityTypes.Task, create.EntityType);
            Assert.IsNull(create.OrgValue);
            Assert.IsNull(create.NewValue);
            Assert.IsNull(create.Property);

            task.Assignee = "icke";
            task.Name     = "to do";

            // then: save the task again
            taskService.SaveTask(task);

            // expect: two update entries with the same operation id
            IList <IUserOperationLogEntry> entries = queryOperationDetails(UserOperationLogEntryFields.OperationTypeUpdate)
                                                     .ToList();

            Assert.AreEqual(2, entries.Count);
            Assert.AreEqual(entries[0].OperationId, entries[1].OperationId);
        }
        public virtual void testSetOverridingPriority()
        {
            // given a job definition
            IJobDefinition jobDefinition = managementService.CreateJobDefinitionQuery().First();

            // when I set a job priority
            managementService.SetOverridingJobPriorityForJobDefinition(jobDefinition.Id, 42);

            // then an op log entry is written
            IUserOperationLogEntry userOperationLogEntry = historyService.CreateUserOperationLogQuery().First();

            Assert.NotNull(userOperationLogEntry);

            Assert.AreEqual(EntityTypes.JobDefinition, userOperationLogEntry.EntityType);
            Assert.AreEqual(jobDefinition.Id, userOperationLogEntry.JobDefinitionId);

            Assert.AreEqual(UserOperationLogEntryFields.OperationTypeSetPriority, userOperationLogEntry.OperationType);

            Assert.AreEqual("overridingPriority", userOperationLogEntry.Property);
            Assert.AreEqual("42", userOperationLogEntry.NewValue);
            Assert.AreEqual(null, userOperationLogEntry.OrgValue);

            Assert.AreEqual(USER_ID, userOperationLogEntry.UserId);

            Assert.AreEqual(jobDefinition.ProcessDefinitionId, userOperationLogEntry.ProcessDefinitionId);
            Assert.AreEqual(jobDefinition.ProcessDefinitionKey, userOperationLogEntry.ProcessDefinitionKey);
            Assert.AreEqual(DeploymentId, userOperationLogEntry.DeploymentId);
        }
        public virtual void testClearOverridingPriority()
        {
            // given a job definition
            IJobDefinition jobDefinition = managementService.CreateJobDefinitionQuery().First();

            // with an overriding priority
            ClockUtil.CurrentTime = DateTime.Now;    // new DateTime(DateTimeHelperClass.CurrentUnixTimeMillis());
            managementService.SetOverridingJobPriorityForJobDefinition(jobDefinition.Id, 42);

            // when I clear that priority
            ClockUtil.CurrentTime = DateTime.Now;    // new DateTime(DateTimeHelperClass.CurrentUnixTimeMillis() + 10000);
            managementService.ClearOverridingJobPriorityForJobDefinition(jobDefinition.Id);

            // then this is accessible via the op log
            IUserOperationLogEntry userOperationLogEntry = historyService.CreateUserOperationLogQuery() /*.OrderByTimestamp()*//*.Desc()*//*.ListPage(0, 1)*/.First();

            Assert.NotNull(userOperationLogEntry);

            Assert.AreEqual(EntityTypes.JobDefinition, userOperationLogEntry.EntityType);
            Assert.AreEqual(jobDefinition.Id, userOperationLogEntry.JobDefinitionId);

            Assert.AreEqual(UserOperationLogEntryFields.OperationTypeSetPriority, userOperationLogEntry.OperationType);

            Assert.AreEqual("overridingPriority", userOperationLogEntry.Property);
            Assert.IsNull(userOperationLogEntry.NewValue);
            Assert.AreEqual("42", userOperationLogEntry.OrgValue);

            Assert.AreEqual(USER_ID, userOperationLogEntry.UserId);

            Assert.AreEqual(jobDefinition.ProcessDefinitionId, userOperationLogEntry.ProcessDefinitionId);
            Assert.AreEqual(jobDefinition.ProcessDefinitionKey, userOperationLogEntry.ProcessDefinitionKey);
            Assert.AreEqual(DeploymentId, userOperationLogEntry.DeploymentId);
        }
        public virtual void testDeleteDeploymentCascading()
        {
            // given
            IDeployment deployment = repositoryService.CreateDeployment().Name(DEPLOYMENT_NAME).AddModelInstance(RESOURCE_NAME, createProcessWithServiceTask(PROCESS_KEY)).Deploy();

            IQueryable <IUserOperationLogEntry> query = historyService.CreateUserOperationLogQuery(c => c.OperationType == UserOperationLogEntryFields.OperationTypeDelete);

            // when
            repositoryService.DeleteDeployment(deployment.Id, true);

            // then
            Assert.AreEqual(1, query.Count());

            IUserOperationLogEntry log = query.First();

            Assert.NotNull(log);

            Assert.AreEqual(EntityTypes.Deployment, log.EntityType);
            Assert.AreEqual(deployment.Id, log.DeploymentId);

            Assert.AreEqual(UserOperationLogEntryFields.OperationTypeDelete, log.OperationType);

            Assert.AreEqual("cascade", log.Property);
            Assert.IsNull(log.OrgValue);
            Assert.True(Convert.ToBoolean(log.NewValue));

            Assert.AreEqual(USER_ID, log.UserId);

            Assert.IsNull(log.JobDefinitionId);
            Assert.IsNull(log.ProcessInstanceId);
            Assert.IsNull(log.ProcessDefinitionId);
            Assert.IsNull(log.ProcessDefinitionKey);
            Assert.IsNull(log.CaseInstanceId);
            Assert.IsNull(log.CaseDefinitionId);
        }
        public virtual void testResetChange()
        {
            // given: a single task
            task = taskService.NewTask();
            taskService.SaveTask(task);

            // then: change the name
            string name = "a task";

            task.Name = name;
            taskService.SaveTask(task);
            IUserOperationLogEntry update = queryOperationDetails(UserOperationLogEntryFields.OperationTypeUpdate).First();

            Assert.IsNull(update.OrgValue);
            Assert.AreEqual(name, update.NewValue);

            // then: change the name some times and set it back to the original value
            task.Name = "to do 1";
            task.Name = "to do 2";
            task.Name = name;
            taskService.SaveTask(task);

            // expect: there is no additional change tracked
            update = queryOperationDetails(UserOperationLogEntryFields.OperationTypeUpdate).First();
            Assert.IsNull(update.OrgValue);
            Assert.AreEqual(name, update.NewValue);
        }
        public virtual void testOnlyTaskCompletionIsLogged()
        {
            // given
            string ProcessInstanceId = runtimeService.StartProcessInstanceByKey("process").Id;

            string taskId = taskService.CreateTaskQuery().First().Id;

            // when
            taskService.Complete(taskId);

            // then
            Assert.True((bool)runtimeService.GetVariable(ProcessInstanceId, "taskListenerCalled"));
            Assert.True((bool)runtimeService.GetVariable(ProcessInstanceId, "serviceTaskCalled"));

            IQueryable <IUserOperationLogEntry> query = historyService.CreateUserOperationLogQuery();

            Assert.AreEqual(1, query.Count());

            IUserOperationLogEntry log = query.First();

            Assert.AreEqual("process", log.ProcessDefinitionKey);
            Assert.AreEqual(ProcessInstanceId, log.ProcessInstanceId);
            Assert.AreEqual(DeploymentId, log.DeploymentId);
            Assert.AreEqual(taskId, log.TaskId);
            Assert.AreEqual(UserOperationLogEntryFields.OperationTypeComplete, log.OperationType);
        }
        public virtual void testCompleteCaseExecution()
        {
            // given
            //string caseDefinitionId = repositoryService.CreateCaseDefinitionQuery().First().Id;

            //string caseInstanceId = caseService.WithCaseDefinition(caseDefinitionId).Create().Id;

            //string humanTaskId = caseService.CreateCaseExecutionQuery(c=>c.ActivityId == "PI_HumanTask_1").First().Id;

            // when
            //caseService.WithCaseExecution(humanTaskId).Complete();

            // then
            IQueryable <IUserOperationLogEntry> query = queryOperationDetails(UserOperationLogEntryFields.OperationTypeComplete);

            Assert.AreEqual(1, query.Count());

            IUserOperationLogEntry entry = query.First();

            Assert.NotNull(entry);

            //Assert.AreEqual(caseDefinitionId, entry.CaseDefinitionId);
            //Assert.AreEqual(caseInstanceId, entry.CaseInstanceId);
            //Assert.AreEqual(humanTaskId, entry.CaseExecutionId);
            Assert.AreEqual(DeploymentId, entry.DeploymentId);

            Assert.IsFalse(Convert.ToBoolean(entry.OrgValue));
            Assert.True(Convert.ToBoolean(entry.NewValue));
            Assert.AreEqual(Permissions.Delete, entry.Property);
        }
Example #10
0
 public virtual void CheckDeleteUserOperationLog(IUserOperationLogEntry entry)
 {
     if (entry != null)
     {
         var processDefinitionKey = entry.ProcessDefinitionKey;
         if (!ReferenceEquals(processDefinitionKey, null))
         {
             AuthorizationManager.CheckAuthorization(Permissions.DeleteHistory, Resources.ProcessDefinition, processDefinitionKey);
         }
     }
 }
        public virtual void testSetDateProperty()
        {
            // given: a single task
            task = taskService.NewTask();
            DateTime now = ClockUtil.CurrentTime;

            task.DueDate = now;
            taskService.SaveTask(task);

            IUserOperationLogEntry logEntry = historyService.CreateUserOperationLogQuery().First();

            Assert.AreEqual(now.Ticks.ToString(), logEntry.NewValue);
        }
Example #12
0
        public virtual object Execute(CommandContext commandContext)
        {
            EnsureUtil.EnsureNotNull(typeof(NotValidException), "entryId", EntryId);

            IUserOperationLogEntry entry = commandContext.OperationLogManager.FindOperationLogById(EntryId);

            foreach (var checker in commandContext.ProcessEngineConfiguration.CommandCheckers)
            {
                checker.CheckDeleteUserOperationLog(entry);
            }

            commandContext.OperationLogManager.DeleteOperationLogEntryById(EntryId);
            return(null);
        }
        public virtual void testMultipleValueChange()
        {
            // given: a single task
            task = taskService.NewTask();
            taskService.SaveTask(task);

            // then: change a property twice
            task.Name = "a task";
            task.Name = "to do";
            taskService.SaveTask(task);
            IUserOperationLogEntry update = queryOperationDetails(UserOperationLogEntryFields.OperationTypeUpdate).First();

            Assert.IsNull(update.OrgValue);
            Assert.AreEqual("to do", update.NewValue);
        }
        public virtual void testDeleteOpLogEntry()
        {
            // given
            startTestProcess();

            // an op log instance is created
            taskService.ResolveTask(task.Id);
            IUserOperationLogEntry opLogEntry = historyService.CreateUserOperationLogQuery().First();

            // when the op log instance is deleted
            historyService.DeleteUserOperationLogEntry(opLogEntry.Id);

            // then it should be removed from the database
            Assert.AreEqual(0, historyService.CreateUserOperationLogQuery().Count());
        }
        public virtual void testCaseInstanceId()
        {
            // create new task
            task = taskService.NewTask();
            taskService.SaveTask(task);

            IQueryable <IUserOperationLogEntry> query = queryOperationDetails(UserOperationLogEntryFields.OperationTypeUpdate);

            Assert.AreEqual(0, query.Count());

            // set case instance id and save task
            task.CaseInstanceId = "aCaseInstanceId";
            taskService.SaveTask(task);

            Assert.AreEqual(1, query.Count());

            IUserOperationLogEntry entry = query.First();

            Assert.NotNull(entry);

            Assert.IsNull(entry.OrgValue);
            Assert.AreEqual("aCaseInstanceId", entry.NewValue);
            Assert.AreEqual(TaskEntity.CASE_INSTANCE_ID, entry.Property);

            // change case instance id and save task
            task.CaseInstanceId = "anotherCaseInstanceId";
            taskService.SaveTask(task);

            Assert.AreEqual(2, query.Count());

            IList <IUserOperationLogEntry> entries = query.ToList();

            Assert.AreEqual(2, entries.Count);

            foreach (IUserOperationLogEntry currentEntry in entries)
            {
                if (!currentEntry.Id.Equals(entry.Id))
                {
                    Assert.AreEqual("aCaseInstanceId", currentEntry.OrgValue);
                    Assert.AreEqual("anotherCaseInstanceId", currentEntry.NewValue);
                    Assert.AreEqual(TaskEntity.CASE_INSTANCE_ID, currentEntry.Property);
                }
            }
        }
        public virtual void testCreateAndCompleteTask()
        {
            startTestProcess();

            // expect: no entry for the task creation by process engine
            IQueryable <IUserOperationLogEntry> query = historyService.CreateUserOperationLogQuery();

            Assert.AreEqual(0, query.Count());

            completeTestProcess();

            // expect: one entry for the task completion
            query = queryOperationDetails(UserOperationLogEntryFields.OperationTypeComplete);
            Assert.AreEqual(1, query.Count());
            IUserOperationLogEntry complete = query.First();

            Assert.AreEqual(Permissions.Delete, complete.Property);
            Assert.True(bool.Parse(complete.NewValue));
        }
        public virtual void testSetOverridingPriorityCascadeToJobs()
        {
            // given a job definition and job
            runtimeService.StartProcessInstanceByKey("asyncTaskProcess");
            IJobDefinition jobDefinition = managementService.CreateJobDefinitionQuery().First();
            IJob           job           = managementService.CreateJobQuery().First();

            // when I set an overriding priority with cascade=true
            managementService.SetOverridingJobPriorityForJobDefinition(jobDefinition.Id, 42, true);

            // then there are two op log entries
            Assert.AreEqual(2, historyService.CreateUserOperationLogQuery().Count());

            // (1): One for the job definition priority
            IUserOperationLogEntry jobDefOpLogEntry = historyService.CreateUserOperationLogQuery(c => c.EntityType == EntityTypes.JobDefinition).First();

            Assert.NotNull(jobDefOpLogEntry);

            // (2): and another one for the job priorities
            IUserOperationLogEntry jobOpLogEntry = historyService.CreateUserOperationLogQuery(c => c.EntityType == EntityTypes.Job).First();

            Assert.NotNull(jobOpLogEntry);

            Assert.AreEqual("both entries should be part of the same operation", jobDefOpLogEntry.OperationId, jobOpLogEntry.OperationId);

            Assert.AreEqual(EntityTypes.Job, jobOpLogEntry.EntityType);
            Assert.IsNull("id should null because it is a bulk update operation", jobOpLogEntry.JobId);

            Assert.AreEqual(UserOperationLogEntryFields.OperationTypeSetPriority, jobOpLogEntry.OperationType);

            Assert.AreEqual("priority", jobOpLogEntry.Property);
            Assert.AreEqual("42", jobOpLogEntry.NewValue);
            Assert.IsNull("Original Value should be null because it is not known for bulk operations", jobOpLogEntry.OrgValue);

            Assert.AreEqual(USER_ID, jobOpLogEntry.UserId);

            // these properties should be there to narrow down the bulk update (like a SQL WHERE clasue)
            Assert.AreEqual(job.JobDefinitionId, jobOpLogEntry.JobDefinitionId);
            Assert.IsNull("an unspecified set of process instances was affected by the operation", jobOpLogEntry.ProcessInstanceId);
            Assert.AreEqual(job.ProcessDefinitionId, jobOpLogEntry.ProcessDefinitionId);
            Assert.AreEqual(job.ProcessDefinitionKey, jobOpLogEntry.ProcessDefinitionKey);
            Assert.AreEqual(DeploymentId, jobOpLogEntry.DeploymentId);
        }
        public virtual void testAssignTask()
        {
            startTestProcess();

            // then: assign the task
            taskService.SetAssignee(task.Id, "icke");

            // expect: one entry for the task assignment
            IQueryable <IUserOperationLogEntry> query = queryOperationDetails(UserOperationLogEntryFields.OperationTypeAssign);

            Assert.AreEqual(1, query.Count());

            // Assert: details
            IUserOperationLogEntry assign = query.First();

            Assert.AreEqual(TaskEntity.ASSIGNEE, assign.Property);
            Assert.AreEqual("icke", assign.NewValue);

            completeTestProcess();
        }
        public virtual void testChangeTaskOwner()
        {
            startTestProcess();

            // then: change the task owner
            taskService.SetOwner(task.Id, "icke");

            // expect: one entry for the owner change
            IQueryable <IUserOperationLogEntry> query = queryOperationDetails(UserOperationLogEntryFields.OperationTypeSetOwner);

            Assert.AreEqual(1, query.Count());

            // Assert: details
            IUserOperationLogEntry change = query.First();

            Assert.AreEqual(TaskEntity.OWNER, change.Property);
            Assert.AreEqual("icke", change.NewValue);

            completeTestProcess();
        }
        public virtual void testClaimTask()
        {
            startTestProcess();

            // then: claim a new the task
            taskService.Claim(task.Id, "icke");

            // expect: one entry for the claim
            IQueryable <IUserOperationLogEntry> query = queryOperationDetails(UserOperationLogEntryFields.OperationTypeClaim);

            Assert.AreEqual(1, query.Count());

            // Assert: details
            IUserOperationLogEntry claim = query.First();

            Assert.AreEqual(TaskEntity.ASSIGNEE, claim.Property);
            Assert.AreEqual("icke", claim.NewValue);

            completeTestProcess();
        }
        public virtual void testDeleteTask()
        {
            // given: a single task
            task = taskService.NewTask();
            taskService.SaveTask(task);

            // then: Delete the task
            taskService.DeleteTask(task.Id, "duplicated");

            // expect: one entry for the deletion
            IQueryable <IUserOperationLogEntry> query = queryOperationDetails(UserOperationLogEntryFields.OperationTypeDelete);

            Assert.AreEqual(1, query.Count());

            // Assert: details
            IUserOperationLogEntry Delete = query.First();

            Assert.AreEqual(Permissions.Delete, Delete.Property);
            Assert.IsFalse(bool.Parse(Delete.OrgValue));
            Assert.True(bool.Parse(Delete.NewValue));
        }
        public virtual void testSetPriority()
        {
            startTestProcess();

            // then: set the priority of the task to 10
            taskService.SetPriority(task.Id, 10);

            // expect: one entry for the priority update
            IQueryable <IUserOperationLogEntry> query = queryOperationDetails(UserOperationLogEntryFields.OperationTypeSetPriority);

            Assert.AreEqual(1, query.Count());

            // Assert: correct priority set
            IUserOperationLogEntry userOperationLogEntry = query.First();

            Assert.AreEqual(TaskEntity.PRIORITY, userOperationLogEntry.Property);
            // note: 50 is the default task priority
            Assert.AreEqual(50, int.Parse(userOperationLogEntry.OrgValue));
            Assert.AreEqual(10, int.Parse(userOperationLogEntry.NewValue));

            // move clock by 5 minutes
            DateTime date = DateTimeUtil.Now().AddMinutes(5);

            ClockUtil.CurrentTime = date;

            // then: set priority again
            taskService.SetPriority(task.Id, 75);

            // expect: one entry for the priority update
            query = queryOperationDetails(UserOperationLogEntryFields.OperationTypeSetPriority);
            Assert.AreEqual(2, query.Count());

            // Assert: correct priority set
            //userOperationLogEntry = query/*.OrderByTimestamp()*//*.Asc()*/.ToList()[1];
            Assert.AreEqual(TaskEntity.PRIORITY, userOperationLogEntry.Property);
            Assert.AreEqual(10, int.Parse(userOperationLogEntry.OrgValue));
            Assert.AreEqual(75, int.Parse(userOperationLogEntry.NewValue));
        }
Example #23
0
 public virtual void CheckDeleteUserOperationLog(IUserOperationLogEntry entry)
 {
     // tenant check is not available for user operation log
 }