|
1 | 1 | import datetime |
| 2 | +from unittest.mock import MagicMock, patch |
| 3 | + |
| 4 | +import pytest |
| 5 | +from django.core.cache import caches |
2 | 6 | from django.db.models import Sum |
3 | 7 | from model_bakery import baker |
4 | 8 |
|
| 9 | +from core.models import RenderedContent |
5 | 10 | from libraries.models import CommitAuthor |
6 | 11 | from mailing_list.models import EmailData |
7 | 12 |
|
@@ -140,6 +145,37 @@ def test_library_version_first_boost_version_property(library): |
140 | 145 | assert library.first_boost_version == version_3 |
141 | 146 |
|
142 | 147 |
|
| 148 | +DESCRIPTION_FILES = ["doc/library-detail.adoc", "README.md", "README.adoc"] |
| 149 | + |
| 150 | + |
| 151 | +@pytest.mark.parametrize( |
| 152 | + "first_available, expected", |
| 153 | + [(0, "<p>adoc</p>"), (1, "<p>md</p>"), (2, "<p>adoc</p>"), (None, None)], |
| 154 | + ids=["library-detail.adoc", "README.md-fallback", "README.adoc-fallback", "none"], |
| 155 | +) |
| 156 | +@patch("libraries.models.process_md", return_value=("", "<p>md</p>")) |
| 157 | +@patch("libraries.models.write_content_to_tempfile") |
| 158 | +@patch("libraries.models.convert_adoc_to_html", return_value="<p>adoc</p>") |
| 159 | +def test_get_description_file_priority( |
| 160 | + mock_adoc, mock_tempfile, mock_md, library, first_available, expected |
| 161 | +): |
| 162 | + """Files are tried in order; the first available file wins.""" |
| 163 | + caches["static_content"].clear() |
| 164 | + RenderedContent.objects.all().delete() |
| 165 | + mock_tempfile.return_value.name = "/tmp/fake" |
| 166 | + |
| 167 | + available = { |
| 168 | + f: b"content" if first_available is not None and i >= first_available else None |
| 169 | + for i, f in enumerate(DESCRIPTION_FILES) |
| 170 | + } |
| 171 | + client = MagicMock() |
| 172 | + client.get_file_content.side_effect = ( |
| 173 | + lambda repo_slug, tag, file_path: available.get(file_path) |
| 174 | + ) |
| 175 | + |
| 176 | + assert library.get_description(client) == expected |
| 177 | + |
| 178 | + |
143 | 179 | def test_merge_author_deletes_author(): |
144 | 180 | author_1_email = baker.make("libraries.CommitAuthorEmail") |
145 | 181 | author_1 = author_1_email.author |
|
0 commit comments