@@ -39,6 +39,12 @@ class TestQgsRelationReferenceWidget : public QObject
39
39
void cleanup (); // will be called after every testfunction.
40
40
41
41
void testChainFilter ();
42
+ void testChainFilterRefreshed ();
43
+
44
+ private:
45
+ std::unique_ptr<QgsVectorLayer> mLayer1 ;
46
+ std::unique_ptr<QgsVectorLayer> mLayer2 ;
47
+ std::unique_ptr<QgsRelation> mRelation ;
42
48
};
43
49
44
50
void TestQgsRelationReferenceWidget::initTestCase ()
@@ -55,79 +61,79 @@ void TestQgsRelationReferenceWidget::cleanupTestCase()
55
61
56
62
void TestQgsRelationReferenceWidget::init ()
57
63
{
58
- }
59
-
60
- void TestQgsRelationReferenceWidget::cleanup ()
61
- {
62
- }
63
-
64
- void TestQgsRelationReferenceWidget::testChainFilter ()
65
- {
66
- // create layers
67
- QgsVectorLayer vl1 ( QStringLiteral ( " LineString?crs=epsg:3111&field=pk:int&field=fk:int" ), QStringLiteral ( " vl1" ), QStringLiteral ( " memory" ) );
68
- QgsVectorLayer vl2 ( QStringLiteral ( " LineString?field=pk:int&field=material:string&field=diameter:int&field=raccord:string" ), QStringLiteral ( " vl2" ), QStringLiteral ( " memory" ) );
69
- QgsProject::instance ()->addMapLayer ( &vl1, false , false );
70
- QgsProject::instance ()->addMapLayer ( &vl2, false , false );
71
-
72
- // create a relation between them
73
- QgsRelation relation ;
74
- relation .setId ( QStringLiteral ( " vl1.vl2" ) );
75
- relation .setName ( QStringLiteral ( " vl1.vl2" ) );
76
- relation .setReferencingLayer ( vl1.id () );
77
- relation .setReferencedLayer ( vl2.id () );
78
- relation .addFieldPair ( " fk" , " pk" );
79
- QVERIFY ( relation .isValid () );
80
- QgsProject::instance ()->relationManager ()->addRelation ( relation );
64
+ // create layer
65
+ mLayer1 .reset ( new QgsVectorLayer ( QStringLiteral ( " LineString?crs=epsg:3111&field=pk:int&field=fk:int" ), QStringLiteral ( " vl1" ), QStringLiteral ( " memory" ) ) );
66
+ QgsProject::instance ()->addMapLayer ( mLayer1 .get (), false , false );
67
+
68
+ mLayer2 .reset ( new QgsVectorLayer ( QStringLiteral ( " LineString?field=pk:int&field=material:string&field=diameter:int&field=raccord:string" ), QStringLiteral ( " vl2" ), QStringLiteral ( " memory" ) ) );
69
+ QgsProject::instance ()->addMapLayer ( mLayer2 .get (), false , false );
70
+
71
+ // create relation
72
+ mRelation .reset ( new QgsRelation () );
73
+ mRelation ->setId ( QStringLiteral ( " vl1.vl2" ) );
74
+ mRelation ->setName ( QStringLiteral ( " vl1.vl2" ) );
75
+ mRelation ->setReferencingLayer ( mLayer1 ->id () );
76
+ mRelation ->setReferencedLayer ( mLayer2 ->id () );
77
+ mRelation ->addFieldPair ( " fk" , " pk" );
78
+ QVERIFY ( mRelation ->isValid () );
79
+ QgsProject::instance ()->relationManager ()->addRelation ( *mRelation .get () );
81
80
82
81
// add features
83
- QgsFeature ft0 ( vl1. fields () );
82
+ QgsFeature ft0 ( mLayer1 -> fields () );
84
83
ft0.setAttribute ( QStringLiteral ( " pk" ), 0 );
85
84
ft0.setAttribute ( QStringLiteral ( " fk" ), 0 );
86
- vl1. startEditing ();
87
- vl1. addFeature ( ft0 );
88
- vl1. commitChanges ();
85
+ mLayer1 -> startEditing ();
86
+ mLayer1 -> addFeature ( ft0 );
87
+ mLayer1 -> commitChanges ();
89
88
90
- QgsFeature ft1 ( vl1. fields () );
89
+ QgsFeature ft1 ( mLayer1 -> fields () );
91
90
ft1.setAttribute ( QStringLiteral ( " pk" ), 1 );
92
91
ft1.setAttribute ( QStringLiteral ( " fk" ), 1 );
93
- vl1. startEditing ();
94
- vl1. addFeature ( ft1 );
95
- vl1. commitChanges ();
92
+ mLayer1 -> startEditing ();
93
+ mLayer1 -> addFeature ( ft1 );
94
+ mLayer1 -> commitChanges ();
96
95
97
- QgsFeature ft2 ( vl2. fields () );
96
+ QgsFeature ft2 ( mLayer2 -> fields () );
98
97
ft2.setAttribute ( QStringLiteral ( " pk" ), 10 );
99
98
ft2.setAttribute ( QStringLiteral ( " material" ), " iron" );
100
99
ft2.setAttribute ( QStringLiteral ( " diameter" ), 120 );
101
100
ft2.setAttribute ( QStringLiteral ( " raccord" ), " brides" );
102
- vl2. startEditing ();
103
- vl2. addFeature ( ft2 );
104
- vl2. commitChanges ();
101
+ mLayer2 -> startEditing ();
102
+ mLayer2 -> addFeature ( ft2 );
103
+ mLayer2 -> commitChanges ();
105
104
106
- QgsFeature ft3 ( vl2. fields () );
105
+ QgsFeature ft3 ( mLayer2 -> fields () );
107
106
ft3.setAttribute ( QStringLiteral ( " pk" ), 11 );
108
107
ft3.setAttribute ( QStringLiteral ( " material" ), " iron" );
109
108
ft3.setAttribute ( QStringLiteral ( " diameter" ), 120 );
110
109
ft3.setAttribute ( QStringLiteral ( " raccord" ), " sleeve" );
111
- vl2. startEditing ();
112
- vl2. addFeature ( ft3 );
113
- vl2. commitChanges ();
110
+ mLayer2 -> startEditing ();
111
+ mLayer2 -> addFeature ( ft3 );
112
+ mLayer2 -> commitChanges ();
114
113
115
- QgsFeature ft4 ( vl2. fields () );
114
+ QgsFeature ft4 ( mLayer2 -> fields () );
116
115
ft4.setAttribute ( QStringLiteral ( " pk" ), 12 );
117
116
ft4.setAttribute ( QStringLiteral ( " material" ), " steel" );
118
117
ft4.setAttribute ( QStringLiteral ( " diameter" ), 120 );
119
118
ft4.setAttribute ( QStringLiteral ( " raccord" ), " collar" );
120
- vl2.startEditing ();
121
- vl2.addFeature ( ft4 );
122
- vl2.commitChanges ();
119
+ mLayer2 ->startEditing ();
120
+ mLayer2 ->addFeature ( ft4 );
121
+ mLayer2 ->commitChanges ();
122
+ }
123
123
124
+ void TestQgsRelationReferenceWidget::cleanup ()
125
+ {
126
+ }
127
+
128
+ void TestQgsRelationReferenceWidget::testChainFilter ()
129
+ {
124
130
// init a relation reference widget
125
131
QStringList filterFields = { " material" , " diameter" , " raccord" };
126
132
127
133
QgsRelationReferenceWidget w ( new QWidget () );
128
134
w.setChainFilters ( true );
129
135
w.setFilterFields ( filterFields );
130
- w.setRelation ( relation , true );
136
+ w.setRelation ( * mRelation , true );
131
137
w.init ();
132
138
133
139
// check default status for comboboxes
@@ -181,5 +187,40 @@ void TestQgsRelationReferenceWidget::testChainFilter()
181
187
QCOMPARE ( w.mComboBox ->count (), 4 );
182
188
}
183
189
190
+ void TestQgsRelationReferenceWidget::testChainFilterRefreshed ()
191
+ {
192
+ // init a relation reference widget
193
+ QStringList filterFields = { " material" , " diameter" , " raccord" };
194
+
195
+ QgsRelationReferenceWidget w ( new QWidget () );
196
+ w.setChainFilters ( true );
197
+ w.setFilterFields ( filterFields );
198
+ w.setRelation ( *mRelation , true );
199
+ w.init ();
200
+
201
+ // check default status for comboboxes
202
+ QList<QComboBox *> cbs = w.mFilterComboBoxes ;
203
+ QCOMPARE ( cbs.count (), 3 );
204
+ QCOMPARE ( cbs[0 ]->currentText (), QString ( " material" ) );
205
+ QCOMPARE ( cbs[1 ]->currentText (), QString ( " diameter" ) );
206
+ QCOMPARE ( cbs[2 ]->currentText (), QString ( " raccord" ) );
207
+
208
+ // update foreign key
209
+ w.setForeignKey ( QVariant ( 12 ) );
210
+ QCOMPARE ( cbs[0 ]->currentText (), QString ( " steel" ) );
211
+ QCOMPARE ( cbs[1 ]->currentText (), QString ( " 120" ) );
212
+ QCOMPARE ( cbs[2 ]->currentText (), QString ( " collar" ) );
213
+
214
+ w.setForeignKey ( QVariant ( 10 ) );
215
+ QCOMPARE ( cbs[0 ]->currentText (), QString ( " iron" ) );
216
+ QCOMPARE ( cbs[1 ]->currentText (), QString ( " 120" ) );
217
+ QCOMPARE ( cbs[2 ]->currentText (), QString ( " brides" ) );
218
+
219
+ w.setForeignKey ( QVariant ( 11 ) );
220
+ QCOMPARE ( cbs[0 ]->currentText (), QString ( " iron" ) );
221
+ QCOMPARE ( cbs[1 ]->currentText (), QString ( " 120" ) );
222
+ QCOMPARE ( cbs[2 ]->currentText (), QString ( " sleeve" ) );
223
+ }
224
+
184
225
QGSTEST_MAIN ( TestQgsRelationReferenceWidget )
185
226
#include " testqgsrelationreferencewidget.moc"
0 commit comments