Add support for populating objects in multiple nested lists
This commit is contained in:
@@ -38,11 +38,15 @@ message Test {
|
|||||||
}
|
}
|
||||||
|
|
||||||
message ReferenceMessage {
|
message ReferenceMessage {
|
||||||
string test = 1;
|
repeated DoubleNestedMessage test = 1;
|
||||||
Test.NestedMessage nested_message = 2;
|
Test.NestedMessage nested_message = 2;
|
||||||
EnumTest enum_test = 3;
|
EnumTest enum_test = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message DoubleNestedMessage {
|
||||||
|
string test = 1;
|
||||||
|
}
|
||||||
|
|
||||||
enum EnumTest {
|
enum EnumTest {
|
||||||
Hello = 0;
|
Hello = 0;
|
||||||
}
|
}
|
||||||
@@ -59,6 +63,7 @@ describe('TestService', () => {
|
|||||||
service = TestBed.inject(ProtoDefinitionService);
|
service = TestBed.inject(ProtoDefinitionService);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// TODO:c This needs to be split up to test one feature/definition per test
|
||||||
it('should convert parsed protobuf correctly', async () => {
|
it('should convert parsed protobuf correctly', async () => {
|
||||||
const testMessages = await service.parseAllDefinitions([
|
const testMessages = await service.parseAllDefinitions([
|
||||||
new File(
|
new File(
|
||||||
@@ -97,9 +102,18 @@ describe('TestService', () => {
|
|||||||
expect(referenceMessage.messageDefinition.name).toBe('ReferenceMessage');
|
expect(referenceMessage.messageDefinition.name).toBe('ReferenceMessage');
|
||||||
const nestedReferenceMessage = referenceMessage.messageDefinition.values[0];
|
const nestedReferenceMessage = referenceMessage.messageDefinition.values[0];
|
||||||
expect(nestedReferenceMessage.configuration.type).toBe(
|
expect(nestedReferenceMessage.configuration.type).toBe(
|
||||||
MessageTypeEnum.String
|
MessageTypeEnum.List
|
||||||
);
|
);
|
||||||
expect(nestedReferenceMessage.name).toBe('test');
|
expect(nestedReferenceMessage.name).toBe('test');
|
||||||
|
const doubleNestedListMessage =
|
||||||
|
nestedReferenceMessage.configuration as ListMessage;
|
||||||
|
expect(doubleNestedListMessage.subConfiguration.type).toBe(
|
||||||
|
MessageTypeEnum.Object
|
||||||
|
);
|
||||||
|
expect(
|
||||||
|
(doubleNestedListMessage.subConfiguration as ObjectMessage)
|
||||||
|
.messageDefinition.values.length
|
||||||
|
).toBe(1);
|
||||||
const parentNestedMessage = referenceMessage.messageDefinition.values[1];
|
const parentNestedMessage = referenceMessage.messageDefinition.values[1];
|
||||||
expect(parentNestedMessage.configuration.type).toBe(MessageTypeEnum.Object);
|
expect(parentNestedMessage.configuration.type).toBe(MessageTypeEnum.Object);
|
||||||
expect(parentNestedMessage.name).toBe('nestedMessage');
|
expect(parentNestedMessage.name).toBe('nestedMessage');
|
||||||
|
|||||||
@@ -302,9 +302,27 @@ export class ProtoDefinitionService {
|
|||||||
objectMessage.messageDefinition = {
|
objectMessage.messageDefinition = {
|
||||||
name: objectMessage.messageDefinition.name,
|
name: objectMessage.messageDefinition.name,
|
||||||
values: message.values.map((value) => {
|
values: message.values.map((value) => {
|
||||||
|
let configuration: MessageConfiguration | null = null;
|
||||||
if (value.configuration.type === MessageTypeEnum.Object) {
|
if (value.configuration.type === MessageTypeEnum.Object) {
|
||||||
|
configuration = value.configuration;
|
||||||
|
} else if (value.configuration.type === MessageTypeEnum.List) {
|
||||||
|
const listConfiguration = value.configuration as ListMessage;
|
||||||
|
if (
|
||||||
|
listConfiguration.subConfiguration.type === MessageTypeEnum.Object
|
||||||
|
) {
|
||||||
|
configuration = listConfiguration.subConfiguration;
|
||||||
|
}
|
||||||
|
} else if (value.configuration.type === MessageTypeEnum.Map) {
|
||||||
|
const mapConfiguration = value.configuration as MapMessage;
|
||||||
|
if (
|
||||||
|
mapConfiguration.valueConfiguration.type === MessageTypeEnum.Object
|
||||||
|
) {
|
||||||
|
configuration = mapConfiguration.valueConfiguration;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (configuration) {
|
||||||
this.populateNestedObject(
|
this.populateNestedObject(
|
||||||
value.configuration as ObjectMessage,
|
configuration as ObjectMessage,
|
||||||
message.packageName!,
|
message.packageName!,
|
||||||
availableMessages
|
availableMessages
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user