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

iplweb / bpp / 55ddaca6-3f38-4b6a-ad10-3679ec22834c

23 Aug 2025 09:29PM UTC coverage: 46.899% (+1.1%) from 45.781%
55ddaca6-3f38-4b6a-ad10-3679ec22834c

push

circleci

mpasternak
Merge branch 'release/v202508.1202'

1 of 1 new or added line in 1 file covered. (100.0%)

433 existing lines in 31 files now uncovered.

17908 of 38184 relevant lines covered (46.9%)

1.2 hits per line

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

23.87
src/bpp/tests/test_cache/test_cache.py
UNCOV
1
import pytest
1✔
UNCOV
2
from model_bakery import baker
1✔
3

UNCOV
4
from bpp.models import Praca_Doktorska
1✔
UNCOV
5
from bpp.models.autor import Autor
1✔
UNCOV
6
from bpp.models.cache import Autorzy, Rekord
1✔
UNCOV
7
from bpp.models.openaccess import (
1✔
8
    Czas_Udostepnienia_OpenAccess,
9
    Licencja_OpenAccess,
10
    Wersja_Tekstu_OpenAccess,
11
)
UNCOV
12
from bpp.models.struktura import Jednostka
1✔
UNCOV
13
from bpp.models.system import Charakter_Formalny, Jezyk, Typ_KBN, Typ_Odpowiedzialnosci
1✔
UNCOV
14
from bpp.models.wydawnictwo_ciagle import Wydawnictwo_Ciagle, Wydawnictwo_Ciagle_Autor
1✔
UNCOV
15
from bpp.models.zrodlo import Zrodlo
1✔
16

17

UNCOV
18
@pytest.mark.django_db
1✔
UNCOV
19
def test_Autorzy_original(wydawnictwo_ciagle_z_dwoma_autorami):
1✔
20
    assert (
×
21
        Autorzy.objects.first().original.pk
22
        in wydawnictwo_ciagle_z_dwoma_autorami.autorzy_set.all().values_list(
23
            "pk", flat=True
24
        )
25
    )
26

27

UNCOV
28
def test_opis_bibliograficzny_wydawnictwo_ciagle(
1✔
29
    transactional_db, standard_data, denorms, autor_jan_kowalski, jednostka
30
):
31
    wc = baker.make(Wydawnictwo_Ciagle, szczegoly="Sz", uwagi="U")
×
32

33
    rekord = Rekord.objects.all()[0]
×
34

35
    assert wc.opis_bibliograficzny() == rekord.opis_bibliograficzny_cache
×
36

37
    wc.dodaj_autora(autor_jan_kowalski, jednostka)
×
38

39
    assert wc.opis_bibliograficzny() != rekord.opis_bibliograficzny_cache
×
40
    denorms.flush()
×
41
    assert wc.opis_bibliograficzny() != rekord.opis_bibliograficzny_cache
×
42

43

UNCOV
44
def test_opis_bibliograficzny_praca_doktorska(
1✔
45
    standard_data, autor_jan_kowalski, jednostka, denorms
46
):
47
    wc = baker.make(
×
48
        Praca_Doktorska,
49
        szczegoly="Sz",
50
        uwagi="U",
51
        autor=autor_jan_kowalski,
52
        jednostka=jednostka,
53
    )
54

55
    rekord_opis = Rekord.objects.all()[0].opis_bibliograficzny_cache
×
56
    wc_opis = wc.opis_bibliograficzny()
×
57
    assert rekord_opis == wc_opis
×
58

59

UNCOV
60
def test_kasowanie(db, standard_data):
1✔
61
    assert Rekord.objects.count() == 0
×
62

63
    wc = baker.make(Wydawnictwo_Ciagle)
×
64
    assert Rekord.objects.count() == 1
×
65

66
    wc.delete()
×
67
    assert Rekord.objects.count() == 0
×
68

69

UNCOV
70
def test_opis_bibliograficzny_dependent(standard_data, denorms):
1✔
71
    """Stwórz i skasuj Wydawnictwo_Ciagle_Autor i sprawdź, jak to
72
    wpłynie na opis."""
73

74
    c = baker.make(
×
75
        Wydawnictwo_Ciagle, tytul_oryginalny="Test", szczegoly="sz", uwagi="u"
76
    )
77
    assert "KOWALSKI" not in c.opis_bibliograficzny()
×
78
    assert "KOWALSKI" not in Rekord.objects.first().opis_bibliograficzny_cache
×
79

80
    a = baker.make(Autor, imiona="Jan", nazwisko="Kowalski")
×
81
    j = baker.make(Jednostka)
×
82
    wca = c.dodaj_autora(a, j)
×
83

84
    denorms.flush()
×
85

86
    assert "KOWALSKI" in c.opis_bibliograficzny()
×
87
    assert "KOWALSKI" in Rekord.objects.first().opis_bibliograficzny_cache
×
88

89
    wca.delete()
×
90

91
    denorms.flush()
×
92

93
    assert "KOWALSKI" not in c.opis_bibliograficzny()
×
94
    assert "KOWALSKI" not in Rekord.objects.first().opis_bibliograficzny_cache
×
95

96

UNCOV
97
def test_opis_bibliograficzny_zrodlo(standard_data, denorms):
1✔
98
    """Zmień nazwę źródła i sprawdź, jak to wpłynie na opis."""
99

100
    z = baker.make(Zrodlo, nazwa="OMG", skrot="wutlolski")
×
101
    c = baker.make(Wydawnictwo_Ciagle, szczegoly="SZ", uwagi="U", zrodlo=z)
×
102

103
    assert "wutlolski" in c.opis_bibliograficzny()
×
104
    assert "wutlolski" in Rekord.objects.first().opis_bibliograficzny_cache
×
105

106
    z.nazwa = "LOL"
×
107
    z.skrot = "FOKA"
×
108
    z.save()
×
109

110
    denorms.flush()
×
111

112
    assert "FOKA" in c.opis_bibliograficzny()
×
113
    assert "FOKA" in Rekord.objects.first().opis_bibliograficzny_cache
×
114

115
    z.nazwa = "LOL 2"
×
116
    z.skrot = "foka 2"
×
117
    z.save()
×
118

119
    denorms.flush()
×
120

121
    assert "foka 2" in c.opis_bibliograficzny()
×
122
    assert "foka 2" in Rekord.objects.first().opis_bibliograficzny_cache
×
123

124

UNCOV
125
@pytest.mark.django_db
1✔
UNCOV
126
def test_post_save_cache(doktorat):
1✔
127
    assert Rekord.objects.all().count() == 1
×
128

129
    doktorat.tytul = "zmieniono"
×
130
    doktorat.save()
×
131

132
    assert Rekord.objects.get_original(doktorat).tytul == "zmieniono"
×
133

134

UNCOV
135
def test_deletion_cache(doktorat):
1✔
136
    assert Rekord.objects.all().count() == 1
×
137

138
    doktorat.delete()
×
139
    assert Rekord.objects.all().count() == 0
×
140

141

UNCOV
142
@pytest.mark.django_db
1✔
UNCOV
143
def test_wca_delete_cache(wydawnictwo_ciagle_z_dwoma_autorami, denorms):
1✔
144
    """Czy skasowanie obiektu Wydawnictwo_Ciagle_Autor zmieni opis
145
    wydawnictwa ciągłego w Rekordy materialized view?"""
146

147
    assert Rekord.objects.all().count() == 1
×
148
    assert Wydawnictwo_Ciagle_Autor.objects.all().count() == 2
×
149

150
    denorms.flush()
×
151

152
    r = Rekord.objects.all()[0]
×
153
    assert "NOWAK" in r.opis_bibliograficzny_cache
×
154
    assert "KOWALSKI" in r.opis_bibliograficzny_cache
×
155

156
    Wydawnictwo_Ciagle_Autor.objects.all()[0].delete()
×
157
    aca = Wydawnictwo_Ciagle_Autor.objects.all()[0]
×
158
    aca.delete()
×
159

160
    denorms.flush()
×
161

162
    assert Autorzy.objects.filter_rekord(aca).count() == 0
×
163
    assert Rekord.objects.all().count() == 1
×
164

165
    r = Rekord.objects.all()[0]
×
166
    assert "NOWAK" not in r.opis_bibliograficzny_cache
×
167
    assert "KOWALSKI" not in r.opis_bibliograficzny_cache
×
168

169

UNCOV
170
@pytest.mark.django_db
1✔
UNCOV
171
def test_caching_kasowanie_autorow(wydawnictwo_ciagle_z_dwoma_autorami):
1✔
172
    for wca in Wydawnictwo_Ciagle_Autor.objects.all().only("autor"):
×
173
        wca.autor.delete()
×
174

175
    assert Wydawnictwo_Ciagle_Autor.objects.count() == 0
×
176
    assert Rekord.objects.all().count() == 1
×
177

178
    r = Rekord.objects.all()[0]
×
179
    assert "NOWAK" not in r.opis_bibliograficzny_cache
×
180
    assert "KOWALSKI" not in r.opis_bibliograficzny_cache
×
181

182

UNCOV
183
@pytest.mark.django_db
1✔
UNCOV
184
def test_caching_kasowanie_typu_odpowiedzialnosci_autorow(
1✔
185
    wydawnictwo_ciagle_z_dwoma_autorami,
186
):
187
    assert (
×
188
        Wydawnictwo_Ciagle_Autor.objects.filter(
189
            rekord=wydawnictwo_ciagle_z_dwoma_autorami
190
        ).count()
191
        == 2
192
    )
193

194
    Typ_Odpowiedzialnosci.objects.all().delete()
×
195

196
    assert Wydawnictwo_Ciagle_Autor.objects.count() == 0
×
197
    assert Rekord.objects.all().count() == 1
×
198

199
    r = Rekord.objects.all()[0]
×
200
    assert "NOWAK" not in r.opis_bibliograficzny_cache
×
201
    assert "KOWALSKI" not in r.opis_bibliograficzny_cache
×
202

203

UNCOV
204
@pytest.mark.django_db
1✔
UNCOV
205
def test_caching_kasowanie_zrodla(
1✔
206
    denorms,
207
    wydawnictwo_ciagle_z_dwoma_autorami,
208
):
209
    assert Zrodlo.objects.all().count() == 1
×
210

211
    z = Zrodlo.objects.all()[0]
×
212
    z.delete()  # WCA ma zrodlo.on_delete=SET_NULL
×
213

214
    denorms.flush()
×
215
    assert Rekord.objects.all().count() == 1
×
216
    assert Wydawnictwo_Ciagle.objects.all().count() == 1
×
217

218
    r = Rekord.objects.all()[0]
×
219
    assert "NOWAK" in r.opis_bibliograficzny_cache
×
220
    assert "KOWALSKI" in r.opis_bibliograficzny_cache
×
221
    assert z.skrot not in r.opis_bibliograficzny_cache
×
222
    assert "None" not in r.opis_bibliograficzny_cache
×
223

224

UNCOV
225
@pytest.mark.django_db
1✔
UNCOV
226
def test_caching_kasowanie_jezyka(wydawnictwo_ciagle_z_dwoma_autorami):
1✔
227
    xng = Jezyk.objects.create(skrot="xng.", nazwa="taki", pk=500)
×
228
    wydawnictwo_ciagle_z_dwoma_autorami.jezyk = xng
×
229
    wydawnictwo_ciagle_z_dwoma_autorami.save()
×
230

231
    assert Rekord.objects.all().count() == 1
×
232
    xng.delete()
×
233

234
    assert Rekord.objects.all().count() == 0
×
235

236

UNCOV
237
@pytest.mark.django_db
1✔
UNCOV
238
@pytest.mark.parametrize(
1✔
239
    "attrname, klass, skrot, ma_zostac",
240
    [
241
        ("typ_kbn", Typ_KBN, "PO", 0),
242
        ("charakter_formalny", Charakter_Formalny, "PAT", 0),
243
        ("openaccess_wersja_tekstu", Wersja_Tekstu_OpenAccess, "FINAL_AUTHOR", 1),
244
        ("openaccess_licencja", Licencja_OpenAccess, "CC-BY-ND", 1),
245
        (
246
            "openaccess_czas_publikacji",
247
            Czas_Udostepnienia_OpenAccess,
248
            "AT_PUBLICATION",
249
            1,
250
        ),
251
    ],
252
)
UNCOV
253
def test_usuwanie_powiazanych_vs_rekord(
1✔
254
    wydawnictwo_ciagle_z_dwoma_autorami,
255
    patent,
256
    standard_data,
257
    openaccess_data,
258
    attrname,
259
    klass,
260
    skrot,
261
    ma_zostac,
262
):
263
    o = klass.objects.get(skrot=skrot)
×
264
    setattr(wydawnictwo_ciagle_z_dwoma_autorami, attrname, o)
×
265
    wydawnictwo_ciagle_z_dwoma_autorami.save()
×
266

267
    setattr(patent, attrname, o)
×
268
    patent.save()
×
269

270
    assert Rekord.objects.all().count() == 2
×
271
    o.delete()
×
272
    assert Rekord.objects.all().count() == ma_zostac
×
273

274

UNCOV
275
@pytest.mark.django_db
1✔
UNCOV
276
def test_caching_kasowanie_typu_kbn(wydawnictwo_ciagle_z_dwoma_autorami, standard_data):
1✔
277
    tk = Typ_KBN.objects.all().first()
×
278

279
    wydawnictwo_ciagle_z_dwoma_autorami.typ_kbn = tk
×
280
    wydawnictwo_ciagle_z_dwoma_autorami.save()
×
281

282
    assert Rekord.objects.all().count() == 1
×
283
    tk.delete()
×
284

285
    assert Rekord.objects.all().count() == 0
×
286

287

UNCOV
288
@pytest.mark.django_db
1✔
UNCOV
289
def test_caching_kasowanie_charakteru_formalnego(
1✔
290
    wydawnictwo_ciagle_z_dwoma_autorami,
291
    patent,
292
    autor_jan_kowalski,
293
    jednostka,
294
    standard_data,
295
):
296
    patent.dodaj_autora(autor_jan_kowalski, jednostka)
×
297

298
    cf = Charakter_Formalny.objects.all().first()
×
299

300
    wydawnictwo_ciagle_z_dwoma_autorami.charakter_formalny = cf
×
301
    wydawnictwo_ciagle_z_dwoma_autorami.save()
×
302

303
    assert Rekord.objects.all().count() == 2
×
304
    Charakter_Formalny.objects.all().delete()
×
305

306
    assert Rekord.objects.all().count() == 0
×
307

308

UNCOV
309
@pytest.mark.django_db
1✔
UNCOV
310
def test_caching_kasowanie_wydzialu(
1✔
311
    autor_jan_kowalski, jednostka, wydzial, wydawnictwo_ciagle, typy_odpowiedzialnosci
312
):
313
    assert jednostka.wydzial == wydzial
×
314

315
    wydawnictwo_ciagle.dodaj_autora(autor_jan_kowalski, jednostka)
×
316

317
    assert Rekord.objects.all().count() == 1
×
318
    assert Jednostka.objects.all().count() == 1
×
319
    wydzial.delete()
×
320

321
    assert Rekord.objects.all().count() == 1
×
322
    assert Rekord.objects.all()[0].original.autorzy.all().count() == 0
×
323
    assert Jednostka.objects.all().count() == 0
×
324

325

UNCOV
326
@pytest.mark.django_db
1✔
UNCOV
327
def test_caching_kasowanie_uczelni(
1✔
328
    autor_jan_kowalski,
329
    jednostka,
330
    wydzial,
331
    uczelnia,
332
    wydawnictwo_ciagle,
333
    typy_odpowiedzialnosci,
334
):
335
    assert wydzial.uczelnia == uczelnia
×
336
    assert jednostka.wydzial == wydzial
×
337
    wydawnictwo_ciagle.dodaj_autora(autor_jan_kowalski, jednostka)
×
338

339
    assert Rekord.objects.all().count() == 1
×
340
    assert Jednostka.objects.all().count() == 1
×
341
    uczelnia.delete()
×
342

343
    assert Rekord.objects.all().count() == 1
×
344
    assert Rekord.objects.all()[0].original.autorzy.all().count() == 0
×
345
    assert Jednostka.objects.all().count() == 0
×
346

347

UNCOV
348
@pytest.mark.django_db
1✔
UNCOV
349
def test_caching_full_refresh(wydawnictwo_ciagle_z_dwoma_autorami, denorms):
1✔
350
    assert Rekord.objects.all().count() == 1
×
351
    denorms.rebuildall()
×
352
    assert Rekord.objects.all().count() == 1
×
353

354

UNCOV
355
@pytest.mark.django_db
1✔
UNCOV
356
def test_caching_kolejnosc(wydawnictwo_ciagle_z_dwoma_autorami, denorms):
1✔
357
    a = list(Wydawnictwo_Ciagle_Autor.objects.all().order_by("kolejnosc"))
×
358
    assert len(a) == 2
×
359

360
    denorms.flush()
×
361

362
    x = Rekord.objects.get_original(wydawnictwo_ciagle_z_dwoma_autorami)
×
363
    assert "[AUT.] KOWALSKI JAN, NOWAK JAN" in x.opis_bibliograficzny_cache
×
364

365
    k = a[0].kolejnosc
×
366
    a[0].kolejnosc = a[1].kolejnosc
×
367
    a[1].kolejnosc = k
×
368

369
    a[0].save()
×
370
    a[1].save()
×
371

372
    denorms.flush()
×
373
    x = Rekord.objects.get_original(wydawnictwo_ciagle_z_dwoma_autorami)
×
374
    assert "[AUT.] NOWAK JAN, KOWALSKI JAN" in x.opis_bibliograficzny_cache
×
375

376

UNCOV
377
@pytest.mark.django_db
1✔
UNCOV
378
def test_rekord_describe_content_type(wydawnictwo_zwarte):
1✔
379
    assert "wydawnictwo" in Rekord.objects.first().describe_content_type
×
380

381

UNCOV
382
@pytest.mark.django_db
1✔
UNCOV
383
def test_Rekord_get_absolute_url(wydawnictwo_zwarte):
1✔
384
    assert Rekord.objects.first().get_absolute_url().startswith("/")
×
385

386

UNCOV
387
def test_aktualizacja_rekordu_autora(typy_odpowiedzialnosci, denorms):
1✔
388
    w = baker.make(Wydawnictwo_Ciagle)
×
389

390
    a = baker.make(Autor)
×
391
    b = baker.make(Autor)
×
392

393
    j = baker.make(Jednostka)
×
394
    r = w.dodaj_autora(a, j, zapisany_jako="Test")
×
395

396
    assert b.pk not in Rekord.objects.all().first().autorzy.all().values_list(
×
397
        "autor", flat=True
398
    )
399

400
    r.autor = b
×
401
    r.save()
×
402

403
    denorms.flush()
×
404

405
    # czy cache jest odświeżone
406
    assert b.pk in Rekord.objects.all().first().autorzy.all().values_list(
×
407
        "autor", flat=True
408
    )
409

410

UNCOV
411
@pytest.mark.django_db
1✔
UNCOV
412
def test_prace_autora_z_afiliowanych_jednostek(typy_odpowiedzialnosci):
1✔
413
    a1 = baker.make(Autor, nazwisko="X", imiona="X")
×
414
    a2 = baker.make(Autor, nazwisko="Y", imiona="Y")
×
415

416
    nasza = baker.make(Jednostka, skupia_pracownikow=True)
×
417
    obca = baker.make(Jednostka, skupia_pracownikow=False)
×
418

419
    wc1 = baker.make(Wydawnictwo_Ciagle, impact_factor=10, rok=2017)
×
420
    wc2 = baker.make(Wydawnictwo_Ciagle, impact_factor=10, rok=2017)
×
421

422
    wc1.dodaj_autora(a1, nasza)
×
423
    wc1.dodaj_autora(a2, nasza)
×
424

425
    wc2.dodaj_autora(a1, obca, afiliuje=False)
×
426
    wc2.dodaj_autora(a2, nasza)
×
427

428
    assert Rekord.objects.prace_autora(a1).count() == 2
×
429
    assert Rekord.objects.prace_autora(a2).count() == 2
×
430

431
    assert Rekord.objects.prace_autora_z_afiliowanych_jednostek(a1).count() == 1
×
432
    assert Rekord.objects.prace_autora_z_afiliowanych_jednostek(a2).count() == 2
×
433

434

UNCOV
435
@pytest.mark.django_db
1✔
UNCOV
436
def test_rebuild_ciagle(
1✔
437
    django_assert_max_num_queries, wydawnictwo_ciagle_z_dwoma_autorami, denorms
438
):
439
    with django_assert_max_num_queries(79):
×
440
        denorms.rebuildall("Wydawnictwo_Ciagle")
×
441

442

UNCOV
443
@pytest.mark.django_db
1✔
UNCOV
444
def test_rebuild_zwarte(
1✔
445
    django_assert_max_num_queries, wydawnictwo_zwarte_z_autorem, denorms
446
):
447
    with django_assert_max_num_queries(58):
×
448
        denorms.rebuildall("Wydawnictwo_Zwarte")
×
449

450

UNCOV
451
@pytest.mark.django_db
1✔
UNCOV
452
def test_rebuild_patent(django_assert_max_num_queries, patent, denorms):
1✔
453
    with django_assert_max_num_queries(41):
×
454
        denorms.rebuildall("Patent")
×
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

© 2025 Coveralls, Inc