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

View File

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