You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+178
Original file line number
Diff line number
Diff line change
@@ -64,3 +64,181 @@ Nach Klick auf obigen Button wird eine Übersicht über Befragungen angezeigt, d
64
64
65
65
In diesem Fall sind keine Befragungen vorbereitet. Falls Befragungen vorhanden sind, wird zusätzlich ein Button angezeigt, der zur Übertragung der Teilnehmerliste dient:
66
66

67
+
68
+
## Tests
69
+
70
+
Die Funktionsweise des Blocks wird durch Behattests sichergestellt.
71
+
72
+
##### Tests durchführen:
73
+
Um die Test durchzuführen führen sie:
74
+
`php moodle/admin/tool/behat/cli/run.php --tags="@block_evasys_sync"` aus. <br>
75
+
Mehr Infos dazu in der [Dokumentation](https://docs.moodle.org/dev/Running_acceptance_test)
76
+
77
+
##### Neue Tests schreiben:
78
+
- Diese Plugin verfügt über einen Behattest Generator, zu finden in `evasys_sync/tests/behat/generator` <br>
79
+
- Der Generator ist zweigeteilt. Um bestehende Schritte zu ändern reicht es die entsprechende Schrittdefiniton in `steps.py` zu finden und zu ändern.
80
+
- Um neue Schritte zu definieren, muss ein entsprechender Schritt in `steps.py` angelegt werden, und die entsprechenden parameter in `generator.py` als key im `OPTIONS dict` angelegt werden. zudem muss in den verwendeten methoden der Parameter hinzugefügt werden. <br>
81
+
Logischerweise muss der neue Schritt auch in `behat_block_evasys_sync` definiert werden sofern es kein Standardschritt ist.
82
+
83
+
######Generator
84
+
Der generelle Aufbau des Generators ist wie folgt:
85
+
<br>`steps.py`:
86
+
- direkte Texterzeugende Methoden sollten hier definiert werden.
87
+
- Für einfache Schritte die nur von einem Parameter abhängen können `dicts` benutzt werden.
-_type_ richtet sich nach der Funktion des zurückgegebenen Texts im Context des Behat tests:
92
+
*`description`: Der zurückgegebene Text ist für die Scenariobeschreibung.
93
+
*`step`: Der zurückgegebene Text legt die Umgebung des Tests fest.
94
+
*`check`: Der zurückgegebene Text ist eine Überprüfung der erzeugten Seite.
95
+
96
+
<br>`generator.py`:
97
+
- 4 hauptmethoden die für die übergebenen Parameter entsprechende Texte zurückgeben:
98
+
*`get_checks` Gibt alle Checks aus
99
+
*`get_scenario` Gibt alle Umgebungsfestlegenden Texte zurück
100
+
*`get_combi_description` Gibt die Beschreibung eines Szenarios auch für eine mehrfachbelegung von parametern zurück
101
+
*`get_postcondensing_checks` Gibt die Checks die beim verkleinern der Szenarien nicht berücksichtigt werden sollen Zurück.
102
+
103
+
Der generator erzeutgt zunächst aus allen in `OPTIONS` festgelegten Parametern das Karthesische Produkt. <br>
104
+
Danach werden für jede Option die Checks berechnet.
105
+
Alle Optionen mit gleichem Check werden darauf überprüft ob sie durch das abändern eines
106
+
Parameters mit einer der anderen Optionen übereinstimmen. Wenn Ja wird angenommen, dass der Parameter nicht relevant für den Ausgang ist und die 2 Tests zusammengefasst.
107
+
108
+
######Mockingklassen:
109
+
Die Rückgaben des Evasys und LSF system werden für die Tests gemockt.<br>
110
+
Dies geschiet in den Dateien `lsf_api_mock_testable.php` sowie in der unterklasse `evasys_api_testable` in `evasys_api.php`
Die daten werden als JSON array im `summary` Feld der `course` Tabelle gespeichert. Dabei haben die Daten folgende Form: <br>
115
+
`stdClass()->evacourses => array()`
116
+
<detailsname="evavardump">
117
+
<summary>Single Evacourse vardump</summary>
118
+
119
+
object(stdClass)[281]
120
+
public 'valid' => boolean true
121
+
public 'veranstnr' => int 0
122
+
public 'semestertxt' => string 'WS 2017/18' (length=10)
123
+
public 'studentcount' => int 100
124
+
public 'title' => string 'DynamicSurvey0' (length=14)
125
+
public 'surveys' =>
126
+
array (size=1)
127
+
0 =>
128
+
object(stdClass)[282]
129
+
public 'num' => int 0
130
+
public 'formid' => int 1
131
+
public 'is_open' => string 't' (length=1)
132
+
public 'form_count' => int 20
133
+
public 'pswd_count' => int 200
134
+
</details>
135
+
136
+
Das `stdClass->evacourses` Array sollte dabei für eine lsfid die entsprechende Datenstruktur [siehe vardump](#evavardump) zurückliefern.
137
+
<br>
138
+
Die gemockte lsfapi gibt lediglich `semestertext` und `veranstnr` zurück da die restlichen Werte nicht behötigt werden <br>
139
+
Auch die gemockte evasysapi gibt lediglich benutzte Werte zurück und füllt den Rest mit dummys. Sollte ein neuer Wert benötigt werden, so muss dieser hier eingefügt werden. <br>
140
+
Hier sind dafür Vardumps bereitgestellt, (evasys Struktur ändert sich je nachdem ob der Kurs eine oder mehrere Umfragen besitzt!!!):
141
+
<details>
142
+
<summary>Evasys Kurs Vardump</summary>
143
+
144
+
object(stdClass)[402]
145
+
public 'm_nCourseId' => int 166410
146
+
public 'm_sProgramOfStudy' => string '' (length=0)
147
+
public 'm_sCourseTitle' => string 'AutoMultiSurvey' (length=15)
148
+
public 'm_sRoom' => string '' (length=0)
149
+
public 'm_nCourseType' => int 1
150
+
public 'm_sPubCourseId' => string '1002 WS 2018/19' (length=15)
151
+
public 'm_sExternalId' => string '' (length=0)
152
+
public 'm_nCountStud' => int 2
153
+
public 'm_sCustomFieldsJSON' => string '{}' (length=2)
154
+
public 'm_nUserId' => int 73350
155
+
public 'm_nFbid' => int 338
156
+
public 'm_nPeriodId' => int 40
157
+
public 'm_aoParticipants' =>
158
+
object(stdClass)[404]
159
+
public 'm_aoSecondaryInstructors' =>
160
+
object(stdClass)[401]
161
+
public 'm_oSurveyHolder' =>
162
+
object(stdClass)[411]
163
+
public 'm_aSurveys' =>
164
+
object(stdClass)[412]
165
+
public 'Surveys' =>
166
+
167
+
</details>
168
+
<details>
169
+
<summary>Vardump von einem Kurs mit nur eimer Umfrage</summary>
170
+
171
+
public 'm_aSurveys' =>
172
+
object(stdClass)[412]
173
+
public 'Surveys' =>
174
+
object(stdClass)[413]
175
+
public 'm_nSurveyId' => int 330416933
176
+
public 'm_nState' => int 0
177
+
public 'm_sTitle' => string 'AutoMultiSurvey' (length=15)
178
+
public 'm_cType' => string 'o' (length=1)
179
+
public 'm_nFrmid' => int 832
180
+
public 'm_nStuid' => int 34763
181
+
public 'm_nVerid' => int 166410
182
+
public 'm_nOpenState' => int 1
183
+
public 'm_nFormCount' => int 0
184
+
public 'm_nPswdCount' => int 2
185
+
public 'm_sLastDataCollectionDate' => string '' (length=0)
186
+
public 'm_nPageLinkOffset' => int 0
187
+
public 'm_sMaskTan' => string '' (length=0)
188
+
public 'm_nMaskState' => int 0
189
+
public 'm_oPeriod' =>
190
+
object(stdClass)[414]
191
+
public 'm_nPeriodId' => int 40
192
+
public 'm_sTitel' => string 'WS 2018/19' (length=10)
193
+
public 'm_sStartDate' => string '2018-10-01' (length=10)
194
+
public 'm_sEndDate' => string '2019-03-31' (length=10)
195
+
</details>
196
+
197
+
<details>
198
+
<summary>Vardump von einem Kurs mit mehreren Umfragen</summary>
199
+
200
+
public 'm_aSurveys' =>
201
+
object(stdClass)[412]
202
+
public 'Surveys' =>
203
+
array (size=2)
204
+
0 =>
205
+
object(stdClass)[409]
206
+
public 'm_nSurveyId' => int 330416933
207
+
public 'm_nState' => int 0
208
+
public 'm_sTitle' => string 'AutoMultiSurvey' (length=15)
209
+
public 'm_cType' => string 'o' (length=1)
210
+
public 'm_nFrmid' => int 832
211
+
public 'm_nStuid' => int 34763
212
+
public 'm_nVerid' => int 166410
213
+
public 'm_nOpenState' => int 1
214
+
public 'm_nFormCount' => int 0
215
+
public 'm_nPswdCount' => int 2
216
+
public 'm_sLastDataCollectionDate' => string '' (length=0)
217
+
public 'm_nPageLinkOffset' => int 0
218
+
public 'm_sMaskTan' => string '' (length=0)
219
+
public 'm_nMaskState' => int 0
220
+
public 'm_oPeriod' =>
221
+
object(stdClass)[410]
222
+
...
223
+
1 =>
224
+
object(stdClass)[411]
225
+
public 'm_nSurveyId' => int 2114887341
226
+
public 'm_nState' => int 0
227
+
public 'm_sTitle' => string 'AutoMultiSurvey' (length=15)
228
+
public 'm_cType' => string 'o' (length=1)
229
+
public 'm_nFrmid' => int 784
230
+
public 'm_nStuid' => int 34763
231
+
public 'm_nVerid' => int 166410
232
+
public 'm_nOpenState' => int 1
233
+
public 'm_nFormCount' => int 0
234
+
public 'm_nPswdCount' => int 2
235
+
public 'm_sLastDataCollectionDate' => string '' (length=0)
236
+
public 'm_nPageLinkOffset' => int 0
237
+
public 'm_sMaskTan' => string '' (length=0)
238
+
public 'm_nMaskState' => int 0
239
+
public 'm_oPeriod' =>
240
+
object(stdClass)[410]
241
+
</details>
242
+
243
+
Letztlich ist noch zu bemerken, dass für über die `idnumber` verknüpfte Kurse immer ein Sommersemester als `semestertext` gewählt werden sollte,
244
+
entsprechend für über die Mappingfunktion verknüpfte Kurse ein Wintersemester, um gleiche Evasyskennungen zu vermeiden.
0 commit comments