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

iplweb / bpp / 3c407b5b-8434-4f25-9e12-005b14d23a79

07 Sep 2025 02:53PM UTC coverage: 33.615% (-8.7%) from 42.328%
3c407b5b-8434-4f25-9e12-005b14d23a79

push

circleci

mpasternak
Merge branch 'release/v202509.1221'

1 of 45 new or added lines in 2 files covered. (2.22%)

3993 existing lines in 129 files now uncovered.

16522 of 49150 relevant lines covered (33.62%)

0.34 hits per line

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

0.0
src/pbn_api/tests/test_admin.py
UNCOV
1
from unittest.mock import patch
×
2

UNCOV
3
import pytest
×
UNCOV
4
from django.urls import reverse
×
UNCOV
5
from model_bakery import baker
×
UNCOV
6
from selenium.webdriver.support.wait import WebDriverWait
×
7

UNCOV
8
from pbn_api.admin import OswiadczeniaInstytucjiAdmin, PBN_Export_QueueAdmin
×
UNCOV
9
from pbn_api.client import PBN_DELETE_PUBLICATION_STATEMENT
×
UNCOV
10
from pbn_api.models import OswiadczenieInstytucji, PBN_Export_Queue, SentData
×
UNCOV
11
from pbn_api.tests.utils import middleware
×
12

UNCOV
13
from django.contrib.admin.sites import AdminSite
×
UNCOV
14
from django.contrib.contenttypes.models import ContentType
×
UNCOV
15
from django.contrib.messages import get_messages
×
16

UNCOV
17
from django_bpp.selenium_util import LONG_WAIT_TIME, wait_for, wait_for_page_load
×
18

19

UNCOV
20
def test_SentDataAdmin_list_filter_works(admin_client):
×
21
    url = reverse("admin:pbn_api_sentdata_changelist")
×
22
    res = admin_client.get(url + "?q=123")
×
23
    assert res.status_code == 200
×
24

25

UNCOV
26
def test_PublisherAdmin_search_works(admin_client):
×
27
    url = reverse("admin:pbn_api_publisher_changelist")
×
28
    res = admin_client.get(url + "?q=123")
×
29
    assert res.status_code == 200
×
30

31

UNCOV
32
@pytest.mark.django_db
×
UNCOV
33
def test_OswiadczenieInstytucji_delete_model(pbn_uczelnia, pbn_client, rf):
×
34
    oi = baker.make(OswiadczenieInstytucji)
×
35
    req = rf.get("/")
×
36

37
    pbn_client.transport.return_values[
×
38
        PBN_DELETE_PUBLICATION_STATEMENT.format(publicationId=oi.publicationId_id)
39
    ] = {"1": "2"}
40

41
    with middleware(req):
×
42
        OswiadczeniaInstytucjiAdmin(OswiadczenieInstytucji, None).delete_model(
×
43
            req, oi, pbn_client=pbn_client
44
        )
45

46
    try:
×
47
        OswiadczenieInstytucji.objects.get(pk=oi.pk)
×
48
        msg = list(get_messages(req))
×
49
        if msg:
×
50
            raise Exception(str(msg))
×
51
        raise Exception("Nie został skasowany")
×
52
    except OswiadczenieInstytucji.DoesNotExist:
×
53
        assert True  # good
×
54

55

UNCOV
56
@pytest.mark.django_db
×
UNCOV
57
def test_pbn_api_admin_SentDataAdmin_wyslij_ponownie(
×
58
    wydawnictwo_zwarte, admin_browser, channels_live_server
59
):
UNCOV
60
    s = SentData.objects.create(
×
61
        object_id=wydawnictwo_zwarte.pk,
62
        content_type=ContentType.objects.get_for_model(wydawnictwo_zwarte),
63
        data_sent={"foo": "bar"},
64
    )
65

UNCOV
66
    with wait_for_page_load(admin_browser):
×
UNCOV
67
        admin_browser.visit(
×
68
            channels_live_server.url + f"/admin/pbn_api/sentdata/{s.pk}/change"
69
        )
70

UNCOV
71
    wait_for(lambda: len(admin_browser.find_by_id("wyslij-ponownie")) > 0)
×
72

UNCOV
73
    elem = admin_browser.find_by_id("wyslij-ponownie")
×
74

UNCOV
75
    with wait_for_page_load(admin_browser):
×
UNCOV
76
        elem.click()
×
77

UNCOV
78
    WebDriverWait(admin_browser, LONG_WAIT_TIME).until(
×
79
        lambda *args, **kw: "nie będzie eksportowany" in admin_browser.html
80
    )
UNCOV
81
    assert True
×
82

83

84
# Tests for PBN_Export_QueueAdmin
85

86

UNCOV
87
@pytest.mark.django_db
×
UNCOV
88
def test_pbn_export_queue_admin_changelist_loads(admin_client):
×
89
    """Test that PBN_Export_Queue changelist loads without errors"""
90
    url = reverse("admin:pbn_api_pbn_export_queue_changelist")
×
91
    res = admin_client.get(url)
×
92
    assert res.status_code == 200
×
93

94

UNCOV
95
@pytest.mark.django_db
×
UNCOV
96
def test_pbn_export_queue_admin_search_works(admin_client):
×
97
    """Test that PBN_Export_Queue admin search works"""
98
    url = reverse("admin:pbn_api_pbn_export_queue_changelist")
×
99
    res = admin_client.get(url + "?q=testuser")
×
100
    assert res.status_code == 200
×
101

102

UNCOV
103
@pytest.mark.django_db
×
UNCOV
104
def test_pbn_export_queue_admin_resend_single_item(wydawnictwo_ciagle, admin_user):
×
105
    """Test the _resend_single_item method"""
106
    queue_item = baker.make(
×
107
        PBN_Export_Queue,
108
        rekord_do_wysylki=wydawnictwo_ciagle,
109
        zamowil=admin_user,
110
        wysylke_zakonczono="2023-01-01 00:00:00",
111
        zakonczono_pomyslnie=True,
112
        retry_after_user_authorised=True,
113
    )
114

115
    admin_instance = PBN_Export_QueueAdmin(PBN_Export_Queue, AdminSite())
×
116

117
    with patch("pbn_api.tasks.task_sprobuj_wyslac_do_pbn.delay") as mock_task:
×
UNCOV
118
        admin_instance._resend_single_item(queue_item, admin_user, " (test)")
×
119

120
        # Check that status fields were reset
UNCOV
121
        queue_item.refresh_from_db()
×
UNCOV
122
        assert queue_item.wysylke_zakonczono is None
×
123
        assert queue_item.zakonczono_pomyslnie is None
×
124
        assert queue_item.retry_after_user_authorised is None
×
125

126
        # Check that message was added to komunikat
UNCOV
127
        assert (
×
128
            f"Ponownie wysłano przez użytkownika: {admin_user} (test)"
129
            in queue_item.komunikat
130
        )
131

132
        # Check that task was called
UNCOV
133
        mock_task.assert_called_once_with(queue_item.pk)
×
134

135

UNCOV
136
@pytest.mark.django_db
×
UNCOV
137
def test_pbn_export_queue_admin_resend_action(wydawnictwo_ciagle, admin_user, rf):
×
138
    """Test the resend_to_pbn_action bulk action"""
UNCOV
139
    queue_item1 = baker.make(
×
140
        PBN_Export_Queue,
141
        rekord_do_wysylki=wydawnictwo_ciagle,
142
        zamowil=admin_user,
143
        wysylke_zakonczono="2023-01-01 00:00:00",
144
        zakonczono_pomyslnie=True,
145
    )
146

UNCOV
147
    queue_item2 = baker.make(
×
148
        PBN_Export_Queue,
149
        rekord_do_wysylki=wydawnictwo_ciagle,
150
        zamowil=admin_user,
151
        wysylke_zakonczono="2023-01-01 00:00:00",
152
        zakonczono_pomyslnie=False,
153
    )
154

UNCOV
155
    queryset = PBN_Export_Queue.objects.filter(pk__in=[queue_item1.pk, queue_item2.pk])
×
156

157
    request = rf.post("/")
×
UNCOV
158
    request.user = admin_user
×
159

160
    admin_instance = PBN_Export_QueueAdmin(PBN_Export_Queue, AdminSite())
×
161

162
    with middleware(request):
×
UNCOV
163
        with patch("pbn_api.tasks.task_sprobuj_wyslac_do_pbn.delay") as mock_task:
×
164
            admin_instance.resend_to_pbn_action(request, queryset)
×
165

166
            # Check that both items were processed
UNCOV
167
            queue_item1.refresh_from_db()
×
168
            queue_item2.refresh_from_db()
×
169

UNCOV
170
            assert queue_item1.wysylke_zakonczono is None
×
171
            assert queue_item1.zakonczono_pomyslnie is None
×
172
            assert queue_item2.wysylke_zakonczono is None
×
UNCOV
173
            assert queue_item2.zakonczono_pomyslnie is None
×
174

175
            # Check that messages were added
176
            assert (
×
177
                f"Ponownie wysłano przez użytkownika: {admin_user} (akcja masowa)"
178
                in queue_item1.komunikat
179
            )
180
            assert (
×
181
                f"Ponownie wysłano przez użytkownika: {admin_user} (akcja masowa)"
182
                in queue_item2.komunikat
183
            )
184

185
            # Check that tasks were called for both items
UNCOV
186
            assert mock_task.call_count == 2
×
187

188

UNCOV
189
@pytest.mark.django_db
×
190
def test_pbn_export_queue_admin_response_change_resend(
×
191
    wydawnictwo_ciagle, admin_user, rf
192
):
193
    """Test the response_change method with _resend_to_pbn POST parameter"""
UNCOV
194
    queue_item = baker.make(
×
195
        PBN_Export_Queue,
196
        rekord_do_wysylki=wydawnictwo_ciagle,
197
        zamowil=admin_user,
198
        wysylke_zakonczono="2023-01-01 00:00:00",
199
        zakonczono_pomyslnie=True,
200
    )
201

UNCOV
202
    request = rf.post("/", {"_resend_to_pbn": "true"})
×
UNCOV
203
    request.user = admin_user
×
204

UNCOV
205
    admin_instance = PBN_Export_QueueAdmin(PBN_Export_Queue, AdminSite())
×
206

207
    with middleware(request):
×
UNCOV
208
        with patch("pbn_api.tasks.task_sprobuj_wyslac_do_pbn.delay") as mock_task:
×
209
            response = admin_instance.response_change(request, queue_item)
×
210

211
            # Check that we get a redirect response
212
            assert response.status_code == 302
×
UNCOV
213
            assert (
×
214
                f"/admin/pbn_api/pbn_export_queue/{queue_item.pk}/change/"
215
                in response.url
216
            )
217

218
            # Check that item was reset
219
            queue_item.refresh_from_db()
×
UNCOV
220
            assert queue_item.wysylke_zakonczono is None
×
UNCOV
221
            assert queue_item.zakonczono_pomyslnie is None
×
222

223
            # Check that task was called
UNCOV
224
            mock_task.assert_called_once_with(queue_item.pk)
×
225

226

227
@pytest.mark.django_db
×
UNCOV
228
def test_pbn_export_queue_admin_response_change_normal(
×
229
    wydawnictwo_ciagle, admin_user, rf
230
):
231
    """Test the response_change method with normal POST (no resend)"""
UNCOV
232
    queue_item = baker.make(
×
233
        PBN_Export_Queue,
234
        rekord_do_wysylki=wydawnictwo_ciagle,
235
        zamowil=admin_user,
236
    )
237

238
    request = rf.post("/", {"_save": "true"})  # Normal save, not resend
×
UNCOV
239
    request.user = admin_user
×
240

UNCOV
241
    admin_instance = PBN_Export_QueueAdmin(PBN_Export_Queue, AdminSite())
×
242

UNCOV
243
    with middleware(request):
×
244
        with patch("pbn_api.tasks.task_sprobuj_wyslac_do_pbn.delay") as mock_task:
×
245
            with patch.object(
×
246
                admin_instance.__class__.__bases__[0], "response_change"
247
            ) as mock_super:
UNCOV
248
                mock_super.return_value = "super_response"
×
249

250
                response = admin_instance.response_change(request, queue_item)
×
251

252
                # Check that super().response_change was called
253
                mock_super.assert_called_once_with(request, queue_item)
×
UNCOV
254
                assert response == "super_response"
×
255

256
                # Check that task was NOT called
UNCOV
257
                mock_task.assert_not_called()
×
258

259

UNCOV
260
@pytest.mark.django_db
×
261
def test_pbn_export_queue_admin_save_form(admin_user, rf):
×
262
    """Test save_form method returns form.save(commit=False)"""
UNCOV
263
    from django import forms
×
264

265
    class MockForm(forms.ModelForm):
×
UNCOV
266
        class Meta:
×
UNCOV
267
            model = PBN_Export_Queue
×
UNCOV
268
            fields = []
×
269

UNCOV
270
        def save(self, commit=True):
×
271
            return f"saved_with_commit_{commit}"
×
272

273
    request = rf.post("/")
×
274
    request.user = admin_user
×
275

276
    admin_instance = PBN_Export_QueueAdmin(PBN_Export_Queue, AdminSite())
×
UNCOV
277
    form = MockForm()
×
278

279
    result = admin_instance.save_form(request, form, change=True)
×
UNCOV
280
    assert result == "saved_with_commit_False"
×
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