Skip to content

Commit d2315e4

Browse files
committed
Add unit tests
1 parent cb390d7 commit d2315e4

File tree

1 file changed

+85
-44
lines changed

1 file changed

+85
-44
lines changed

tests/src/gui/testqgsrelationreferencewidget.cpp

+85-44
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,12 @@ class TestQgsRelationReferenceWidget : public QObject
3737
void cleanup(); // will be called after every testfunction.
3838

3939
void testChainFilter();
40+
void testChainFilterRefreshed();
41+
42+
private:
43+
QgsVectorLayer* mLayer1;
44+
QgsVectorLayer* mLayer2;
45+
std::unique_ptr<QgsRelation> mRelation;
4046
};
4147

4248
void TestQgsRelationReferenceWidget::initTestCase()
@@ -53,79 +59,79 @@ void TestQgsRelationReferenceWidget::cleanupTestCase()
5359

5460
void TestQgsRelationReferenceWidget::init()
5561
{
56-
}
57-
58-
void TestQgsRelationReferenceWidget::cleanup()
59-
{
60-
}
61-
62-
void TestQgsRelationReferenceWidget::testChainFilter()
63-
{
64-
// create layers
65-
QgsVectorLayer vl1( QString( "LineString?crs=epsg:3111&field=pk:int&field=fk:int" ), QString( "vl1" ), QString( "memory" ) );
66-
QgsMapLayerRegistry::instance()->addMapLayer( &vl1 );
67-
QgsVectorLayer vl2( QString( "LineString?field=pk:int&field=material:string&field=diameter:int&field=raccord:string" ), QString( "vl2" ), QString( "memory" ) );
68-
QgsMapLayerRegistry::instance()->addMapLayer( &vl2 );
69-
70-
// create a relation between them
71-
QgsRelation relation;
72-
relation.setRelationId( QString( "vl1.vl2" ) );
73-
relation.setRelationName( QString( "vl1.vl2" ) );
74-
relation.setReferencingLayer( vl1.id() );
75-
relation.setReferencedLayer( vl2.id() );
76-
relation.addFieldPair( "fk", "pk" );
77-
QVERIFY( relation.isValid() );
78-
QgsProject::instance()->relationManager()->addRelation( relation );
62+
// create layer
63+
mLayer1 = new QgsVectorLayer( QString( "LineString?crs=epsg:3111&field=pk:int&field=fk:int" ), QString( "vl1" ), QString( "memory" ) );
64+
QgsMapLayerRegistry::instance()->addMapLayer( mLayer1 );
65+
66+
mLayer2 = new QgsVectorLayer( QString( "LineString?field=pk:int&field=material:string&field=diameter:int&field=raccord:string" ), QString( "vl2" ), QString( "memory" ) );
67+
QgsMapLayerRegistry::instance()->addMapLayer( mLayer2 );
68+
69+
// create relation
70+
mRelation.reset( new QgsRelation() );
71+
mRelation->setRelationId( QString( "vl1.vl2" ) );
72+
mRelation->setRelationName( QString( "vl1.vl2" ) );
73+
mRelation->setReferencingLayer( mLayer1->id() );
74+
mRelation->setReferencedLayer( mLayer2->id() );
75+
mRelation->addFieldPair( "fk", "pk" );
76+
QVERIFY( mRelation->isValid() );
77+
QgsProject::instance()->relationManager()->addRelation( *mRelation.get() );
7978

8079
// add features
81-
QgsFeature ft0( vl1.fields() );
80+
QgsFeature ft0( mLayer1->fields() );
8281
ft0.setAttribute( QString( "pk" ), 0 );
8382
ft0.setAttribute( QString( "fk" ), 0 );
84-
vl1.startEditing();
85-
vl1.addFeature( ft0 );
86-
vl1.commitChanges();
83+
mLayer1->startEditing();
84+
mLayer1->addFeature( ft0 );
85+
mLayer1->commitChanges();
8786

88-
QgsFeature ft1( vl1.fields() );
87+
QgsFeature ft1( mLayer1->fields() );
8988
ft1.setAttribute( QString( "pk" ), 1 );
9089
ft1.setAttribute( QString( "fk" ), 1 );
91-
vl1.startEditing();
92-
vl1.addFeature( ft1 );
93-
vl1.commitChanges();
90+
mLayer1->startEditing();
91+
mLayer1->addFeature( ft1 );
92+
mLayer1->commitChanges();
9493

95-
QgsFeature ft2( vl2.fields() );
94+
QgsFeature ft2( mLayer2->fields() );
9695
ft2.setAttribute( QString( "pk" ), 10 );
9796
ft2.setAttribute( QString( "material" ), "iron" );
9897
ft2.setAttribute( QString( "diameter" ), 120 );
9998
ft2.setAttribute( QString( "raccord" ), "brides" );
100-
vl2.startEditing();
101-
vl2.addFeature( ft2 );
102-
vl2.commitChanges();
99+
mLayer2->startEditing();
100+
mLayer2->addFeature( ft2 );
101+
mLayer2->commitChanges();
103102

104-
QgsFeature ft3( vl2.fields() );
103+
QgsFeature ft3( mLayer2->fields() );
105104
ft3.setAttribute( QString( "pk" ), 11 );
106105
ft3.setAttribute( QString( "material" ), "iron" );
107106
ft3.setAttribute( QString( "diameter" ), 120 );
108107
ft3.setAttribute( QString( "raccord" ), "sleeve" );
109-
vl2.startEditing();
110-
vl2.addFeature( ft3 );
111-
vl2.commitChanges();
108+
mLayer2->startEditing();
109+
mLayer2->addFeature( ft3 );
110+
mLayer2->commitChanges();
112111

113-
QgsFeature ft4( vl2.fields() );
112+
QgsFeature ft4( mLayer2->fields() );
114113
ft4.setAttribute( QString( "pk" ), 12 );
115114
ft4.setAttribute( QString( "material" ), "steel" );
116115
ft4.setAttribute( QString( "diameter" ), 120 );
117116
ft4.setAttribute( QString( "raccord" ), "collar" );
118-
vl2.startEditing();
119-
vl2.addFeature( ft4 );
120-
vl2.commitChanges();
117+
mLayer2->startEditing();
118+
mLayer2->addFeature( ft4 );
119+
mLayer2->commitChanges();
120+
}
121121

122+
void TestQgsRelationReferenceWidget::cleanup()
123+
{
124+
}
125+
126+
void TestQgsRelationReferenceWidget::testChainFilter()
127+
{
122128
// init a relation reference widget
123129
QStringList filterFields = { "material", "diameter", "raccord" };
124130

125131
QgsRelationReferenceWidget w( new QWidget() );
126132
w.setChainFilters( true );
127133
w.setFilterFields( filterFields );
128-
w.setRelation( relation, true );
134+
w.setRelation( *mRelation, true );
129135
w.init();
130136

131137
// check default status for comboboxes
@@ -179,5 +185,40 @@ void TestQgsRelationReferenceWidget::testChainFilter()
179185
QCOMPARE( w.mComboBox->count(), 4 );
180186
}
181187

188+
void TestQgsRelationReferenceWidget::testChainFilterRefreshed()
189+
{
190+
// init a relation reference widget
191+
QStringList filterFields = { "material", "diameter", "raccord" };
192+
193+
QgsRelationReferenceWidget w( new QWidget() );
194+
w.setChainFilters( true );
195+
w.setFilterFields( filterFields );
196+
w.setRelation( *mRelation, true );
197+
w.init();
198+
199+
// check default status for comboboxes
200+
QList<QComboBox *> cbs = w.mFilterComboBoxes;
201+
QCOMPARE( cbs.count(), 3 );
202+
QCOMPARE( cbs[0]->currentText(), QString( "material" ) );
203+
QCOMPARE( cbs[1]->currentText(), QString( "diameter" ) );
204+
QCOMPARE( cbs[2]->currentText(), QString( "raccord" ) );
205+
206+
// update foreign key
207+
w.setForeignKey( QVariant( 12 ) );
208+
QCOMPARE( cbs[0]->currentText(), QString( "steel" ) );
209+
QCOMPARE( cbs[1]->currentText(), QString( "120" ) );
210+
QCOMPARE( cbs[2]->currentText(), QString( "collar" ) );
211+
212+
w.setForeignKey( QVariant( 10 ) );
213+
QCOMPARE( cbs[0]->currentText(), QString( "iron" ) );
214+
QCOMPARE( cbs[1]->currentText(), QString( "120" ) );
215+
QCOMPARE( cbs[2]->currentText(), QString( "brides" ) );
216+
217+
w.setForeignKey( QVariant( 11 ) );
218+
QCOMPARE( cbs[0]->currentText(), QString( "iron" ) );
219+
QCOMPARE( cbs[1]->currentText(), QString( "120" ) );
220+
QCOMPARE( cbs[2]->currentText(), QString( "sleeve" ) );
221+
}
222+
182223
QTEST_MAIN( TestQgsRelationReferenceWidget )
183224
#include "testqgsrelationreferencewidget.moc"

0 commit comments

Comments
 (0)