From a2914ff66c57f900d8c55c2b0d2cc1bb8ce9f222 Mon Sep 17 00:00:00 2001 From: Blottiere Paul Date: Fri, 18 Aug 2017 07:42:39 +0100 Subject: [PATCH] Add unit tests --- .../gui/testqgsrelationreferencewidget.cpp | 159 +++++++++++------- 1 file changed, 100 insertions(+), 59 deletions(-) diff --git a/tests/src/gui/testqgsrelationreferencewidget.cpp b/tests/src/gui/testqgsrelationreferencewidget.cpp index ee7425c2246..6d1b72f1377 100644 --- a/tests/src/gui/testqgsrelationreferencewidget.cpp +++ b/tests/src/gui/testqgsrelationreferencewidget.cpp @@ -39,6 +39,12 @@ class TestQgsRelationReferenceWidget : public QObject void cleanup(); // will be called after every testfunction. void testChainFilter(); + void testChainFilterRefreshed(); + + private: + std::unique_ptr mLayer1; + std::unique_ptr mLayer2; + std::unique_ptr mRelation; }; void TestQgsRelationReferenceWidget::initTestCase() @@ -55,6 +61,64 @@ void TestQgsRelationReferenceWidget::cleanupTestCase() void TestQgsRelationReferenceWidget::init() { + // create layer + mLayer1.reset( new QgsVectorLayer( QStringLiteral( "LineString?crs=epsg:3111&field=pk:int&field=fk:int" ), QStringLiteral( "vl1" ), QStringLiteral( "memory" ) ) ); + QgsProject::instance()->addMapLayer( mLayer1.get(), false, false ); + + mLayer2.reset( new QgsVectorLayer( QStringLiteral( "LineString?field=pk:int&field=material:string&field=diameter:int&field=raccord:string" ), QStringLiteral( "vl2" ), QStringLiteral( "memory" ) ) ); + QgsProject::instance()->addMapLayer( mLayer2.get(), false, false ); + + // create relation + mRelation.reset( new QgsRelation() ); + mRelation->setId( QStringLiteral( "vl1.vl2" ) ); + mRelation->setName( QStringLiteral( "vl1.vl2" ) ); + mRelation->setReferencingLayer( mLayer1->id() ); + mRelation->setReferencedLayer( mLayer2->id() ); + mRelation->addFieldPair( "fk", "pk" ); + QVERIFY( mRelation->isValid() ); + QgsProject::instance()->relationManager()->addRelation( *mRelation.get() ); + + // add features + QgsFeature ft0( mLayer1->fields() ); + ft0.setAttribute( QStringLiteral( "pk" ), 0 ); + ft0.setAttribute( QStringLiteral( "fk" ), 0 ); + mLayer1->startEditing(); + mLayer1->addFeature( ft0 ); + mLayer1->commitChanges(); + + QgsFeature ft1( mLayer1->fields() ); + ft1.setAttribute( QStringLiteral( "pk" ), 1 ); + ft1.setAttribute( QStringLiteral( "fk" ), 1 ); + mLayer1->startEditing(); + mLayer1->addFeature( ft1 ); + mLayer1->commitChanges(); + + QgsFeature ft2( mLayer2->fields() ); + ft2.setAttribute( QStringLiteral( "pk" ), 10 ); + ft2.setAttribute( QStringLiteral( "material" ), "iron" ); + ft2.setAttribute( QStringLiteral( "diameter" ), 120 ); + ft2.setAttribute( QStringLiteral( "raccord" ), "brides" ); + mLayer2->startEditing(); + mLayer2->addFeature( ft2 ); + mLayer2->commitChanges(); + + QgsFeature ft3( mLayer2->fields() ); + ft3.setAttribute( QStringLiteral( "pk" ), 11 ); + ft3.setAttribute( QStringLiteral( "material" ), "iron" ); + ft3.setAttribute( QStringLiteral( "diameter" ), 120 ); + ft3.setAttribute( QStringLiteral( "raccord" ), "sleeve" ); + mLayer2->startEditing(); + mLayer2->addFeature( ft3 ); + mLayer2->commitChanges(); + + QgsFeature ft4( mLayer2->fields() ); + ft4.setAttribute( QStringLiteral( "pk" ), 12 ); + ft4.setAttribute( QStringLiteral( "material" ), "steel" ); + ft4.setAttribute( QStringLiteral( "diameter" ), 120 ); + ft4.setAttribute( QStringLiteral( "raccord" ), "collar" ); + mLayer2->startEditing(); + mLayer2->addFeature( ft4 ); + mLayer2->commitChanges(); } void TestQgsRelationReferenceWidget::cleanup() @@ -63,71 +127,13 @@ void TestQgsRelationReferenceWidget::cleanup() void TestQgsRelationReferenceWidget::testChainFilter() { - // create layers - QgsVectorLayer vl1( QStringLiteral( "LineString?crs=epsg:3111&field=pk:int&field=fk:int" ), QStringLiteral( "vl1" ), QStringLiteral( "memory" ) ); - QgsVectorLayer vl2( QStringLiteral( "LineString?field=pk:int&field=material:string&field=diameter:int&field=raccord:string" ), QStringLiteral( "vl2" ), QStringLiteral( "memory" ) ); - QgsProject::instance()->addMapLayer( &vl1, false, false ); - QgsProject::instance()->addMapLayer( &vl2, false, false ); - - // create a relation between them - QgsRelation relation; - relation.setId( QStringLiteral( "vl1.vl2" ) ); - relation.setName( QStringLiteral( "vl1.vl2" ) ); - relation.setReferencingLayer( vl1.id() ); - relation.setReferencedLayer( vl2.id() ); - relation.addFieldPair( "fk", "pk" ); - QVERIFY( relation.isValid() ); - QgsProject::instance()->relationManager()->addRelation( relation ); - - // add features - QgsFeature ft0( vl1.fields() ); - ft0.setAttribute( QStringLiteral( "pk" ), 0 ); - ft0.setAttribute( QStringLiteral( "fk" ), 0 ); - vl1.startEditing(); - vl1.addFeature( ft0 ); - vl1.commitChanges(); - - QgsFeature ft1( vl1.fields() ); - ft1.setAttribute( QStringLiteral( "pk" ), 1 ); - ft1.setAttribute( QStringLiteral( "fk" ), 1 ); - vl1.startEditing(); - vl1.addFeature( ft1 ); - vl1.commitChanges(); - - QgsFeature ft2( vl2.fields() ); - ft2.setAttribute( QStringLiteral( "pk" ), 10 ); - ft2.setAttribute( QStringLiteral( "material" ), "iron" ); - ft2.setAttribute( QStringLiteral( "diameter" ), 120 ); - ft2.setAttribute( QStringLiteral( "raccord" ), "brides" ); - vl2.startEditing(); - vl2.addFeature( ft2 ); - vl2.commitChanges(); - - QgsFeature ft3( vl2.fields() ); - ft3.setAttribute( QStringLiteral( "pk" ), 11 ); - ft3.setAttribute( QStringLiteral( "material" ), "iron" ); - ft3.setAttribute( QStringLiteral( "diameter" ), 120 ); - ft3.setAttribute( QStringLiteral( "raccord" ), "sleeve" ); - vl2.startEditing(); - vl2.addFeature( ft3 ); - vl2.commitChanges(); - - QgsFeature ft4( vl2.fields() ); - ft4.setAttribute( QStringLiteral( "pk" ), 12 ); - ft4.setAttribute( QStringLiteral( "material" ), "steel" ); - ft4.setAttribute( QStringLiteral( "diameter" ), 120 ); - ft4.setAttribute( QStringLiteral( "raccord" ), "collar" ); - vl2.startEditing(); - vl2.addFeature( ft4 ); - vl2.commitChanges(); - // init a relation reference widget QStringList filterFields = { "material", "diameter", "raccord" }; QgsRelationReferenceWidget w( new QWidget() ); w.setChainFilters( true ); w.setFilterFields( filterFields ); - w.setRelation( relation, true ); + w.setRelation( *mRelation, true ); w.init(); // check default status for comboboxes @@ -181,5 +187,40 @@ void TestQgsRelationReferenceWidget::testChainFilter() QCOMPARE( w.mComboBox->count(), 4 ); } +void TestQgsRelationReferenceWidget::testChainFilterRefreshed() +{ + // init a relation reference widget + QStringList filterFields = { "material", "diameter", "raccord" }; + + QgsRelationReferenceWidget w( new QWidget() ); + w.setChainFilters( true ); + w.setFilterFields( filterFields ); + w.setRelation( *mRelation, true ); + w.init(); + + // check default status for comboboxes + QList cbs = w.mFilterComboBoxes; + QCOMPARE( cbs.count(), 3 ); + QCOMPARE( cbs[0]->currentText(), QString( "material" ) ); + QCOMPARE( cbs[1]->currentText(), QString( "diameter" ) ); + QCOMPARE( cbs[2]->currentText(), QString( "raccord" ) ); + + // update foreign key + w.setForeignKey( QVariant( 12 ) ); + QCOMPARE( cbs[0]->currentText(), QString( "steel" ) ); + QCOMPARE( cbs[1]->currentText(), QString( "120" ) ); + QCOMPARE( cbs[2]->currentText(), QString( "collar" ) ); + + w.setForeignKey( QVariant( 10 ) ); + QCOMPARE( cbs[0]->currentText(), QString( "iron" ) ); + QCOMPARE( cbs[1]->currentText(), QString( "120" ) ); + QCOMPARE( cbs[2]->currentText(), QString( "brides" ) ); + + w.setForeignKey( QVariant( 11 ) ); + QCOMPARE( cbs[0]->currentText(), QString( "iron" ) ); + QCOMPARE( cbs[1]->currentText(), QString( "120" ) ); + QCOMPARE( cbs[2]->currentText(), QString( "sleeve" ) ); +} + QGSTEST_MAIN( TestQgsRelationReferenceWidget ) #include "testqgsrelationreferencewidget.moc"