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

iplweb / bpp / 930a3884-329c-4ed2-be02-1b163c005b74

21 Aug 2025 08:55PM UTC coverage: 45.719% (-0.6%) from 46.337%
930a3884-329c-4ed2-be02-1b163c005b74

push

circleci

mpasternak
Merge branch 'release/v202508.1200'

4 of 9 new or added lines in 3 files covered. (44.44%)

927 existing lines in 48 files now uncovered.

17450 of 38168 relevant lines covered (45.72%)

1.18 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
UNCOV
1
from pathlib import Path
×
2

UNCOV
3
import pytest
×
UNCOV
4
from model_bakery import baker
×
5

UNCOV
6
from fixtures import MOCK_RETURNED_INSTITUTION_PUBLICATION_V2_DATA
×
UNCOV
7
from fixtures.pbn_api import MOCK_RETURNED_MONGODB_DATA
×
UNCOV
8
from pbn_api.adapters.wydawnictwo import WydawnictwoPBNAdapter
×
UNCOV
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
)
UNCOV
15
from pbn_api.const import (
×
16
    PBN_GET_DISCIPLINES_URL,
17
    PBN_GET_INSTITUTION_PUBLICATIONS_V2,
18
    PBN_POST_PUBLICATION_NO_STATEMENTS_URL,
19
)
UNCOV
20
from pbn_api.exceptions import (
×
21
    HttpException,
22
    PKZeroExportDisabled,
23
    SameDataUploadedRecently,
24
)
UNCOV
25
from pbn_api.models import Institution, Publication, SentData, TlumaczDyscyplin
×
UNCOV
26
from pbn_api.models.discipline import Discipline
×
UNCOV
27
from pbn_api.tests.utils import middleware
×
28

UNCOV
29
from django.contrib.messages import get_messages
×
30

UNCOV
31
from bpp.admin.helpers.pbn_api.gui import sprobuj_wyslac_do_pbn_gui
×
UNCOV
32
from bpp.decorators import json
×
UNCOV
33
from bpp.models import Dyscyplina_Naukowa
×
34

35

UNCOV
36
@pytest.mark.django_db
×
UNCOV
37
def test_PBNClient_test_upload_publication_nie_trzeba(
×
38
    pbn_client, pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina
39
):
40
    pbn_client.transport.return_values[PBN_POST_PUBLICATIONS_URL] = {"objectId": None}
×
41

42
    SentData.objects.updated(
×
43
        pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina,
44
        WydawnictwoPBNAdapter(
45
            pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina
46
        ).pbn_get_json(),
47
    )
48

49
    with pytest.raises(SameDataUploadedRecently):
×
50
        pbn_client.upload_publication(pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina)
×
51

52

UNCOV
53
class PBNTestClientException(Exception):
×
UNCOV
54
    pass
×
55

56

UNCOV
57
@pytest.mark.django_db
×
UNCOV
58
def test_PBNClient_test_upload_publication_exception(
×
59
    pbn_client, pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina
60
):
61
    pbn_client.transport.return_values[PBN_POST_PUBLICATIONS_URL] = (
×
62
        PBNTestClientException("nei")
63
    )
64

65
    with pytest.raises(PBNTestClientException):
×
66
        pbn_client.upload_publication(pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina)
×
67

68

UNCOV
69
@pytest.mark.django_db
×
UNCOV
70
def test_PBNClient_test_upload_publication_wszystko_ok(
×
71
    pbn_client, pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina, pbn_publication
72
):
73
    pbn_client.transport.return_values[PBN_POST_PUBLICATIONS_URL] = {
×
74
        "objectId": pbn_publication.pk
75
    }
76

77
    objectId, ret, js, bez_oswiadczen = pbn_client.upload_publication(
×
78
        pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina
79
    )
80
    assert objectId == pbn_publication.pk
×
81

82

UNCOV
83
@pytest.mark.django_db
×
UNCOV
84
def test_sync_publication_to_samo_id(
×
85
    pbn_client,
86
    pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina,
87
    pbn_publication,
88
    pbn_autor,
89
    pbn_jednostka,
90
):
91
    pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pbn_uid = pbn_publication
×
92
    pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.save()
×
93

94
    stare_id = pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pbn_uid_id
×
95

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

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

124
    pbn_client.sync_publication(pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina)
×
125

126
    pbn_publication.refresh_from_db()
×
127
    assert pbn_publication.versions[0]["baz"] == "quux"
×
128
    assert stare_id == pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pbn_uid_id
×
129

130

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

142
    pbn_client.transport.return_values[PBN_GET_PUBLICATION_BY_ID_URL.format(id=456)] = (
×
143
        MOCK_RETURNED_MONGODB_DATA
144
    )
145
    pbn_client.transport.return_values[
×
146
        PBN_GET_INSTITUTION_PUBLICATIONS_V2 + "?publicationId=123&size=10"
147
    ] = MOCK_RETURNED_INSTITUTION_PUBLICATION_V2_DATA
148

149
    pbn_client.transport.return_values[
×
150
        PBN_GET_INSTITUTION_STATEMENTS + "?publicationId=123&size=5120"
151
    ] = []
152

153
    pbn_client.sync_publication(
×
154
        f"wydawnictwo_zwarte:{pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pk}"
155
    )
156

157
    pbn_publication.refresh_from_db()
×
158
    assert pbn_publication.versions[0]["baz"] == "quux"
×
159

160

UNCOV
161
@pytest.mark.django_db
×
UNCOV
162
def test_sync_publication_nowe_id(
×
163
    pbn_client, pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina, pbn_publication
164
):
165
    assert pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pbn_uid_id is None
×
166

167
    stare_id = pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pbn_uid_id
×
168

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

185
    pbn_client.sync_publication(pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina)
×
186

187
    pbn_publication.refresh_from_db()
×
188
    assert pbn_publication.versions[0]["baz"] == "quux"
×
189
    assert stare_id != pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pbn_uid_id
×
190

191

UNCOV
192
@pytest.mark.django_db
×
UNCOV
193
def test_PBNClient_post_publication_no_statements(
×
194
    pbn_client, pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina, uczelnia
195
):
196
    uczelnia.pbn_wysylaj_bez_oswiadczen = True
×
197
    uczelnia.save()
×
198

199
    pbn_client.transport.return_values[PBN_POST_PUBLICATION_NO_STATEMENTS_URL] = [
×
200
        {"id": 123}
201
    ]
202
    pbn_client.transport.return_values[PBN_GET_PUBLICATION_BY_ID_URL.format(id=123)] = (
×
203
        MOCK_RETURNED_MONGODB_DATA
204
    )
205

206
    pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.autorzy_set.all().update(
×
207
        dyscyplina_naukowa=None
208
    )
209
    ret = pbn_client.sync_publication(pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina)
×
210
    assert ret
×
211

212

UNCOV
213
@pytest.mark.django_db
×
UNCOV
214
def test_sync_publication_wysylka_z_zerowym_pk(
×
215
    pbn_client,
216
    pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina,
217
    pbn_publication,
218
    pbn_uczelnia,
219
):
220
    pbn_uczelnia.pbn_api_nie_wysylaj_prac_bez_pk = True
×
221
    pbn_uczelnia.save()
×
222

223
    pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.punkty_kbn = 0
×
224
    pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.save()
×
225

226
    pbn_client.transport.return_values[PBN_POST_PUBLICATIONS_URL] = {
×
227
        "objectId": pbn_publication.pk
228
    }
229
    pbn_client.transport.return_values[
×
230
        PBN_GET_PUBLICATION_BY_ID_URL.format(id=pbn_publication.pk)
231
    ] = MOCK_RETURNED_MONGODB_DATA
232
    pbn_client.transport.return_values[
×
233
        PBN_GET_INSTITUTION_PUBLICATIONS_V2 + "?publicationId=123&size=10"
234
    ] = MOCK_RETURNED_INSTITUTION_PUBLICATION_V2_DATA
235
    pbn_client.transport.return_values[PBN_GET_PUBLICATION_BY_ID_URL.format(id=456)] = (
×
236
        MOCK_RETURNED_MONGODB_DATA
237
    )
238

239
    pbn_client.transport.return_values[
×
240
        PBN_GET_INSTITUTION_STATEMENTS + "?publicationId=123&size=5120"
241
    ] = []
242
    pbn_client.transport.return_values[
×
243
        PBN_GET_INSTITUTION_PUBLICATIONS_V2 + "?publicationId=123&size=10"
244
    ] = MOCK_RETURNED_INSTITUTION_PUBLICATION_V2_DATA
245

246
    # To pójdzie
247
    pbn_client.sync_publication(
×
248
        pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina, export_pk_zero=True
249
    )
250

251
    # To nie pójdzie
252
    with pytest.raises(PKZeroExportDisabled):
×
253
        pbn_client.sync_publication(
×
254
            pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina, export_pk_zero=False
255
        )
256

257

UNCOV
258
@pytest.mark.django_db
×
UNCOV
259
def test_helpers_wysylka_z_zerowym_pk(
×
260
    rf, pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina, pbn_uczelnia, admin_user
261
):
262
    pbn_uczelnia.pbn_integracja = pbn_uczelnia.pbn_aktualizuj_na_biezaco = (
×
263
        pbn_uczelnia.pbn_api_nie_wysylaj_prac_bez_pk
264
    ) = True
265
    pbn_uczelnia.save()
×
266

267
    pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.punkty_kbn = 0
×
268
    pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.save()
×
269

270
    req = rf.get("/")
×
271
    req._uczelnia = pbn_uczelnia
×
272
    req.user = admin_user
×
273

274
    # I jeszcze test z poziomu admina czy parametr z pbn_uczelnia jest przekazywany
275
    with middleware(req):
×
276
        sprobuj_wyslac_do_pbn_gui(req, pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina)
×
277
        msg = list(get_messages(req))
×
278

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

281

UNCOV
282
@pytest.mark.django_db
×
UNCOV
283
def test_helpers_wysylka_z_uid_uczelni(
×
284
    rf,
285
    pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina,
286
    pbn_autor_z_dyscyplina,
287
    pbn_uczelnia,
288
    admin_user,
289
    pbn_client,
290
):
291
    odpowiednik = baker.make(Institution, mongoId="PBN_UID_UCZELNI----")
×
292

293
    baker.make(Publication, mongoId=pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pk)
×
294

295
    pbn_uczelnia.pbn_uid = odpowiednik
×
296
    pbn_uczelnia.pbn_api_afiliacja_zawsze_na_uczelnie = True
×
297
    pbn_uczelnia.save()
×
298

299
    pbn_uczelnia.pbn_integracja = pbn_uczelnia.pbn_aktualizuj_na_biezaco = True
×
300
    pbn_uczelnia.save()
×
301

302
    pbn_client.transport.return_values[PBN_POST_PUBLICATIONS_URL] = {
×
303
        "objectId": pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pk
304
    }
305
    pbn_client.transport.return_values[
×
306
        PBN_GET_PUBLICATION_BY_ID_URL.format(
307
            id=pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pk
308
        )
309
    ] = MOCK_RETURNED_MONGODB_DATA
310
    pbn_client.transport.return_values[
×
311
        PBN_GET_INSTITUTION_PUBLICATIONS_V2
312
        + f"?publicationId={pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pk}&size=10"
313
    ] = MOCK_RETURNED_INSTITUTION_PUBLICATION_V2_DATA
314
    pbn_client.transport.return_values[PBN_GET_PUBLICATION_BY_ID_URL.format(id=456)] = (
×
315
        MOCK_RETURNED_MONGODB_DATA
316
    )
317

318
    pbn_client.transport.return_values[
×
319
        PBN_GET_INSTITUTION_STATEMENTS + "?publicationId=123&size=5120"
320
    ] = []
321

322
    req = rf.get("/")
×
323
    req._uczelnia = pbn_uczelnia
×
324
    req.user = admin_user
×
325

326
    with middleware(req):
×
327
        sprobuj_wyslac_do_pbn_gui(req, pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina)
×
328
        msg = list(get_messages(req))
×
329

330
    assert len(msg) == 1
×
331
    # assert str(msg[0]).find("nie posiada oświadczeń") > -1
332
    assert str(msg[0]).find("y zaktualizowane") > -1
×
333

334
    iv = pbn_client.transport.input_values["/api/v1/publications"]
×
335
    assert iv["body"]["authors"][0]["affiliations"][0] == odpowiednik.pk
×
336
    assert iv["body"]["institutions"][odpowiednik.pk]["objectId"] == odpowiednik.pk
×
337

338

UNCOV
339
@pytest.mark.django_db
×
UNCOV
340
def test_helpers_wysylka_bez_uid_uczelni(
×
341
    rf,
342
    pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina,
343
    pbn_autor_z_dyscyplina,
344
    pbn_uczelnia,
345
    pbn_jednostka,
346
    admin_user,
347
    pbn_client,
348
):
349
    odpowiednik = baker.make(Institution, mongoId="PBN_UID_UCZELNI----")
×
350

351
    baker.make(Publication, mongoId=pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pk)
×
352

353
    pbn_uczelnia.pbn_uid = odpowiednik
×
354
    pbn_uczelnia.pbn_api_afiliacja_zawsze_na_uczelnie = False
×
355
    pbn_uczelnia.save()
×
356

357
    pbn_uczelnia.pbn_integracja = pbn_uczelnia.pbn_aktualizuj_na_biezaco = True
×
358
    pbn_uczelnia.save()
×
359

360
    pbn_client.transport.return_values[PBN_POST_PUBLICATIONS_URL] = {
×
361
        "objectId": pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pk
362
    }
363
    pbn_client.transport.return_values[
×
364
        PBN_GET_PUBLICATION_BY_ID_URL.format(
365
            id=pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pk
366
        )
367
    ] = MOCK_RETURNED_MONGODB_DATA
368

369
    pbn_client.transport.return_values[PBN_GET_PUBLICATION_BY_ID_URL.format(id=456)] = (
×
370
        MOCK_RETURNED_MONGODB_DATA
371
    )
372

373
    pbn_client.transport.return_values[
×
374
        PBN_GET_INSTITUTION_PUBLICATIONS_V2
375
        + f"?publicationId={pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pk}&size=10"
376
    ] = MOCK_RETURNED_INSTITUTION_PUBLICATION_V2_DATA
377

378
    pbn_client.transport.return_values[
×
379
        PBN_GET_INSTITUTION_STATEMENTS + "?publicationId=123&size=5120"
380
    ] = []
381

382
    req = rf.get("/")
×
383
    req._uczelnia = pbn_uczelnia
×
384
    req.user = admin_user
×
385

386
    with middleware(req):
×
387
        sprobuj_wyslac_do_pbn_gui(req, pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina)
×
388
        msg = list(get_messages(req))
×
389

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

392
    iv = pbn_client.transport.input_values["/api/v1/publications"]
×
393
    assert iv["body"]["authors"][0]["affiliations"][0] == pbn_jednostka.pbn_uid_id
×
394
    assert (
×
395
        iv["body"]["institutions"][pbn_jednostka.pbn_uid_id]["objectId"]
396
        == pbn_jednostka.pbn_uid_id
397
    )
398

399

UNCOV
400
@pytest.mark.django_db
×
UNCOV
401
def test_sync_publication_kasuj_oswiadczenia_przed_wszystko_dobrze(
×
402
    pbn_client,
403
    pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina,
404
    pbn_publication,
405
    pbn_autor,
406
    pbn_jednostka,
407
):
408
    pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pbn_uid = pbn_publication
×
409
    pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.save()
×
410

411
    stare_id = pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pbn_uid_id
×
412

413
    pbn_client.transport.return_values[PBN_POST_PUBLICATIONS_URL] = {
×
414
        "objectId": pbn_publication.pk
415
    }
416
    pbn_client.transport.return_values[
×
417
        PBN_GET_PUBLICATION_BY_ID_URL.format(id=pbn_publication.pk)
418
    ] = MOCK_RETURNED_MONGODB_DATA
419
    pbn_client.transport.return_values[
×
420
        PBN_GET_INSTITUTION_PUBLICATIONS_V2 + "?publicationId=123&size=10"
421
    ] = MOCK_RETURNED_INSTITUTION_PUBLICATION_V2_DATA
422
    pbn_client.transport.return_values[PBN_GET_PUBLICATION_BY_ID_URL.format(id=456)] = (
×
423
        MOCK_RETURNED_MONGODB_DATA
424
    )
425

426
    pbn_client.transport.return_values[
×
427
        PBN_DELETE_PUBLICATION_STATEMENT.format(publicationId=pbn_publication.pk)
428
    ] = []
429
    pbn_client.transport.return_values[
×
430
        PBN_GET_INSTITUTION_STATEMENTS + "?publicationId=123&size=5120"
431
    ] = [
432
        {
433
            "id": "eaec3254-2eb1-44d9-8c3c-e68fc2a48bd9",
434
            "addedTimestamp": "2020.05.06",
435
            "institutionId": pbn_jednostka.pbn_uid_id,
436
            "personId": pbn_autor.pbn_uid_id,
437
            "publicationId": pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pbn_uid_id,
438
            "area": "200",
439
            "inOrcid": True,
440
            "type": "FOOBAR",
441
        }
442
    ]
443

444
    pbn_client.sync_publication(
×
445
        pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina,
446
        delete_statements_before_upload=True,
447
    )
448

449
    pbn_publication.refresh_from_db()
×
450
    assert pbn_publication.versions[0]["baz"] == "quux"
×
451
    assert stare_id == pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pbn_uid_id
×
452

453

UNCOV
454
@pytest.mark.django_db
×
UNCOV
455
def test_sync_publication_kasuj_oswiadczenia_przed_blad_400_nie_zaburzy(
×
456
    pbn_client,
457
    pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina,
458
    pbn_publication,
459
    pbn_autor,
460
    pbn_jednostka,
461
):
462
    pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pbn_uid = pbn_publication
×
463
    pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.save()
×
464

465
    stare_id = pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pbn_uid_id
×
466

467
    pbn_client.transport.return_values[PBN_POST_PUBLICATIONS_URL] = {
×
468
        "objectId": pbn_publication.pk
469
    }
470
    pbn_client.transport.return_values[
×
471
        PBN_GET_PUBLICATION_BY_ID_URL.format(id=pbn_publication.pk)
472
    ] = MOCK_RETURNED_MONGODB_DATA
473
    pbn_client.transport.return_values[
×
474
        PBN_GET_INSTITUTION_PUBLICATIONS_V2
475
        + f"?publicationId={pbn_publication.pk}&size=10"
476
    ] = MOCK_RETURNED_INSTITUTION_PUBLICATION_V2_DATA
477
    pbn_client.transport.return_values[PBN_GET_PUBLICATION_BY_ID_URL.format(id=456)] = (
×
478
        MOCK_RETURNED_MONGODB_DATA
479
    )
480

481
    url = PBN_DELETE_PUBLICATION_STATEMENT.format(publicationId=pbn_publication.pk)
×
482
    err_json = {
×
483
        "code": 400,
484
        "message": "Bad Request",
485
        "description": "Validation failed.",
486
        "details": {
487
            "publicationId": "Nie można usunąć oświadczeń. Nie istnieją oświadczenia dla publikacji "
488
            "(id = {pbn_publication.pk}) i instytucji (id = XXX)."
489
        },
490
    }
491

492
    pbn_client.transport.return_values[url] = HttpException(
×
493
        400, url, json.dumps(err_json)
494
    )
495

496
    pbn_client.transport.return_values[
×
497
        PBN_GET_INSTITUTION_STATEMENTS + "?publicationId=123&size=5120"
498
    ] = [
499
        {
500
            "id": "eaec3254-2eb1-44d9-8c3c-e68fc2a48bd9",
501
            "addedTimestamp": "2020.05.06",
502
            "institutionId": pbn_jednostka.pbn_uid_id,
503
            "personId": pbn_autor.pbn_uid_id,
504
            "publicationId": pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pbn_uid_id,
505
            "area": "200",
506
            "inOrcid": True,
507
            "type": "FOOBAR",
508
        }
509
    ]
510

511
    pbn_client.sync_publication(
×
512
        pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina,
513
        delete_statements_before_upload=True,
514
    )
515

516
    pbn_publication.refresh_from_db()
×
517
    assert pbn_publication.versions[0]["baz"] == "quux"
×
518
    assert stare_id == pbn_wydawnictwo_zwarte_z_autorem_z_dyscyplina.pbn_uid_id
×
519

520

UNCOV
521
def test_get_disciplines(pbn_client):
×
522
    pbn_client.transport.return_values[PBN_GET_DISCIPLINES_URL] = json.loads(
×
523
        open(Path(__file__).parent / "fixture_test_get_disciplines.json", "rb").read()
524
    )
525
    ret = pbn_client.get_disciplines()
×
526
    assert "validityDateFrom" in ret[0]
×
527

528

UNCOV
529
@pytest.mark.django_db
×
UNCOV
530
def test_download_disciplines(pbn_client):
×
531
    pbn_client.transport.return_values[PBN_GET_DISCIPLINES_URL] = json.loads(
×
532
        open(Path(__file__).parent / "fixture_test_get_disciplines.json", "rb").read()
533
    )
534

535
    assert Discipline.objects.count() == 0
×
536
    pbn_client.download_disciplines()
×
537
    assert Discipline.objects.count() != 0
×
538

539

UNCOV
540
@pytest.mark.django_db
×
UNCOV
541
def test_sync_disciplines(pbn_client):
×
542
    pbn_client.transport.return_values[PBN_GET_DISCIPLINES_URL] = json.loads(
×
543
        open(Path(__file__).parent / "fixture_test_get_disciplines.json", "rb").read()
544
    )
545

546
    d1 = Dyscyplina_Naukowa.objects.create(kod="5.1", nazwa="ekonomia i finanse")
×
547
    d2 = Dyscyplina_Naukowa.objects.create(kod="1.6", nazwa="nauka o kulturze")
×
548

549
    assert Dyscyplina_Naukowa.objects.count() == 2
×
550
    pbn_client.sync_disciplines()
×
551

552
    assert Dyscyplina_Naukowa.objects.count() > 2
×
553
    d1.refresh_from_db(), d2.refresh_from_db()
×
554

555
    assert TlumaczDyscyplin.objects.przetlumacz_dyscypline(d1, 2024) is not None
×
556

557
    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