1212import com .intellij .psi .PsiRecordComponent ;
1313
1414import static org .assertj .core .api .Assertions .assertThat ;
15+ import static org .mapstruct .intellij .testutil .TestUtils .createParameter ;
1516import static org .mapstruct .intellij .testutil .TestUtils .createVariable ;
1617
1718/**
@@ -57,7 +58,7 @@ private void assertCarDtoRecordAutoComplete() {
5758 createVariable ( "make" , "String" ),
5859 createVariable ( "seatCount" , "int" ),
5960 createVariable ( "manufacturingYear" , "String" ),
60- createVariable ( "myDriver" , "PersonDto " ),
61+ createVariable ( "myDriver" , "PersonDtoRecord " ),
6162 createVariable ( "passengers" , "List<PersonDto>" ),
6263 createVariable ( "price" , "Long" ),
6364 createVariable ( "category" , "String" ),
@@ -96,12 +97,14 @@ private void assertCarRecordAutoComplete() {
9697
9798 public void testCarMapperReturnTargetCarDtoRecord () {
9899 myFixture .copyFileToProject ( "CarDtoRecord.java" , "org/example/dto/CarDtoRecord.java" );
100+ myFixture .copyFileToProject ( "PersonDtoRecord.java" , "org/example/dto/PersonDtoRecord.java" );
99101 configureByTestName ();
100102 assertCarDtoRecordAutoComplete ();
101103 }
102104
103105 public void testTargetPropertyReferencesRecordComponent () {
104106 myFixture .copyFileToProject ( "CarDtoRecord.java" , "org/example/dto/CarDtoRecord.java" );
107+ myFixture .copyFileToProject ( "PersonDtoRecord.java" , "org/example/dto/PersonDtoRecord.java" );
105108 myFixture .configureByFile ( "CarMapperReferenceRecordTargetProperty.java" );
106109 PsiElement reference = myFixture .getElementAtCaret ();
107110 assertThat ( reference )
@@ -112,6 +115,25 @@ public void testTargetPropertyReferencesRecordComponent() {
112115 } );
113116 }
114117
118+ public void testNestedSecondLevelAutoCompleteRecordTargetProperty () {
119+ myFixture .copyFileToProject ( "CarDtoRecord.java" , "org/example/dto/CarDtoRecord.java" );
120+ myFixture .copyFileToProject ( "PersonDtoRecord.java" , "org/example/dto/PersonDtoRecord.java" );
121+ configureByTestName ();
122+ assertThat ( myItems )
123+ .extracting ( LookupElement ::getLookupString )
124+ .containsExactlyInAnyOrder (
125+ "name"
126+ );
127+
128+ assertThat ( myItems )
129+ .extracting ( LookupElementPresentation ::renderElement )
130+ .usingRecursiveFieldByFieldElementComparator ()
131+ .usingElementComparatorIgnoringFields ( "myIcon" , "myTail" )
132+ .containsExactlyInAnyOrder (
133+ createParameter ( "name" , "String" )
134+ );
135+ }
136+
115137 public void testCarMapperSimpleSingleSourceCarRecord () {
116138 myFixture .copyFileToProject ( "CarRecord.java" , "org/example/dto/CarRecord.java" );
117139 configureByTestName ();
@@ -129,4 +151,22 @@ public void testSourcePropertyReferencesRecordComponent() {
129151 assertThat ( recordComponent .getType ().getPresentableText () ).isEqualTo ( "int" );
130152 } );
131153 }
154+
155+ public void testNestedSecondLevelAutoCompleteRecordSourceProperty () {
156+ myFixture .copyFileToProject ( "CarDtoRecord.java" , "org/example/dto/CarDtoRecord.java" );
157+ myFixture .copyFileToProject ( "PersonDtoRecord.java" , "org/example/dto/PersonDtoRecord.java" );
158+ configureByTestName ();
159+ assertThat ( myItems )
160+ .extracting ( LookupElement ::getLookupString )
161+ .containsExactlyInAnyOrder (
162+ "name"
163+ );
164+
165+ assertThat ( myItems )
166+ .extracting ( LookupElementPresentation ::renderElement )
167+ .usingRecursiveFieldByFieldElementComparator ()
168+ .containsExactlyInAnyOrder (
169+ createVariable ( "name" , "String" )
170+ );
171+ }
132172}
0 commit comments