|
@@ -68,6 +68,7 @@ class TestVectorLayerJoinBuffer : public QObject |
|
|
void testResolveReferences(); |
|
|
void testSignals(); |
|
|
void testChangeAttributeValues(); |
|
|
void testCollidingNameColumn(); |
|
|
|
|
|
private: |
|
|
QgsProject mProject; |
|
@@ -841,6 +842,54 @@ void TestVectorLayerJoinBuffer::testChangeAttributeValues() |
|
|
|
|
|
} |
|
|
|
|
|
// Check https://github.com/qgis/QGIS/issues/26652 |
|
|
void TestVectorLayerJoinBuffer::testCollidingNameColumn() |
|
|
{ |
|
|
mProject.clear(); |
|
|
QgsVectorLayer *vlA = new QgsVectorLayer( QStringLiteral( "Point?field=id_a:integer&field=name" ), QStringLiteral( "cacheA" ), QStringLiteral( "memory" ) ); |
|
|
QVERIFY( vlA->isValid() ); |
|
|
QgsVectorLayer *vlB = new QgsVectorLayer( QStringLiteral( "Point?field=id_b:integer&field=name&field=value_b" ), QStringLiteral( "cacheB" ), QStringLiteral( "memory" ) ); |
|
|
QVERIFY( vlB->isValid() ); |
|
|
mProject.addMapLayer( vlA ); |
|
|
mProject.addMapLayer( vlB ); |
|
|
|
|
|
QgsFeature fA1( vlA->dataProvider()->fields(), 1 ); |
|
|
fA1.setAttribute( QStringLiteral( "id_a" ), 1 ); |
|
|
fA1.setAttribute( QStringLiteral( "name" ), QStringLiteral( "name_a" ) ); |
|
|
|
|
|
vlA->dataProvider()->addFeatures( QgsFeatureList() << fA1 ); |
|
|
|
|
|
QgsVectorLayerJoinInfo joinInfo; |
|
|
joinInfo.setTargetFieldName( QStringLiteral( "id_a" ) ); |
|
|
joinInfo.setJoinLayer( vlB ); |
|
|
joinInfo.setJoinFieldName( QStringLiteral( "id_b" ) ); |
|
|
joinInfo.setPrefix( QStringLiteral( "" ) ); |
|
|
joinInfo.setEditable( true ); |
|
|
joinInfo.setUpsertOnEdit( true ); |
|
|
vlA->addJoin( joinInfo ); |
|
|
|
|
|
QgsFeatureIterator fi1 = vlA->getFeatures(); |
|
|
fi1.nextFeature( fA1 ); |
|
|
QCOMPARE( fA1.fields().names(), QStringList( {"id_a", "name", "value_b"} ) ); |
|
|
QCOMPARE( fA1.attribute( "id_a" ).toInt(), 1 ); |
|
|
QCOMPARE( fA1.attribute( "name" ).toString(), QStringLiteral( "name_a" ) ); |
|
|
QVERIFY( !fA1.attribute( "value_b" ).isValid() ); |
|
|
|
|
|
QgsFeature fB1( vlB->dataProvider()->fields(), 1 ); |
|
|
fB1.setAttribute( QStringLiteral( "id_b" ), 1 ); |
|
|
fB1.setAttribute( QStringLiteral( "name" ), QStringLiteral( "name_b" ) ); |
|
|
fB1.setAttribute( QStringLiteral( "value_b" ), QStringLiteral( "value_b" ) ); |
|
|
|
|
|
vlB->dataProvider()->addFeatures( QgsFeatureList() << fB1 ); |
|
|
|
|
|
QgsFeatureIterator fi2 = vlA->getFeatures(); |
|
|
fi2.nextFeature( fA1 ); |
|
|
QCOMPARE( fA1.fields().names(), QStringList( {"id_a", "name", "value_b"} ) ); |
|
|
QCOMPARE( fA1.attribute( "id_a" ).toInt(), 1 ); |
|
|
QCOMPARE( fA1.attribute( "name" ).toString(), QStringLiteral( "name_a" ) ); |
|
|
QCOMPARE( fA1.attribute( "value_b" ).toString(), QStringLiteral( "value_b" ) ); |
|
|
|
|
|
} |
|
|
|
|
|
QGSTEST_MAIN( TestVectorLayerJoinBuffer ) |
|
|
#include "testqgsvectorlayerjoinbuffer.moc" |
|
|