-
Notifications
You must be signed in to change notification settings - Fork 432
Expand file tree
/
Copy pathtest_path_parser.py
More file actions
173 lines (138 loc) · 6.12 KB
/
test_path_parser.py
File metadata and controls
173 lines (138 loc) · 6.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
from unittest.mock import patch
from module.conf import PLATFORM
def test_path_to_bangumi():
# Test for unix-like path
from module.downloader.path import TorrentPath
path = "Downloads/Bangumi/Kono Subarashii Sekai ni Shukufuku wo!/Season 2/"
bangumi_name, season = TorrentPath()._path_to_bangumi(path)
assert bangumi_name == "Kono Subarashii Sekai ni Shukufuku wo!"
assert season == 2
def test_path_to_bangumi_windows_style_save_path():
"""Regression for #1016: when qBittorrent runs on Windows and AB runs on
Linux, qB returns backslash paths. PurePosixPath treats the whole string
as one segment, leaving season stuck at 1."""
from module.downloader.path import TorrentPath
with patch("module.downloader.path.settings") as mock_settings:
mock_settings.downloader.path = r"D:\video\Bangumis"
path = r"D:\video\Bangumis\小书痴的下克上\Season 4"
bangumi_name, season = TorrentPath._path_to_bangumi(path)
assert bangumi_name == "小书痴的下克上"
assert season == 4
def test_path_to_bangumi_posix_path_on_linux_ab():
"""Regression guard: POSIX paths still parse correctly after the fix."""
from module.downloader.path import TorrentPath
with patch("module.downloader.path.settings") as mock_settings:
mock_settings.downloader.path = "/downloads/Bangumi"
path = "/downloads/Bangumi/葬送的芙莉莲/Season 2"
bangumi_name, season = TorrentPath._path_to_bangumi(path)
assert bangumi_name == "葬送的芙莉莲"
assert season == 2
class TestGenSavePath:
"""Tests for TorrentPath._gen_save_path with season_offset."""
def test_gen_save_path_no_offset(self):
"""Save path uses season directly when no offset."""
from module.downloader.path import TorrentPath
from module.models import Bangumi
bangumi = Bangumi(
official_title="Test Anime",
year="2024",
season=1,
season_offset=0,
title_raw="test",
)
with patch("module.downloader.path.settings") as mock_settings:
mock_settings.downloader.path = "/downloads/Bangumi"
result = TorrentPath._gen_save_path(bangumi)
assert "Season 1" in result
assert "Test Anime (2024)" in result
def test_gen_save_path_with_positive_offset(self):
"""Save path uses adjusted season when offset is positive."""
from module.downloader.path import TorrentPath
from module.models import Bangumi
bangumi = Bangumi(
official_title="Test Anime",
year="2024",
season=1,
season_offset=1,
title_raw="test",
)
with patch("module.downloader.path.settings") as mock_settings:
mock_settings.downloader.path = "/downloads/Bangumi"
result = TorrentPath._gen_save_path(bangumi)
assert "Season 2" in result # 1 + 1 = 2
assert "Test Anime (2024)" in result
def test_gen_save_path_with_negative_offset(self):
"""Save path uses adjusted season when offset is negative."""
from module.downloader.path import TorrentPath
from module.models import Bangumi
bangumi = Bangumi(
official_title="Test Anime",
year="2024",
season=3,
season_offset=-1,
title_raw="test",
)
with patch("module.downloader.path.settings") as mock_settings:
mock_settings.downloader.path = "/downloads/Bangumi"
result = TorrentPath._gen_save_path(bangumi)
assert "Season 2" in result # 3 - 1 = 2
def test_gen_save_path_offset_below_one_ignored(self):
"""Save path doesn't go below Season 1."""
from module.downloader.path import TorrentPath
from module.models import Bangumi
bangumi = Bangumi(
official_title="Test Anime",
year="2024",
season=1,
season_offset=-5,
title_raw="test",
)
with patch("module.downloader.path.settings") as mock_settings:
mock_settings.downloader.path = "/downloads/Bangumi"
result = TorrentPath._gen_save_path(bangumi)
assert "Season 1" in result # Would be -4, so uses original season
def test_gen_save_path_season_two_no_offset(self):
"""Non-S1 base season with no offset resolves directly."""
from module.downloader.path import TorrentPath
from module.models import Bangumi
bangumi = Bangumi(
official_title="Test Anime",
year="2024",
season=2,
season_offset=0,
title_raw="test",
)
with patch("module.downloader.path.settings") as mock_settings:
mock_settings.downloader.path = "/downloads/Bangumi"
result = TorrentPath._gen_save_path(bangumi)
assert "Season 2" in result
def test_gen_save_path_large_positive_offset(self):
"""Large positive offset adds correctly."""
from module.downloader.path import TorrentPath
from module.models import Bangumi
bangumi = Bangumi(
official_title="Test Anime",
year="2024",
season=1,
season_offset=5,
title_raw="test",
)
with patch("module.downloader.path.settings") as mock_settings:
mock_settings.downloader.path = "/downloads/Bangumi"
result = TorrentPath._gen_save_path(bangumi)
assert "Season 6" in result # 1 + 5
def test_gen_save_path_offset_yields_exactly_season_one(self):
"""Offset that resolves to exactly Season 1 is kept."""
from module.downloader.path import TorrentPath
from module.models import Bangumi
bangumi = Bangumi(
official_title="Test Anime",
year="2024",
season=2,
season_offset=-1,
title_raw="test",
)
with patch("module.downloader.path.settings") as mock_settings:
mock_settings.downloader.path = "/downloads/Bangumi"
result = TorrentPath._gen_save_path(bangumi)
assert "Season 1" in result # 2 - 1 = 1