Add support for populating objects in multiple nested lists

This commit is contained in:
2024-08-24 17:02:15 +09:30
parent dd6a4536c6
commit db9e63bac4
2 changed files with 35 additions and 3 deletions

View File

@@ -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');

View File

@@ -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
); );