Skip to content

Commit

Permalink
Merge pull request #357 from camunda-community-hub/341-user-task
Browse files Browse the repository at this point in the history
feat: Add user task record
  • Loading branch information
saig0 authored May 6, 2024
2 parents 1583f2c + cacb351 commit d565f8e
Show file tree
Hide file tree
Showing 3 changed files with 108 additions and 0 deletions.
25 changes: 25 additions & 0 deletions src/main/java/io/zeebe/exporter/proto/RecordTransformer.java
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ public final class RecordTransformer {
TRANSFORMERS.put(ValueType.SIGNAL_SUBSCRIPTION, RecordTransformer::toSignalSubscriptionRecord);
TRANSFORMERS.put(ValueType.FORM, RecordTransformer::toFormRecord);
TRANSFORMERS.put(ValueType.RESOURCE_DELETION, RecordTransformer::toResourceDeletionRecord);
TRANSFORMERS.put(ValueType.USER_TASK, RecordTransformer::toUserTaskRecord);

VALUE_TYPE_MAPPING.put(ValueType.DEPLOYMENT, RecordMetadata.ValueType.DEPLOYMENT);
VALUE_TYPE_MAPPING.put(
Expand Down Expand Up @@ -144,6 +145,7 @@ public final class RecordTransformer {
VALUE_TYPE_MAPPING.put(
ValueType.COMMAND_DISTRIBUTION, RecordMetadata.ValueType.COMMAND_DISTRIBUTION);
VALUE_TYPE_MAPPING.put(ValueType.FORM, RecordMetadata.ValueType.FORM);
VALUE_TYPE_MAPPING.put(ValueType.USER_TASK, RecordMetadata.ValueType.USER_TASK);
}

private RecordTransformer() {}
Expand Down Expand Up @@ -787,6 +789,29 @@ private static Schema.ResourceDeletionRecord toResourceDeletionRecord(Record<Res
.build();
}

private static Schema.UserTaskRecord toUserTaskRecord(Record<UserTaskRecordValue> record) {
final var value = record.getValue();

return Schema.UserTaskRecord.newBuilder()
.setUserTaskKey(value.getUserTaskKey())
.setAssignee(value.getAssignee())
.setCandidateGroups(value.getCandidateGroups())
.setCandidateUsers(value.getCandidateUsers())
.setDueDate(value.getDueDate())
.setFollowUpDate(value.getFollowUpDate())
.setFormKey(value.getFormKey())
.setVariables(toStruct(value.getVariables()))
.setBpmnProcessId(value.getBpmnProcessId())
.setProcessDefinitionVersion(value.getProcessDefinitionVersion())
.setProcessDefinitionKey(value.getProcessDefinitionKey())
.setProcessInstanceKey(value.getProcessInstanceKey())
.setElementId(value.getElementId())
.setElementInstanceKey(value.getElementInstanceKey())
.setMetadata(toMetadata(record))
.setTenantId(toTenantId(value))
.build();
}

private static Struct toStruct(Map<?, ?> map) {
final Struct.Builder builder = Struct.newBuilder();

Expand Down
19 changes: 19 additions & 0 deletions src/main/proto/schema.proto
Original file line number Diff line number Diff line change
Expand Up @@ -490,4 +490,23 @@ message ResourceDeletionRecord {
RecordMetadata metadata = 1;
int64 resourceKey = 2;
string tenantId = 3;
}

message UserTaskRecord {
RecordMetadata metadata = 1;
int64 userTaskKey = 2;
string assignee = 3;
string candidateGroups = 4;
string candidateUsers = 5;
string dueDate = 6;
string followUpDate = 7;
int64 formKey = 8;
google.protobuf.Struct variables = 9;
string bpmnProcessId = 10;
int32 processDefinitionVersion = 11;
int64 processDefinitionKey = 12;
int64 processInstanceKey = 13;
string elementId = 14;
int64 elementInstanceKey = 15;
string tenantId = 16;
}
64 changes: 64 additions & 0 deletions src/test/java/io/zeebe/exporter/proto/RecordTransformTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -934,6 +934,50 @@ public void shouldTransformResourceDeletionRecord() {
assertThat(transformedRecord.getTenantId()).isEqualTo(recordValue.getTenantId());
}

@Test
public void shouldTransformUserTaskRecord() {
// given
final var recordValue = mockUserTaskRecordValue();
final Record<UserTaskRecordValue> mockedRecord =
mockRecord(recordValue, ValueType.USER_TASK, UserTaskIntent.CREATED);

// when
final var transformedRecord =
(Schema.UserTaskRecord) RecordTransformer.toProtobufMessage(mockedRecord);

// then
assertMetadata(transformedRecord.getMetadata(), "USER_TASK", "CREATED");

assertThat(transformedRecord.getUserTaskKey())
.isEqualTo(recordValue.getUserTaskKey());
assertThat(transformedRecord.getAssignee())
.isEqualTo(recordValue.getAssignee());
assertThat(transformedRecord.getCandidateGroups())
.isEqualTo(recordValue.getCandidateGroups());
assertThat(transformedRecord.getCandidateUsers())
.isEqualTo(recordValue.getCandidateUsers());
assertThat(transformedRecord.getDueDate())
.isEqualTo(recordValue.getDueDate());
assertThat(transformedRecord.getFollowUpDate())
.isEqualTo(recordValue.getFollowUpDate());
assertThat(transformedRecord.getFormKey())
.isEqualTo(recordValue.getFormKey());
assertThat(transformedRecord.getBpmnProcessId())
.isEqualTo(recordValue.getBpmnProcessId());
assertThat(transformedRecord.getProcessDefinitionVersion())
.isEqualTo(recordValue.getProcessDefinitionVersion());
assertThat(transformedRecord.getProcessDefinitionKey())
.isEqualTo(recordValue.getProcessDefinitionKey());
assertThat(transformedRecord.getProcessInstanceKey())
.isEqualTo(recordValue.getProcessInstanceKey());
assertThat(transformedRecord.getElementId())
.isEqualTo(recordValue.getElementId());
assertThat(transformedRecord.getElementInstanceKey())
.isEqualTo(recordValue.getElementInstanceKey());
assertThat(transformedRecord.getTenantId()).isEqualTo(recordValue.getTenantId());
assertVariables(transformedRecord.getVariables());
}

private void assertEvaluatedDecision(
final Schema.DecisionEvaluationRecord.EvaluatedDecision transformedRecord,
final EvaluatedDecisionValue recordValue) {
Expand Down Expand Up @@ -1383,6 +1427,26 @@ private ResourceDeletionRecordValue mockResourceDeletionRecordValue() {
when(value.getTenantId()).thenReturn(TENANT_ID);
return value;
}
private UserTaskRecordValue mockUserTaskRecordValue() {
final var value = mock(UserTaskRecordValue.class);
when(value.getUserTaskKey()).thenReturn(1L);
when(value.getAssignee()).thenReturn("assignee");
when(value.getCandidateGroups()).thenReturn("candidate-groups");
when(value.getCandidateUsers()).thenReturn("candidate-users");
when(value.getDueDate()).thenReturn("2024-04-01T12:00:00Z");
when(value.getFollowUpDate()).thenReturn("2024-04-02T12:00:00Z");
when(value.getFormKey()).thenReturn(2L);
when(value.getVariables()).thenReturn(VARIABLES);
when(value.getBpmnProcessId()).thenReturn("bpmn-process-id");
when(value.getProcessDefinitionVersion()).thenReturn(3);
when(value.getProcessDefinitionKey()).thenReturn(4L);
when(value.getProcessInstanceKey()).thenReturn(5L);
when(value.getElementId()).thenReturn("element-id");
when(value.getElementInstanceKey()).thenReturn(6L);
when(value.getTenantId()).thenReturn(TENANT_ID);
return value;
}


private void assertVariables(final Struct payload) {
assertThat(payload.getFieldsCount()).isEqualTo(1);
Expand Down

0 comments on commit d565f8e

Please sign in to comment.