• 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/bpp/tests/test_bibtex_export_simple.py
1
"""
2
Simplified tests for BibTeX export functionality.
3
"""
4

UNCOV
5
from unittest.mock import Mock
×
6

UNCOV
7
from bpp.bibtex_export import (
×
8
    export_to_bibtex,
9
    generate_bibtex_key,
10
    sanitize_bibtex_string,
11
    wydawnictwo_ciagle_to_bibtex,
12
    wydawnictwo_zwarte_to_bibtex,
13
)
14

15

UNCOV
16
class TestBibTeXExportSimple:
×
UNCOV
17
    def test_sanitize_bibtex_string(self):
×
18
        """Test that problematic characters are properly escaped."""
19
        test_cases = [
×
20
            ("Test & Title", "Test \\& Title"),
21
            ("Title with {braces}", "Title with \\{braces\\}"),
22
            ("Math $formula$", "Math \\$formula\\$"),
23
            ("Percentage 100%", "Percentage 100\\%"),
24
            ("Hash #tag", "Hash \\#tag"),
25
            ("Under_score", "Under\\_score"),
26
            ("Super^script", "Super\\^script"),
27
            ("Tilde~space", "Tilde\\~space"),
28
            (None, ""),
29
            ("", ""),
30
        ]
31

32
        for input_str, expected in test_cases:
×
33
            result = sanitize_bibtex_string(input_str)
×
34
            assert (
×
35
                result == expected
36
            ), f"Input: {input_str}, Expected: {expected}, Got: {result}"
37

UNCOV
38
    def test_generate_bibtex_key_basic(self):
×
39
        """Test basic BibTeX key generation with minimal mock."""
40
        wydawnictwo = Mock()
×
41
        wydawnictwo.rok = 2023
×
42
        wydawnictwo.pk = 123
×
43
        wydawnictwo.autorzy_dla_opisu.return_value.first.return_value = None
×
44

45
        key = generate_bibtex_key(wydawnictwo)
×
46
        assert "2023" in key
×
47
        assert "id123" in key
×
48

UNCOV
49
    def test_wydawnictwo_ciagle_minimal_bibtex(self):
×
50
        """Test minimal BibTeX export for Wydawnictwo_Ciagle."""
51
        # Mock wydawnictwo with minimal required fields
52
        wydawnictwo = Mock()
×
53
        wydawnictwo.tytul_oryginalny = "Test Article"
×
54
        wydawnictwo.rok = 2023
×
55
        wydawnictwo.pk = 1
×
56
        wydawnictwo.zrodlo = None  # No journal
×
57
        wydawnictwo.doi = None
×
58
        wydawnictwo.issn = None
×
59
        wydawnictwo.www = None
×
60
        mock_queryset = Mock()
×
61
        mock_queryset.first.return_value = None
×
62
        mock_queryset.__iter__ = Mock(return_value=iter([]))
×
63
        wydawnictwo.autorzy_dla_opisu.return_value = mock_queryset
×
64
        wydawnictwo.opis_bibliograficzny_autorzy_cache = None
×
65
        wydawnictwo.numer_tomu.return_value = None
×
66
        wydawnictwo.numer_wydania.return_value = None
×
67
        wydawnictwo.zakres_stron.return_value = None
×
68

69
        bibtex = wydawnictwo_ciagle_to_bibtex(wydawnictwo)
×
70

71
        # Check basic structure
72
        assert "@article{" in bibtex
×
73
        assert "title = {Test Article}" in bibtex
×
74
        assert "year = {2023}" in bibtex
×
75
        assert bibtex.endswith("}\n")
×
76

UNCOV
77
    def test_wydawnictwo_zwarte_minimal_bibtex(self):
×
78
        """Test minimal BibTeX export for Wydawnictwo_Zwarte."""
79
        # Mock wydawnictwo with minimal required fields
80
        wydawnictwo = Mock()
×
81
        wydawnictwo.tytul_oryginalny = "Test Book"
×
82
        wydawnictwo.rok = 2022
×
83
        wydawnictwo.pk = 2
×
84
        wydawnictwo.get_wydawnictwo.return_value = "Test Publisher"
×
85
        wydawnictwo.miejsce_i_rok = "New York 2022"
×
86
        wydawnictwo.isbn = None
×
87
        wydawnictwo.www = None
×
88
        wydawnictwo.strony = None
×
89
        wydawnictwo.wydawnictwo_nadrzedne = None
×
90
        wydawnictwo.oznaczenie_wydania = None
×
91
        wydawnictwo.seria_wydawnicza = None
×
92
        wydawnictwo.doi = None
×
93
        wydawnictwo.charakter_formalny = None
×
94
        mock_queryset = Mock()
×
95
        mock_queryset.first.return_value = None
×
96
        mock_queryset.__iter__ = Mock(return_value=iter([]))
×
97
        wydawnictwo.autorzy_dla_opisu.return_value = mock_queryset
×
98
        wydawnictwo.opis_bibliograficzny_autorzy_cache = None
×
99
        wydawnictwo._meta = Mock()
×
100
        wydawnictwo._meta.model_name = "wydawnictwo_zwarte"
×
101

102
        bibtex = wydawnictwo_zwarte_to_bibtex(wydawnictwo)
×
103

104
        # Check basic structure
105
        assert "@book{" in bibtex
×
106
        assert "title = {Test Book}" in bibtex
×
107
        assert "publisher = {Test Publisher}" in bibtex
×
108
        assert "year = {2022}" in bibtex
×
109
        assert "address = {New York}" in bibtex
×
110
        assert bibtex.endswith("}\n")
×
111

UNCOV
112
    def test_export_to_bibtex_empty_list(self):
×
113
        """Test export with empty publication list."""
114
        result = export_to_bibtex([])
×
115
        assert result == ""
×
116

UNCOV
117
    def test_export_to_bibtex_mixed_publications(self):
×
118
        """Test export with mixed publication types."""
119
        # Mock Wydawnictwo_Ciagle
120
        ciagle = Mock()
×
121
        ciagle._meta = Mock()
×
122
        ciagle._meta.model_name = "wydawnictwo_ciagle"
×
123
        ciagle.tytul_oryginalny = "Article"
×
124
        ciagle.rok = 2023
×
125
        ciagle.pk = 1
×
126
        ciagle.zrodlo = None
×
127
        mock_ciagle_queryset = Mock()
×
128
        mock_ciagle_queryset.first.return_value = None
×
129
        mock_ciagle_queryset.__iter__ = Mock(return_value=iter([]))
×
130
        ciagle.autorzy_dla_opisu.return_value = mock_ciagle_queryset
×
131
        ciagle.opis_bibliograficzny_autorzy_cache = None
×
132
        ciagle.numer_tomu.return_value = None
×
133
        ciagle.numer_wydania.return_value = None
×
134
        ciagle.zakres_stron.return_value = None
×
135
        ciagle.doi = None
×
136
        ciagle.issn = None
×
137
        ciagle.www = None
×
138

139
        # Mock Wydawnictwo_Zwarte
140
        zwarte = Mock()
×
141
        zwarte._meta = Mock()
×
142
        zwarte._meta.model_name = "wydawnictwo_zwarte"
×
143
        zwarte.tytul_oryginalny = "Book"
×
144
        zwarte.rok = 2022
×
145
        zwarte.pk = 2
×
146
        zwarte.get_wydawnictwo.return_value = "Publisher"
×
147
        zwarte.miejsce_i_rok = "City 2022"
×
148
        mock_zwarte_queryset = Mock()
×
149
        mock_zwarte_queryset.first.return_value = None
×
150
        mock_zwarte_queryset.__iter__ = Mock(return_value=iter([]))
×
151
        zwarte.autorzy_dla_opisu.return_value = mock_zwarte_queryset
×
152
        zwarte.opis_bibliograficzny_autorzy_cache = None
×
153
        zwarte.wydawnictwo_nadrzedne = None
×
154
        zwarte.charakter_formalny = None
×
155
        zwarte.isbn = None
×
156
        zwarte.www = None
×
157
        zwarte.strony = None
×
158
        zwarte.oznaczenie_wydania = None
×
159
        zwarte.seria_wydawnicza = None
×
160
        zwarte.doi = None
×
161

162
        publications = [ciagle, zwarte]
×
163
        result = export_to_bibtex(publications)
×
164

165
        # Should contain both entries
166
        assert "@article{" in result
×
167
        assert "@book{" in result
×
168
        assert "Article" in result
×
169
        assert "Book" in result
×
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