@@ -37,6 +37,12 @@ class TestQgsRelationReferenceWidget : public QObject
37
37
void cleanup (); // will be called after every testfunction.
38
38
39
39
void testChainFilter ();
40
+ void testChainFilterRefreshed ();
41
+
42
+ private:
43
+ QgsVectorLayer* mLayer1 ;
44
+ QgsVectorLayer* mLayer2 ;
45
+ std::unique_ptr<QgsRelation> mRelation ;
40
46
};
41
47
42
48
void TestQgsRelationReferenceWidget::initTestCase ()
@@ -53,79 +59,79 @@ void TestQgsRelationReferenceWidget::cleanupTestCase()
53
59
54
60
void TestQgsRelationReferenceWidget::init ()
55
61
{
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 () );
79
78
80
79
// add features
81
- QgsFeature ft0 ( vl1. fields () );
80
+ QgsFeature ft0 ( mLayer1 -> fields () );
82
81
ft0.setAttribute ( QString ( " pk" ), 0 );
83
82
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 ();
87
86
88
- QgsFeature ft1 ( vl1. fields () );
87
+ QgsFeature ft1 ( mLayer1 -> fields () );
89
88
ft1.setAttribute ( QString ( " pk" ), 1 );
90
89
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 ();
94
93
95
- QgsFeature ft2 ( vl2. fields () );
94
+ QgsFeature ft2 ( mLayer2 -> fields () );
96
95
ft2.setAttribute ( QString ( " pk" ), 10 );
97
96
ft2.setAttribute ( QString ( " material" ), " iron" );
98
97
ft2.setAttribute ( QString ( " diameter" ), 120 );
99
98
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 ();
103
102
104
- QgsFeature ft3 ( vl2. fields () );
103
+ QgsFeature ft3 ( mLayer2 -> fields () );
105
104
ft3.setAttribute ( QString ( " pk" ), 11 );
106
105
ft3.setAttribute ( QString ( " material" ), " iron" );
107
106
ft3.setAttribute ( QString ( " diameter" ), 120 );
108
107
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 ();
112
111
113
- QgsFeature ft4 ( vl2. fields () );
112
+ QgsFeature ft4 ( mLayer2 -> fields () );
114
113
ft4.setAttribute ( QString ( " pk" ), 12 );
115
114
ft4.setAttribute ( QString ( " material" ), " steel" );
116
115
ft4.setAttribute ( QString ( " diameter" ), 120 );
117
116
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
+ }
121
121
122
+ void TestQgsRelationReferenceWidget::cleanup ()
123
+ {
124
+ }
125
+
126
+ void TestQgsRelationReferenceWidget::testChainFilter ()
127
+ {
122
128
// init a relation reference widget
123
129
QStringList filterFields = { " material" , " diameter" , " raccord" };
124
130
125
131
QgsRelationReferenceWidget w ( new QWidget () );
126
132
w.setChainFilters ( true );
127
133
w.setFilterFields ( filterFields );
128
- w.setRelation ( relation , true );
134
+ w.setRelation ( * mRelation , true );
129
135
w.init ();
130
136
131
137
// check default status for comboboxes
@@ -179,5 +185,40 @@ void TestQgsRelationReferenceWidget::testChainFilter()
179
185
QCOMPARE ( w.mComboBox ->count (), 4 );
180
186
}
181
187
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
+
182
223
QTEST_MAIN ( TestQgsRelationReferenceWidget )
183
224
#include " testqgsrelationreferencewidget.moc"
0 commit comments