13 |
13 |
from wcs import fields, qommon
|
14 |
14 |
from wcs.api_access import ApiAccess
|
15 |
15 |
from wcs.api_utils import sign_url
|
|
16 |
from wcs.blocks import BlockDef
|
16 |
17 |
from wcs.carddef import CardDef
|
17 |
18 |
from wcs.categories import CardDefCategory
|
18 |
19 |
from wcs.data_sources import NamedDataSource
|
|
20 |
from wcs.formdef import FormDef
|
19 |
21 |
from wcs.qommon.afterjobs import AfterJob
|
20 |
22 |
from wcs.qommon.http_request import HTTPRequest
|
21 |
23 |
from wcs.qommon.upload_storage import PicklableUpload
|
... | ... | |
222 |
224 |
resp = get_app(pub).get('/api/cards/test/@schema', status=403)
|
223 |
225 |
|
224 |
226 |
|
|
227 |
def test_carddef_schema_relations(pub):
|
|
228 |
FormDef.wipe()
|
|
229 |
CardDef.wipe()
|
|
230 |
BlockDef.wipe()
|
|
231 |
|
|
232 |
formdef = FormDef()
|
|
233 |
formdef.name = 'formdef'
|
|
234 |
formdef.fields = [
|
|
235 |
fields.ItemField(
|
|
236 |
id='0', label='unknown', type='item', varname='unknown', data_source={'type': 'carddef:unknown'}
|
|
237 |
),
|
|
238 |
fields.ItemField(id='1', label='card1', type='item', data_source={'type': 'carddef:carddef-1'}),
|
|
239 |
fields.ItemField(
|
|
240 |
id='2', label='card2', type='item', varname='card2', data_source={'type': 'carddef:carddef-2'}
|
|
241 |
),
|
|
242 |
fields.ItemsField(id='3', label='cards1', type='items', data_source={'type': 'carddef:carddef-1'}),
|
|
243 |
fields.ItemsField(
|
|
244 |
id='4', label='cards2', type='items', varname='cards2', data_source={'type': 'carddef:carddef-2'}
|
|
245 |
),
|
|
246 |
]
|
|
247 |
formdef.store()
|
|
248 |
|
|
249 |
carddef1 = CardDef()
|
|
250 |
carddef1.name = 'carddef 1'
|
|
251 |
carddef1.fields = [
|
|
252 |
fields.ItemField(
|
|
253 |
id='0', label='unknown', type='item', varname='unknown', data_source={'type': 'carddef:unknown'}
|
|
254 |
),
|
|
255 |
fields.ItemField(
|
|
256 |
id='1', label='card2', type='item', varname='card2', data_source={'type': 'carddef:carddef-2'}
|
|
257 |
),
|
|
258 |
fields.ItemField(
|
|
259 |
id='2', label='card3', type='item', data_source={'type': 'carddef:carddef-3'}
|
|
260 |
), # no varname
|
|
261 |
fields.ItemsField(
|
|
262 |
id='3', label='cards2', type='items', varname='cards2', data_source={'type': 'carddef:carddef-2'}
|
|
263 |
),
|
|
264 |
fields.ItemsField(
|
|
265 |
id='4', label='cards3', type='items', data_source={'type': 'carddef:carddef-3'}
|
|
266 |
), # no varname
|
|
267 |
]
|
|
268 |
carddef1.store()
|
|
269 |
|
|
270 |
carddef2 = CardDef()
|
|
271 |
carddef2.name = 'carddef 2'
|
|
272 |
carddef2.store()
|
|
273 |
|
|
274 |
carddef3 = CardDef()
|
|
275 |
carddef3.name = 'carddef 3'
|
|
276 |
carddef3.fields = [
|
|
277 |
# no varnames
|
|
278 |
fields.ItemField(id='1', label='card2', type='item', data_source={'type': 'carddef:carddef-2'}),
|
|
279 |
fields.ItemsField(id='2', label='cards2', type='items', data_source={'type': 'carddef:carddef-2'}),
|
|
280 |
]
|
|
281 |
carddef3.store()
|
|
282 |
|
|
283 |
resp = get_app(pub).get(sign_uri('/api/cards/carddef-1/@schema'), status=200)
|
|
284 |
assert resp.json['relations'] == [
|
|
285 |
{'varname': 'card2', 'type': 'item', 'obj': 'carddef:carddef-2', 'reverse': False},
|
|
286 |
{'varname': 'cards2', 'type': 'items', 'obj': 'carddef:carddef-2', 'reverse': False},
|
|
287 |
]
|
|
288 |
resp = get_app(pub).get(sign_uri('/api/cards/carddef-2/@schema'), status=200)
|
|
289 |
assert resp.json['relations'] == [
|
|
290 |
{'varname': 'card2', 'type': 'item', 'obj': 'carddef:carddef-1', 'reverse': True},
|
|
291 |
{'varname': 'cards2', 'type': 'items', 'obj': 'carddef:carddef-1', 'reverse': True},
|
|
292 |
]
|
|
293 |
|
|
294 |
# custom views ?
|
|
295 |
carddef1.fields[1] = fields.ItemField(
|
|
296 |
id='1', label='card2', type='item', varname='card2', data_source={'type': 'carddef:carddef-2:view'}
|
|
297 |
)
|
|
298 |
carddef1.store()
|
|
299 |
resp = get_app(pub).get(sign_uri('/api/cards/carddef-1/@schema'), status=200)
|
|
300 |
assert resp.json['relations'] == [
|
|
301 |
{'varname': 'card2', 'type': 'item', 'obj': 'carddef:carddef-2', 'reverse': False},
|
|
302 |
{'varname': 'cards2', 'type': 'items', 'obj': 'carddef:carddef-2', 'reverse': False},
|
|
303 |
]
|
|
304 |
resp = get_app(pub).get(sign_uri('/api/cards/carddef-2/@schema'), status=200)
|
|
305 |
assert resp.json['relations'] == [
|
|
306 |
{'varname': 'card2', 'type': 'item', 'obj': 'carddef:carddef-1', 'reverse': True},
|
|
307 |
{'varname': 'cards2', 'type': 'items', 'obj': 'carddef:carddef-1', 'reverse': True},
|
|
308 |
]
|
|
309 |
|
|
310 |
# circular relation ?
|
|
311 |
carddef1.fields = [
|
|
312 |
fields.ItemField(
|
|
313 |
id='1', label='card1', type='item', varname='card1', data_source={'type': 'carddef:carddef-1'}
|
|
314 |
),
|
|
315 |
]
|
|
316 |
carddef1.store()
|
|
317 |
resp = get_app(pub).get(sign_uri('/api/cards/carddef-1/@schema'), status=200)
|
|
318 |
assert resp.json['relations'] == [
|
|
319 |
{'varname': 'card1', 'type': 'item', 'obj': 'carddef:carddef-1', 'reverse': False},
|
|
320 |
{'varname': 'card1', 'type': 'item', 'obj': 'carddef:carddef-1', 'reverse': True},
|
|
321 |
]
|
|
322 |
resp = get_app(pub).get(sign_uri('/api/cards/carddef-2/@schema'), status=200)
|
|
323 |
assert resp.json['relations'] == []
|
|
324 |
|
|
325 |
# block field
|
|
326 |
block1 = BlockDef()
|
|
327 |
block1.name = 'block 1'
|
|
328 |
block1.fields = [
|
|
329 |
fields.ItemField(
|
|
330 |
id='0', label='unknown', type='item', varname='unknown', data_source={'type': 'carddef:unknown'}
|
|
331 |
),
|
|
332 |
fields.ItemField(
|
|
333 |
id='1',
|
|
334 |
label='card1',
|
|
335 |
type='item',
|
|
336 |
varname='card1',
|
|
337 |
data_source={'type': 'carddef:carddef-1'},
|
|
338 |
),
|
|
339 |
fields.ItemField(
|
|
340 |
id='2',
|
|
341 |
label='card2',
|
|
342 |
type='item',
|
|
343 |
varname='card2',
|
|
344 |
data_source={'type': 'carddef:carddef-2'},
|
|
345 |
),
|
|
346 |
fields.ItemsField(
|
|
347 |
id='3', label='cards1', type='items', varname='cards1', data_source={'type': 'carddef:carddef-1'}
|
|
348 |
),
|
|
349 |
fields.ItemsField(
|
|
350 |
id='4', label='cards2', type='items', varname='cards2', data_source={'type': 'carddef:carddef-2'}
|
|
351 |
),
|
|
352 |
]
|
|
353 |
block1.store()
|
|
354 |
|
|
355 |
# no varname on block field
|
|
356 |
carddef1.fields = [fields.BlockField(id='1', label='block', type='block:%s' % block1.slug)]
|
|
357 |
carddef1.store()
|
|
358 |
resp = get_app(pub).get(sign_uri('/api/cards/carddef-1/@schema'), status=200)
|
|
359 |
assert resp.json['relations'] == []
|
|
360 |
resp = get_app(pub).get(sign_uri('/api/cards/carddef-2/@schema'), status=200)
|
|
361 |
assert resp.json['relations'] == []
|
|
362 |
|
|
363 |
# with varname
|
|
364 |
carddef1.fields = [
|
|
365 |
fields.BlockField(id='1', label='block', varname='block1', type='block:%s' % block1.slug)
|
|
366 |
]
|
|
367 |
carddef1.store()
|
|
368 |
resp = get_app(pub).get(sign_uri('/api/cards/carddef-1/@schema'), status=200)
|
|
369 |
assert resp.json['relations'] == [
|
|
370 |
{'varname': 'block1_card1', 'type': 'item', 'obj': 'carddef:carddef-1', 'reverse': False},
|
|
371 |
{'varname': 'block1_card1', 'type': 'item', 'obj': 'carddef:carddef-1', 'reverse': True},
|
|
372 |
{'varname': 'block1_card2', 'type': 'item', 'obj': 'carddef:carddef-2', 'reverse': False},
|
|
373 |
{'varname': 'block1_cards1', 'type': 'items', 'obj': 'carddef:carddef-1', 'reverse': False},
|
|
374 |
{'varname': 'block1_cards1', 'type': 'items', 'obj': 'carddef:carddef-1', 'reverse': True},
|
|
375 |
{'varname': 'block1_cards2', 'type': 'items', 'obj': 'carddef:carddef-2', 'reverse': False},
|
|
376 |
]
|
|
377 |
resp = get_app(pub).get(sign_uri('/api/cards/carddef-2/@schema'), status=200)
|
|
378 |
assert resp.json['relations'] == [
|
|
379 |
{'varname': 'block1_card2', 'type': 'item', 'obj': 'carddef:carddef-1', 'reverse': True},
|
|
380 |
{'varname': 'block1_cards2', 'type': 'items', 'obj': 'carddef:carddef-1', 'reverse': True},
|
|
381 |
]
|
|
382 |
|
|
383 |
|
225 |
384 |
@pytest.mark.parametrize('auth', ['signature', 'http-basic'])
|
226 |
385 |
def test_cards_import_csv(pub, local_user, auth):
|
227 |
386 |
pub.role_class.wipe()
|