• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

iplweb / bpp / 2314acb3-6be8-4e0c-96b0-e8b120678896

11 Aug 2025 11:35AM UTC coverage: 39.858% (-6.2%) from 46.068%
2314acb3-6be8-4e0c-96b0-e8b120678896

push

circleci

mpasternak
Merge branch 'release/v202508.1185'

8 of 64 new or added lines in 8 files covered. (12.5%)

683 existing lines in 32 files now uncovered.

15116 of 37925 relevant lines covered (39.86%)

0.4 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
src/pbn_api/tests/test_client.py
1
from pathlib import Path
×
2

3
import pytest
×
4
from model_bakery import baker
×
5

NEW
6
from fixtures import MOCK_RETURNED_INSTITUTION_PUBLICATION_V2_DATA
×
7
from fixtures.pbn_api import MOCK_RETURNED_MONGODB_DATA
×
8
from pbn_api.adapters.wydawnictwo import WydawnictwoPBNAdapter
×
9
from pbn_api.client import (
×
10
    PBN_DELETE_PUBLICATION_STATEMENT,
11
    PBN_GET_INSTITUTION_STATEMENTS,
12
    PBN_GET_PUBLICATION_BY_ID_URL,
13
    PBN_POST_PUBLICATIONS_URL,
14
)
NEW
15
from pbn_api.const import PBN_GET_DISCIPLINES_URL, PBN_GET_INSTITUTION_PUBLICATIONS_V2
×
16
from pbn_api.exceptions import (
×
17
    HttpException,
18
    PKZeroExportDisabled,
19
    SameDataUploadedRecently,
20
)
21
from pbn_api.models import Institution, Publication, SentData, TlumaczDyscyplin
×
22
from pbn_api.models.discipline import Discipline
×
23
from pbn_api.tests.utils import middleware
×
24

25
from django.contrib.messages import get_messages
×
26

27
from bpp.admin.helpers.pbn_api.gui import sprobuj_wyslac_do_pbn_gui
×
28
from bpp.decorators import json
×
29
from bpp.models import Dyscyplina_Naukowa
×
30

31

32
@pytest.mark.django_db
×
33
def test_PBNClient_test_upload_publication_nie_trzeba(
×
34
    pbn_client, pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina
35
):
36
    pbn_client.transport.return_values[PBN_POST_PUBLICATIONS_URL] = {"objectId": None}
×
37

38
    SentData.objects.updated(
×
39
        pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina,
40
        WydawnictwoPBNAdapter(
41
            pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina
42
        ).pbn_get_json(),
43
    )
44

45
    with pytest.raises(SameDataUploadedRecently):
×
46
        pbn_client.upload_publication(pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina)
×
47

48

49
class PBNTestClientException(Exception):
×
50
    pass
×
51

52

53
@pytest.mark.django_db
×
54
def test_PBNClient_test_upload_publication_exception(
×
55
    pbn_client, pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina
56
):
NEW
57
    pbn_client.transport.return_values[PBN_POST_PUBLICATIONS_URL] = (
×
58
        PBNTestClientException("nei")
59
    )
60

61
    with pytest.raises(PBNTestClientException):
×
62
        pbn_client.upload_publication(pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina)
×
63

64

65
@pytest.mark.django_db
×
66
def test_PBNClient_test_upload_publication_wszystko_ok(
×
67
    pbn_client, pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina, pbn_publication
68
):
69
    pbn_client.transport.return_values[PBN_POST_PUBLICATIONS_URL] = {
×
70
        "objectId": pbn_publication.pk
71
    }
72

73
    ret, js = pbn_client.upload_publication(
×
74
        pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina
75
    )
76
    assert ret["objectId"] == pbn_publication.pk
×
77

78

79
@pytest.mark.django_db
×
80
def test_sync_publication_to_samo_id(
×
81
    pbn_client,
82
    pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina,
83
    pbn_publication,
84
    pbn_autor,
85
    pbn_jednostka,
86
):
87
    pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pbn_uid = pbn_publication
×
88
    pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.save()
×
89

90
    stare_id = pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pbn_uid_id
×
91

92
    pbn_client.transport.return_values[PBN_POST_PUBLICATIONS_URL] = {
×
93
        "objectId": pbn_publication.pk
94
    }
95
    pbn_client.transport.return_values[
×
96
        PBN_GET_PUBLICATION_BY_ID_URL.format(id=pbn_publication.pk)
97
    ] = MOCK_RETURNED_MONGODB_DATA
NEW
98
    pbn_client.transport.return_values[
×
99
        PBN_GET_INSTITUTION_PUBLICATIONS_V2 + "?publicationId=123&size=10"
100
    ] = MOCK_RETURNED_INSTITUTION_PUBLICATION_V2_DATA
NEW
101
    pbn_client.transport.return_values[PBN_GET_PUBLICATION_BY_ID_URL.format(id=456)] = (
×
102
        MOCK_RETURNED_MONGODB_DATA
103
    )
104

UNCOV
105
    pbn_client.transport.return_values[
×
106
        PBN_GET_INSTITUTION_STATEMENTS + "?publicationId=123&size=5120"
107
    ] = [
108
        {
109
            "id": "eaec3254-2eb1-44d9-8c3c-e68fc2a48bd9",
110
            "addedTimestamp": "2020.05.06",
111
            "institutionId": pbn_jednostka.pbn_uid_id,
112
            "personId": pbn_autor.pbn_uid_id,
113
            "publicationId": pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pbn_uid_id,
114
            "area": "200",
115
            "inOrcid": True,
116
            "type": "FOOBAR",
117
        }
118
    ]
119

120
    pbn_client.sync_publication(pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina)
×
121

122
    pbn_publication.refresh_from_db()
×
123
    assert pbn_publication.versions[0]["baz"] == "quux"
×
124
    assert stare_id == pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pbn_uid_id
×
125

126

127
@pytest.mark.django_db
×
128
def test_sync_publication_tekstowo_podane_id(
×
129
    pbn_client, pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina, pbn_publication
130
):
131
    pbn_client.transport.return_values[PBN_POST_PUBLICATIONS_URL] = {
×
132
        "objectId": pbn_publication.pk
133
    }
134
    pbn_client.transport.return_values[
×
135
        PBN_GET_PUBLICATION_BY_ID_URL.format(id=pbn_publication.pk)
136
    ] = MOCK_RETURNED_MONGODB_DATA
137

NEW
138
    pbn_client.transport.return_values[PBN_GET_PUBLICATION_BY_ID_URL.format(id=456)] = (
×
139
        MOCK_RETURNED_MONGODB_DATA
140
    )
NEW
141
    pbn_client.transport.return_values[
×
142
        PBN_GET_INSTITUTION_PUBLICATIONS_V2 + "?publicationId=123&size=10"
143
    ] = MOCK_RETURNED_INSTITUTION_PUBLICATION_V2_DATA
144

UNCOV
145
    pbn_client.transport.return_values[
×
146
        PBN_GET_INSTITUTION_STATEMENTS + "?publicationId=123&size=5120"
147
    ] = []
148

149
    pbn_client.sync_publication(
×
150
        f"wydawnictwo_zwarte:{pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pk}"
151
    )
152

153
    pbn_publication.refresh_from_db()
×
154
    assert pbn_publication.versions[0]["baz"] == "quux"
×
155

156

157
@pytest.mark.django_db
×
158
def test_sync_publication_nowe_id(
×
159
    pbn_client, pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina, pbn_publication
160
):
161
    assert pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pbn_uid_id is None
×
162

163
    stare_id = pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pbn_uid_id
×
164

165
    pbn_client.transport.return_values[PBN_POST_PUBLICATIONS_URL] = {
×
166
        "objectId": pbn_publication.pk
167
    }
168
    pbn_client.transport.return_values[
×
169
        PBN_GET_PUBLICATION_BY_ID_URL.format(id=pbn_publication.pk)
170
    ] = MOCK_RETURNED_MONGODB_DATA
171
    pbn_client.transport.return_values[
×
172
        PBN_GET_INSTITUTION_STATEMENTS + "?publicationId=123&size=5120"
173
    ] = []
NEW
174
    pbn_client.transport.return_values[PBN_GET_PUBLICATION_BY_ID_URL.format(id=456)] = (
×
175
        MOCK_RETURNED_MONGODB_DATA
176
    )
NEW
177
    pbn_client.transport.return_values[
×
178
        PBN_GET_INSTITUTION_PUBLICATIONS_V2 + "?publicationId=123&size=10"
179
    ] = MOCK_RETURNED_INSTITUTION_PUBLICATION_V2_DATA
180

181
    pbn_client.sync_publication(pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina)
×
182

183
    pbn_publication.refresh_from_db()
×
184
    assert pbn_publication.versions[0]["baz"] == "quux"
×
185
    assert stare_id != pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pbn_uid_id
×
186

187

188
@pytest.mark.django_db
×
189
def test_sync_publication_wysylka_z_zerowym_pk(
×
190
    pbn_client,
191
    pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina,
192
    pbn_publication,
193
    pbn_uczelnia,
194
):
195
    pbn_uczelnia.pbn_api_nie_wysylaj_prac_bez_pk = True
×
196
    pbn_uczelnia.save()
×
197

198
    pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.punkty_kbn = 0
×
199
    pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.save()
×
200

201
    pbn_client.transport.return_values[PBN_POST_PUBLICATIONS_URL] = {
×
202
        "objectId": pbn_publication.pk
203
    }
204
    pbn_client.transport.return_values[
×
205
        PBN_GET_PUBLICATION_BY_ID_URL.format(id=pbn_publication.pk)
206
    ] = MOCK_RETURNED_MONGODB_DATA
NEW
207
    pbn_client.transport.return_values[
×
208
        PBN_GET_INSTITUTION_PUBLICATIONS_V2 + "?publicationId=123&size=10"
209
    ] = MOCK_RETURNED_INSTITUTION_PUBLICATION_V2_DATA
NEW
210
    pbn_client.transport.return_values[PBN_GET_PUBLICATION_BY_ID_URL.format(id=456)] = (
×
211
        MOCK_RETURNED_MONGODB_DATA
212
    )
213

UNCOV
214
    pbn_client.transport.return_values[
×
215
        PBN_GET_INSTITUTION_STATEMENTS + "?publicationId=123&size=5120"
216
    ] = []
NEW
217
    pbn_client.transport.return_values[
×
218
        PBN_GET_INSTITUTION_PUBLICATIONS_V2 + "?publicationId=123&size=10"
219
    ] = MOCK_RETURNED_INSTITUTION_PUBLICATION_V2_DATA
220

221
    # To pójdzie
222
    pbn_client.sync_publication(
×
223
        pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina, export_pk_zero=True
224
    )
225

226
    # To nie pójdzie
227
    with pytest.raises(PKZeroExportDisabled):
×
228
        pbn_client.sync_publication(
×
229
            pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina, export_pk_zero=False
230
        )
231

232

233
@pytest.mark.django_db
×
234
def test_helpers_wysylka_z_zerowym_pk(
×
235
    rf, pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina, pbn_uczelnia, admin_user
236
):
NEW
237
    pbn_uczelnia.pbn_integracja = pbn_uczelnia.pbn_aktualizuj_na_biezaco = (
×
238
        pbn_uczelnia.pbn_api_nie_wysylaj_prac_bez_pk
239
    ) = True
UNCOV
240
    pbn_uczelnia.save()
×
241

242
    pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.punkty_kbn = 0
×
243
    pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.save()
×
244

245
    req = rf.get("/")
×
246
    req._uczelnia = pbn_uczelnia
×
247
    req.user = admin_user
×
248

249
    # I jeszcze test z poziomu admina czy parametr z pbn_uczelnia jest przekazywany
250
    with middleware(req):
×
251
        sprobuj_wyslac_do_pbn_gui(req, pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina)
×
252
        msg = list(get_messages(req))
×
253

254
    assert "wyłączony w konfiguracji" in msg[0].message
×
255

256

257
@pytest.mark.django_db
×
258
def test_helpers_wysylka_z_uid_uczelni(
×
259
    rf,
260
    pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina,
261
    pbn_autor_z_dyscyplina,
262
    pbn_uczelnia,
263
    admin_user,
264
    pbn_client,
265
):
266
    odpowiednik = baker.make(Institution, mongoId="PBN_UID_UCZELNI----")
×
267

268
    baker.make(Publication, mongoId=pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pk)
×
269

270
    pbn_uczelnia.pbn_uid = odpowiednik
×
271
    pbn_uczelnia.pbn_api_afiliacja_zawsze_na_uczelnie = True
×
272
    pbn_uczelnia.save()
×
273

274
    pbn_uczelnia.pbn_integracja = pbn_uczelnia.pbn_aktualizuj_na_biezaco = True
×
275
    pbn_uczelnia.save()
×
276

277
    pbn_client.transport.return_values[PBN_POST_PUBLICATIONS_URL] = {
×
278
        "objectId": pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pk
279
    }
280
    pbn_client.transport.return_values[
×
281
        PBN_GET_PUBLICATION_BY_ID_URL.format(
282
            id=pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pk
283
        )
284
    ] = MOCK_RETURNED_MONGODB_DATA
NEW
285
    pbn_client.transport.return_values[
×
286
        PBN_GET_INSTITUTION_PUBLICATIONS_V2
287
        + f"?publicationId={pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pk}&size=10"
288
    ] = MOCK_RETURNED_INSTITUTION_PUBLICATION_V2_DATA
NEW
289
    pbn_client.transport.return_values[PBN_GET_PUBLICATION_BY_ID_URL.format(id=456)] = (
×
290
        MOCK_RETURNED_MONGODB_DATA
291
    )
292

293
    pbn_client.transport.return_values[
×
294
        PBN_GET_INSTITUTION_STATEMENTS + "?publicationId=123&size=5120"
295
    ] = []
296

297
    req = rf.get("/")
×
298
    req._uczelnia = pbn_uczelnia
×
299
    req.user = admin_user
×
300

301
    with middleware(req):
×
302
        sprobuj_wyslac_do_pbn_gui(req, pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina)
×
303
        msg = list(get_messages(req))
×
304

305
    assert len(msg) == 1 and str(msg[0]).find("y zaktualizowane") > -1
×
306

307
    iv = pbn_client.transport.input_values["/api/v1/publications"]
×
308
    assert iv["body"]["authors"][0]["affiliations"][0] == odpowiednik.pk
×
309
    assert iv["body"]["institutions"][odpowiednik.pk]["objectId"] == odpowiednik.pk
×
310

311

312
@pytest.mark.django_db
×
313
def test_helpers_wysylka_bez_uid_uczelni(
×
314
    rf,
315
    pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina,
316
    pbn_autor_z_dyscyplina,
317
    pbn_uczelnia,
318
    pbn_jednostka,
319
    admin_user,
320
    pbn_client,
321
):
322
    odpowiednik = baker.make(Institution, mongoId="PBN_UID_UCZELNI----")
×
323

324
    baker.make(Publication, mongoId=pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pk)
×
325

326
    pbn_uczelnia.pbn_uid = odpowiednik
×
327
    pbn_uczelnia.pbn_api_afiliacja_zawsze_na_uczelnie = False
×
328
    pbn_uczelnia.save()
×
329

330
    pbn_uczelnia.pbn_integracja = pbn_uczelnia.pbn_aktualizuj_na_biezaco = True
×
331
    pbn_uczelnia.save()
×
332

333
    pbn_client.transport.return_values[PBN_POST_PUBLICATIONS_URL] = {
×
334
        "objectId": pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pk
335
    }
336
    pbn_client.transport.return_values[
×
337
        PBN_GET_PUBLICATION_BY_ID_URL.format(
338
            id=pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pk
339
        )
340
    ] = MOCK_RETURNED_MONGODB_DATA
341

NEW
342
    pbn_client.transport.return_values[PBN_GET_PUBLICATION_BY_ID_URL.format(id=456)] = (
×
343
        MOCK_RETURNED_MONGODB_DATA
344
    )
345

NEW
346
    pbn_client.transport.return_values[
×
347
        PBN_GET_INSTITUTION_PUBLICATIONS_V2
348
        + f"?publicationId={pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pk}&size=10"
349
    ] = MOCK_RETURNED_INSTITUTION_PUBLICATION_V2_DATA
350

UNCOV
351
    pbn_client.transport.return_values[
×
352
        PBN_GET_INSTITUTION_STATEMENTS + "?publicationId=123&size=5120"
353
    ] = []
354

355
    req = rf.get("/")
×
356
    req._uczelnia = pbn_uczelnia
×
357
    req.user = admin_user
×
358

359
    with middleware(req):
×
360
        sprobuj_wyslac_do_pbn_gui(req, pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina)
×
361
        msg = list(get_messages(req))
×
362

363
    assert len(msg) == 1 and str(msg[0]).find("y zaktualizowane") > -1
×
364

365
    iv = pbn_client.transport.input_values["/api/v1/publications"]
×
366
    assert iv["body"]["authors"][0]["affiliations"][0] == pbn_jednostka.pbn_uid_id
×
367
    assert (
×
368
        iv["body"]["institutions"][pbn_jednostka.pbn_uid_id]["objectId"]
369
        == pbn_jednostka.pbn_uid_id
370
    )
371

372

373
@pytest.mark.django_db
×
374
def test_sync_publication_kasuj_oswiadczenia_przed_wszystko_dobrze(
×
375
    pbn_client,
376
    pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina,
377
    pbn_publication,
378
    pbn_autor,
379
    pbn_jednostka,
380
):
381
    pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pbn_uid = pbn_publication
×
382
    pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.save()
×
383

384
    stare_id = pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pbn_uid_id
×
385

386
    pbn_client.transport.return_values[PBN_POST_PUBLICATIONS_URL] = {
×
387
        "objectId": pbn_publication.pk
388
    }
389
    pbn_client.transport.return_values[
×
390
        PBN_GET_PUBLICATION_BY_ID_URL.format(id=pbn_publication.pk)
391
    ] = MOCK_RETURNED_MONGODB_DATA
NEW
392
    pbn_client.transport.return_values[
×
393
        PBN_GET_INSTITUTION_PUBLICATIONS_V2 + "?publicationId=123&size=10"
394
    ] = MOCK_RETURNED_INSTITUTION_PUBLICATION_V2_DATA
NEW
395
    pbn_client.transport.return_values[PBN_GET_PUBLICATION_BY_ID_URL.format(id=456)] = (
×
396
        MOCK_RETURNED_MONGODB_DATA
397
    )
398

UNCOV
399
    pbn_client.transport.return_values[
×
400
        PBN_DELETE_PUBLICATION_STATEMENT.format(publicationId=pbn_publication.pk)
401
    ] = []
402
    pbn_client.transport.return_values[
×
403
        PBN_GET_INSTITUTION_STATEMENTS + "?publicationId=123&size=5120"
404
    ] = [
405
        {
406
            "id": "eaec3254-2eb1-44d9-8c3c-e68fc2a48bd9",
407
            "addedTimestamp": "2020.05.06",
408
            "institutionId": pbn_jednostka.pbn_uid_id,
409
            "personId": pbn_autor.pbn_uid_id,
410
            "publicationId": pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pbn_uid_id,
411
            "area": "200",
412
            "inOrcid": True,
413
            "type": "FOOBAR",
414
        }
415
    ]
416

417
    pbn_client.sync_publication(
×
418
        pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina,
419
        delete_statements_before_upload=True,
420
    )
421

422
    pbn_publication.refresh_from_db()
×
423
    assert pbn_publication.versions[0]["baz"] == "quux"
×
424
    assert stare_id == pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pbn_uid_id
×
425

426

427
@pytest.mark.django_db
×
428
def test_sync_publication_kasuj_oswiadczenia_przed_blad_400_nie_zaburzy(
×
429
    pbn_client,
430
    pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina,
431
    pbn_publication,
432
    pbn_autor,
433
    pbn_jednostka,
434
):
435
    pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pbn_uid = pbn_publication
×
436
    pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.save()
×
437

438
    stare_id = pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pbn_uid_id
×
439

440
    pbn_client.transport.return_values[PBN_POST_PUBLICATIONS_URL] = {
×
441
        "objectId": pbn_publication.pk
442
    }
443
    pbn_client.transport.return_values[
×
444
        PBN_GET_PUBLICATION_BY_ID_URL.format(id=pbn_publication.pk)
445
    ] = MOCK_RETURNED_MONGODB_DATA
NEW
446
    pbn_client.transport.return_values[
×
447
        PBN_GET_INSTITUTION_PUBLICATIONS_V2
448
        + f"?publicationId={pbn_publication.pk}&size=10"
449
    ] = MOCK_RETURNED_INSTITUTION_PUBLICATION_V2_DATA
NEW
450
    pbn_client.transport.return_values[PBN_GET_PUBLICATION_BY_ID_URL.format(id=456)] = (
×
451
        MOCK_RETURNED_MONGODB_DATA
452
    )
453

454
    url = PBN_DELETE_PUBLICATION_STATEMENT.format(publicationId=pbn_publication.pk)
×
455
    err_json = {
×
456
        "code": 400,
457
        "message": "Bad Request",
458
        "description": "Validation failed.",
459
        "details": {
460
            "publicationId": "Nie można usunąć oświadczeń. Nie istnieją oświadczenia dla publikacji "
461
            "(id = {pbn_publication.pk}) i instytucji (id = XXX)."
462
        },
463
    }
464

465
    pbn_client.transport.return_values[url] = HttpException(
×
466
        400, url, json.dumps(err_json)
467
    )
468

469
    pbn_client.transport.return_values[
×
470
        PBN_GET_INSTITUTION_STATEMENTS + "?publicationId=123&size=5120"
471
    ] = [
472
        {
473
            "id": "eaec3254-2eb1-44d9-8c3c-e68fc2a48bd9",
474
            "addedTimestamp": "2020.05.06",
475
            "institutionId": pbn_jednostka.pbn_uid_id,
476
            "personId": pbn_autor.pbn_uid_id,
477
            "publicationId": pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pbn_uid_id,
478
            "area": "200",
479
            "inOrcid": True,
480
            "type": "FOOBAR",
481
        }
482
    ]
483

484
    pbn_client.sync_publication(
×
485
        pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina,
486
        delete_statements_before_upload=True,
487
    )
488

489
    pbn_publication.refresh_from_db()
×
490
    assert pbn_publication.versions[0]["baz"] == "quux"
×
491
    assert stare_id == pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pbn_uid_id
×
492

493

494
def test_get_disciplines(pbn_client):
×
495
    pbn_client.transport.return_values[PBN_GET_DISCIPLINES_URL] = json.loads(
×
496
        open(Path(__file__).parent / "fixture_test_get_disciplines.json", "rb").read()
497
    )
498
    ret = pbn_client.get_disciplines()
×
499
    assert "validityDateFrom" in ret[0]
×
500

501

502
@pytest.mark.django_db
×
503
def test_download_disciplines(pbn_client):
×
504
    pbn_client.transport.return_values[PBN_GET_DISCIPLINES_URL] = json.loads(
×
505
        open(Path(__file__).parent / "fixture_test_get_disciplines.json", "rb").read()
506
    )
507

508
    assert Discipline.objects.count() == 0
×
509
    pbn_client.download_disciplines()
×
510
    assert Discipline.objects.count() != 0
×
511

512

513
@pytest.mark.django_db
×
514
def test_sync_disciplines(pbn_client):
×
515
    pbn_client.transport.return_values[PBN_GET_DISCIPLINES_URL] = json.loads(
×
516
        open(Path(__file__).parent / "fixture_test_get_disciplines.json", "rb").read()
517
    )
518

519
    d1 = Dyscyplina_Naukowa.objects.create(kod="5.1", nazwa="ekonomia i finanse")
×
520
    d2 = Dyscyplina_Naukowa.objects.create(kod="1.6", nazwa="nauka o kulturze")
×
521

522
    assert Dyscyplina_Naukowa.objects.count() == 2
×
523
    pbn_client.sync_disciplines()
×
524

525
    assert Dyscyplina_Naukowa.objects.count() > 2
×
526
    d1.refresh_from_db(), d2.refresh_from_db()
×
527

528
    assert TlumaczDyscyplin.objects.przetlumacz_dyscypline(d1, 2024) is not None
×
529

530
    assert TlumaczDyscyplin.objects.przetlumacz_dyscypline(d2, 2024) is not None
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc