Add support for populating objects in multiple nested lists
This commit is contained in:
@@ -38,11 +38,15 @@ message Test {
|
||||
}
|
||||
|
||||
message ReferenceMessage {
|
||||
string test = 1;
|
||||
repeated DoubleNestedMessage test = 1;
|
||||
Test.NestedMessage nested_message = 2;
|
||||
EnumTest enum_test = 3;
|
||||
}
|
||||
|
||||
message DoubleNestedMessage {
|
||||
string test = 1;
|
||||
}
|
||||
|
||||
enum EnumTest {
|
||||
Hello = 0;
|
||||
}
|
||||
@@ -59,6 +63,7 @@ describe('TestService', () => {
|
||||
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 () => {
|
||||
const testMessages = await service.parseAllDefinitions([
|
||||
new File(
|
||||
@@ -97,9 +102,18 @@ describe('TestService', () => {
|
||||
expect(referenceMessage.messageDefinition.name).toBe('ReferenceMessage');
|
||||
const nestedReferenceMessage = referenceMessage.messageDefinition.values[0];
|
||||
expect(nestedReferenceMessage.configuration.type).toBe(
|
||||
MessageTypeEnum.String
|
||||
MessageTypeEnum.List
|
||||
);
|
||||
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];
|
||||
expect(parentNestedMessage.configuration.type).toBe(MessageTypeEnum.Object);
|
||||
expect(parentNestedMessage.name).toBe('nestedMessage');
|
||||
|
||||
@@ -302,9 +302,27 @@ export class ProtoDefinitionService {
|
||||
objectMessage.messageDefinition = {
|
||||
name: objectMessage.messageDefinition.name,
|
||||
values: message.values.map((value) => {
|
||||
let configuration: MessageConfiguration | null = null;
|
||||
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(
|
||||
value.configuration as ObjectMessage,
|
||||
configuration as ObjectMessage,
|
||||
message.packageName!,
|
||||
availableMessages
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user