Browse Source

Add detection of NZBHydra and NZBHydra 2 to config providers.

Add newznab tests _title_and_url, get_size_uid, parse_ids, parse_pub_date and caps.
Add FakeNewznabProvider.
Suppress insignificant test warnings.
tags/release_0.18.9^2
Prinz23 6 years ago
committed by JackDandy
parent
commit
b991e7b5ea
  1. 3
      CHANGES.md
  2. BIN
      gui/slick/images/providers/warning16.png
  3. 3
      gui/slick/interfaces/default/config_providers.tmpl
  4. 22
      sickbeard/providers/newznab.py
  5. 31
      tests/all_tests.py
  6. 5
      tests/network_timezone_tests.py
  7. 67
      tests/newznab_data/hydra1_caps.xml
  8. 34
      tests/newznab_data/hydra2_caps.xml
  9. 177
      tests/newznab_data/newznab_caps.xml
  10. 97
      tests/newznab_data/nntmux_caps.xml
  11. 93
      tests/newznab_data/nzedb_caps.xml
  12. 55
      tests/newznab_data/spotweb_caps.xml
  13. 350
      tests/newznab_tests.py
  14. 3
      tests/scene_helpers_tests.py
  15. 4
      tests/search_tests.py

3
CHANGES.md

@ -1,7 +1,8 @@
### 0.18.9 (2018-12-19 12:20:00 UTC)
### 0.18.9 (2019-01-08 01:00:00 UTC)
* Change ensure utf-8 locale for Ubuntu snap
* Change remove non-release group stuff from newnab results
* Add detection of NZBHydra and NZBHydra 2 to config providers
* Remove Torrentz2

BIN
gui/slick/images/providers/warning16.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 612 B

3
gui/slick/interfaces/default/config_providers.tmpl

@ -97,6 +97,7 @@
#set $cur_url = $cur_provider.url
#set $show_type = $sickbeard.USE_NZBS and $sickbeard.USE_TORRENTS and $GenericProvider.NZB == $cur_provider.providerType
#set $spotweb = ('', 'sw ')[$getattr($cur_provider, 'server_type', None) == $NewznabConstants.SERVER_SPOTWEB and type($cur_provider).__name__ not in ['TorrentRssProvider']]
#set $is_hydra = $getattr($cur_provider, 'server_type', None) in ($NewznabConstants.SERVER_HYDRA1, $NewznabConstants.SERVER_HYDRA2)
#set $bad_url = not $cur_url and cur_provider.is_enabled()
#set $tip = ($cur_provider.name + ('', ' (enable for link)')[not $cur_url and not cur_provider.is_enabled()],
'Site Down')[$bad_url]
@ -109,6 +110,8 @@
<span style="font-size:10px;vertical-align:top;font-weight:normal">(PA)</span>
#end if##if $show_type##slurp
<span style="font-size:10px;vertical-align:top;font-weight:normal">($spotweb$cur_provider.providerType)</span>
#end if##if $is_hydra##slurp
(<a href="https://github.com/SickGear/SickGear/wiki/%5BWarning%5D-Using-External-Search-Tools" target="_blank" title="This tool degrades SickGear"><span class="red-text">read this</span></a>)
#end if##if not $cur_provider.supports_backlog#*#set $backlog_only_tip=True##end if##slurp
<span class="ui-icon ui-icon-arrowthick-2-n-s pull-right" style="margin-top:3px"></span>
</li>

22
sickbeard/providers/newznab.py

@ -94,9 +94,13 @@ class NewznabConstants:
SERVER_DEFAULT = 0
SERVER_SPOTWEB = 1
SERVER_HYDRA1 = 2
SERVER_HYDRA2 = 3
server_types = {SERVER_DEFAULT: 'newznab',
SERVER_SPOTWEB: 'spotweb'}
SERVER_SPOTWEB: 'spotweb',
SERVER_HYDRA1: 'NZBHydra',
SERVER_HYDRA2: 'NZBHydra 2'}
def __init__(self):
pass
@ -194,6 +198,8 @@ class NewznabProvider(generic.NZBProvider):
def image_name(self):
if self.server_type not in (NewznabConstants.SERVER_DEFAULT, NewznabConstants.SERVER_SPOTWEB):
return 'warning16.png'
return generic.GenericProvider.image_name(
self, ('newznab', 'spotweb')[self.server_type == NewznabConstants.SERVER_SPOTWEB])
@ -239,9 +245,17 @@ class NewznabProvider(generic.NZBProvider):
if None is not xml_caps:
server_node = xml_caps.find('.//server')
if None is not server_node:
self.server_type = (NewznabConstants.SERVER_DEFAULT, NewznabConstants.SERVER_SPOTWEB)[
NewznabConstants.server_types.get(NewznabConstants.SERVER_SPOTWEB) in
(server_node.get('type', '') or server_node.get('title', '')).lower()]
if NewznabConstants.server_types.get(NewznabConstants.SERVER_SPOTWEB) in \
(server_node.get('type', '') or server_node.get('title', '')).lower():
self.server_type = NewznabConstants.SERVER_SPOTWEB
elif 'nzbhydra 2' in server_node.get('title', '').lower() or \
'nzbhydra2' in server_node.get('url', '').lower():
self.server_type = NewznabConstants.SERVER_HYDRA2
elif 'nzbhydra' == server_node.get('title', '').lower().strip() or \
server_node.get('url', '').lower().strip().endswith('nzbhydra'):
self.server_type = NewznabConstants.SERVER_HYDRA1
else:
self.server_type = NewznabConstants.SERVER_DEFAULT
tv_search = xml_caps.find('.//tv-search')
if None is not tv_search:

31
tests/all_tests.py

@ -19,7 +19,10 @@
# along with SickGear. If not, see <http://www.gnu.org/licenses/>.
from __future__ import print_function
if __name__ == '__main__':
if '__main__' == __name__:
import warnings
warnings.filterwarnings('ignore', module=r'.*fuz.*', message='.*Sequence.*')
import glob
import unittest
import sys
@ -32,10 +35,24 @@ if __name__ == '__main__':
print('==================')
print('STARTING - ALL TESTS')
print('==================')
print('this will include')
for includedfiles in test_file_strings:
print('- ' + includedfiles)
text_runner = unittest.TextTestRunner().run(testSuite)
if not text_runner.wasSuccessful():
sys.exit(-1)
test_individually = False
if not test_individually:
print('this will include')
for includedfiles in test_file_strings:
print('- ' + includedfiles)
text_runner = unittest.TextTestRunner().run(testSuite)
if not text_runner.wasSuccessful():
sys.exit(-1)
else:
complete_success = True
for file_string in module_strings:
testSuite = unittest.TestSuite([unittest.defaultTestLoader.loadTestsFromName(file_string)])
print('- running ' + file_string)
test_runner = unittest.TextTestRunner().run(testSuite)
if complete_success and not test_runner.wasSuccessful():
complete_success = False
if not complete_success:
sys.exit(-1)

5
tests/network_timezone_tests.py

@ -1,3 +1,8 @@
import warnings
warnings.filterwarnings('ignore', module=r'.*fuz.*', message='.*Sequence.*')
warnings.filterwarnings('ignore', module=r'.*connectionpool.*', message='.*certificate verification.*')
warnings.filterwarnings('ignore', module=r'.*zoneinfo.*', message='.*no such file.*')
import unittest
import test_lib as test
import os.path

67
tests/newznab_data/hydra1_caps.xml

@ -0,0 +1,67 @@
<?xml version="1.0" encoding="utf-8"?>
<caps>
<server appversion="0.0.1" version="0.1" title="NZBHydra" email="theotherp@gmx.de" url="https://github.com/theotherp/nzbhydra" />
<limits max="100" default="100" />
<retention days="2500" />
<searching>
<search available="yes" supportedParams="q" />
<tv-search available="yes" supportedParams="q,rid,tvdbid,season,ep" />
<movie-search available="yes" supportedParams="q,imdbid" />
<audio-search available="no" />
<book-search available="yes" />
</searching>
<categories>
<category id="1000" name="Gaming">
<subcat id="1010" name="NDS" />
<subcat id="1020" name="PSP" />
<subcat id="1030" name="Wii" />
<subcat id="1050" name="Xbox 360" />
<subcat id="1080" name="Playstation 3" />
<subcat id="4050" name="PC" />
</category>
<category id="2000" name="Movies">
<subcat id="2010" name="Foreign" />
<subcat id="2020" name="Other" />
<subcat id="2030" name="SD" />
<subcat id="2040" name="HD" />
<subcat id="2050" name="BluRay" />
<subcat id="2060" name="3D" />
<subcat id="2070" name="Mobile" />
</category>
<category id="3000" name="Audio">
<subcat id="3010" name="MP3" />
<subcat id="3020" name="Video" />
<subcat id="3030" name="Audiobook" />
<subcat id="3040" name="Lossless" />
<subcat id="3050" name="Other" />
</category>
<category id="4000" name="Apps">
<subcat id="4010" name="0day" />
<subcat id="4020" name="ISO" />
<subcat id="4030" name="Apple" />
</category>
<category id="5000" name="TV">
<subcat id="5020" name="Foreign" />
<subcat id="5030" name="SD" />
<subcat id="5040" name="HD" />
<subcat id="5050" name="Other" />
<subcat id="5060" name="Sport" />
<subcat id="5070" name="Anime" />
<subcat id="5080" name="Documentary" />
</category>
<category id="6000" name="Adult">
<subcat id="6010" name="DVD" />
<subcat id="6020" name="WMV" />
<subcat id="6030" name="XviD" />
<subcat id="6040" name="x264" />
<subcat id="6050" name="Pack" />
<subcat id="6060" name="ImgSet" />
<subcat id="6070" name="Other" />
</category>
<category id="7000" name="Books">
<subcat id="7010" name="Magazines" />
<subcat id="7020" name="Ebook" />
<subcat id="7030" name="Comics" />
</category>
</categories>
</caps>

34
tests/newznab_data/hydra2_caps.xml

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<caps>
<server title="NZBHydra 2" email="theotherp@gmx.de" url="https://github.com/theotherp/nzbhydra2" image="https://raw.githubusercontent.com/theotherp/nzbhydra2/master/core/ui-src/img/banner-bright.png" />
<limits max="100" default="100" />
<retention days="3000" />
<searching>
<search available="yes" supportedParams="q,cat,limit,offset,minage,maxage,minsize,maxsize" />
<tv-search available="yes" supportedParams="q,rid,tvdbid,tvmazeid,traktid,season,ep,cat,limit,offset,minage,maxage,minsize,maxsize" />
<movie-search available="yes" supportedParams="q,imdbid,tmdbid,cat,limit,offset,minage,maxage,minsize,maxsize" />
<audio-search available="no" supportedParams="" />
<book-search available="yes" supportedParams="q,author,title,cat,limit,offset,minage,maxage,minsize,maxsize" />
</searching>
<categories>
<category id="1000" name="Console" />
<category id="2000" name="Movies">
<subcat id="2040" name="Movies HD" />
<subcat id="2030" name="Movies SD" />
</category>
<category id="3000" name="Audio">
<subcat id="3030" name="Audiobook" />
<subcat id="3040" name="FLAC" />
<subcat id="3010" name="MP3" />
</category>
<category id="4000" name="PC" />
<category id="5000" name="TV">
<subcat id="5070" name="Anime" />
<subcat id="5040" name="TV HD" />
<subcat id="5030" name="TV SD" />
</category>
<category id="6000" name="XXX" />
<category id="7020" name="Ebook" />
<category id="7030" name="Comic" />
</categories>
</caps>

177
tests/newznab_data/newznab_caps.xml

@ -0,0 +1,177 @@
<?xml version="1.0" encoding="UTF-8"?>
<caps>
<server appversion="0.2.3p" version="0.5" title="Newznab" strapline="Fake Provider" email="fake@fake.fake" url="https://fake.in/" image="https://fake.in/logo.jpg" />
<limits max="100" default="100" />
<registration available="yes" open="no" />
<searching>
<search available="yes" supportedParams="q" />
<tv-search available="yes" supportedParams="q,rid,tvdbid,tvmazeid,season,ep" />
<movie-search available="yes" supportedParams="q,imdbid" />
</searching>
<categories>
<category id="1000" name="Console">
<subcat id="1010" name="NDS" />
<subcat id="1110" name="NSW" />
<subcat id="1080" name="PS3" />
<subcat id="1085" name="PS4" />
<subcat id="1020" name="PSP" />
<subcat id="1030" name="Wii" />
<subcat id="1060" name="WiiWare/VC" />
<subcat id="1070" name="XBOX 360 DLC" />
<subcat id="1090" name="XBOX ONE" />
<subcat id="1040" name="Xbox" />
<subcat id="1050" name="Xbox 360" />
</category>
<category id="2000" name="Movies">
<subcat id="2060" name="3D" />
<subcat id="2050" name="BluRay" />
<subcat id="2010" name="Foreign" />
<subcat id="2040" name="HD" />
<subcat id="2070" name="HEVC" />
<subcat id="2020" name="Other" />
<subcat id="2080" name="Remux" />
<subcat id="2030" name="SD" />
<subcat id="2045" name="UHD" />
</category>
<category id="3000" name="Music">
<subcat id="3030" name="Audiobook" />
<subcat id="3040" name="Lossless" />
<subcat id="3010" name="MP3" />
<subcat id="3020" name="Video" />
</category>
<category id="4000" name="PC">
<subcat id="4010" name="0day" />
<subcat id="4050" name="Games" />
<subcat id="4020" name="ISO" />
<subcat id="4030" name="Mac" />
<subcat id="4070" name="Mobile-Android" />
<subcat id="4040" name="Mobile-Other" />
<subcat id="4060" name="Mobile-iOS" />
</category>
<category id="5000" name="TV">
<subcat id="5070" name="Anime" />
<subcat id="5185" name="Docu HD" />
<subcat id="5180" name="Docu SD" />
<subcat id="5020" name="Foreign" />
<subcat id="5040" name="HD" />
<subcat id="5200" name="HEVC" />
<subcat id="5050" name="Other" />
<subcat id="5030" name="SD" />
<subcat id="5060" name="Sport" />
<subcat id="5045" name="UHD" />
</category>
<category id="6000" name="XXX">
<subcat id="6082" name="Clips HD" />
<subcat id="6081" name="Clips SD" />
<subcat id="6085" name="Clips UHD" />
<subcat id="6010" name="DVD" />
<subcat id="6040" name="HD" />
<subcat id="6060" name="ImgSet" />
<subcat id="6070" name="Other" />
<subcat id="6050" name="Pack" />
<subcat id="6030" name="SD" />
<subcat id="6020" name="WMV" />
</category>
<category id="7000" name="Books">
<subcat id="7030" name="Comics" />
<subcat id="7020" name="Ebook" />
<subcat id="7010" name="Mags" />
</category>
<category id="8000" name="Misc">
<subcat id="8090" name="Crap" />
<subcat id="8010" name="Other" />
<subcat id="8050" name="To Sort" />
</category>
</categories>
<groups>
<group id="40" name="alt.binaries.cd.image" description="This group contains PC-ISO." lastupdate="Tue, 01 Jan 2019 08:30:19 +0100" />
<group id="124" name="alt.binaries.comics.dcp" description="This group contains Comic Books" lastupdate="Tue, 01 Jan 2019 07:35:35 +0100" />
<group id="38" name="alt.binaries.console.ps3" description="This group contains PS3 Games." lastupdate="Tue, 01 Jan 2019 08:30:27 +0100" />
<group id="86" name="alt.binaries.documentaries" description="This group contains Documentaries TV and Movies." lastupdate="Tue, 01 Jan 2019 08:30:27 +0100" />
<group id="210" name="alt.binaries.documentaries.french" lastupdate="Tue, 01 Jan 2019 08:29:49 +0100" />
<group id="28" name="alt.binaries.e-book" description="This group contains E-Books." lastupdate="Tue, 01 Jan 2019 08:30:32 +0100" />
<group id="52" name="alt.binaries.e-book.flood" description="This group contains E-Books." lastupdate="Tue, 01 Jan 2019 00:57:11 +0100" />
<group id="192" name="alt.binaries.e-book.magazines" description="True PDF magazine" lastupdate="Tue, 01 Jan 2019 07:01:18 +0100" />
<group id="41" name="alt.binaries.e-book.technical" description="This group contains E-Books." lastupdate="Tue, 01 Jan 2019 08:30:28 +0100" />
<group id="96" name="alt.binaries.ebook" description="This group contains Ebook&#039;s." lastupdate="Mon, 31 Dec 2018 22:26:46 +0100" />
<group id="42" name="alt.binaries.erotica.divx" description="This group contains XXX." lastupdate="Tue, 01 Jan 2019 08:30:23 +0100" />
<group id="34" name="alt.binaries.games" description="This group contains PC and Console Games." lastupdate="Tue, 01 Jan 2019 08:29:56 +0100" />
<group id="209" name="alt.binaries.games.dox" lastupdate="Tue, 01 Jan 2019 08:30:01 +0100" />
<group id="13" name="alt.binaries.games.wii" description="This group contains Nintendo WII Games, WII-Ware, and VC." lastupdate="Tue, 01 Jan 2019 08:29:57 +0100" />
<group id="12" name="alt.binaries.games.xbox360" description="This group contains XBOX 360 Games and DLC." lastupdate="Tue, 01 Jan 2019 08:29:40 +0100" />
<group id="161" name="alt.binaries.hdtv.french" description="Contains TV shows in French or VOSTFR " lastupdate="Tue, 01 Jan 2019 08:29:48 +0100" />
<group id="11" name="alt.binaries.hdtv.x264" description="This group contains X264 Movies and HDTV." lastupdate="Tue, 01 Jan 2019 08:29:37 +0100" />
<group id="217" name="alt.binaries.howard-stern" description="Howard Stern show and other junk" lastupdate="Mon, 31 Dec 2018 12:37:18 +0100" />
<group id="27" name="alt.binaries.mac" description="This group contains MAC/OSX Software." lastupdate="Tue, 01 Jan 2019 04:35:18 +0100" />
<group id="17" name="alt.binaries.moovee" description="This group contains XVID and X264 Movies." lastupdate="Tue, 01 Jan 2019 08:29:33 +0100" />
<group id="132" name="alt.binaries.movies" description="This group contains an assortment of Movies." lastupdate="Tue, 01 Jan 2019 08:29:56 +0100" />
<group id="5" name="alt.binaries.movies.divx" description="This group contains XVID Movies" lastupdate="Tue, 01 Jan 2019 08:29:22 +0100" />
<group id="7" name="alt.binaries.movies.xvid" description="This group contains XVID Movies." lastupdate="Tue, 01 Jan 2019 08:30:10 +0100" />
<group id="67" name="alt.binaries.mp3.audiobooks" description="This group contains Audio Books." lastupdate="Tue, 01 Jan 2019 08:30:22 +0100" />
<group id="4" name="alt.binaries.multimedia" description="This group contains TV, Movies, and Music." lastupdate="Tue, 01 Jan 2019 08:29:33 +0100" />
<group id="137" name="alt.binaries.multimedia.anime.highspeed" description="This group contains Anime Television." lastupdate="Tue, 01 Jan 2019 08:29:31 +0100" />
<group id="73" name="alt.binaries.multimedia.cartoons" description="This group contains Cartoon TV and Movies." lastupdate="Tue, 01 Jan 2019 09:28:57 +0100" />
<group id="74" name="alt.binaries.multimedia.sports" description="This group contains Sports TV and Movies." lastupdate="Tue, 01 Jan 2019 09:28:58 +0100" />
<group id="8" name="alt.binaries.sony.psp" description="This group contains PSP Games." lastupdate="Sun, 09 Dec 2018 00:03:32 +0100" />
<group id="147" name="alt.binaries.sounds.flac" description="This group contains lossless audio." lastupdate="Tue, 01 Jan 2019 09:41:37 +0100" />
<group id="47" name="alt.binaries.sounds.lossless" description="This group contains a variety of Lossless Music." lastupdate="Tue, 01 Jan 2019 09:28:58 +0100" />
<group id="76" name="alt.binaries.sounds.lossless.classical" description="This group contains lossless Classical Music." lastupdate="Mon, 31 Dec 2018 23:18:55 +0100" />
<group id="100" name="alt.binaries.sounds.lossless.country" description="This group contains lossless Country Music." lastupdate="Tue, 01 Jan 2019 12:09:37 +0100" />
<group id="22" name="alt.binaries.sounds.mp3.complete_cd" description="This group contains a variety of Music." lastupdate="Fri, 28 Dec 2018 23:57:38 +0100" />
<group id="20" name="alt.binaries.teevee" description="This group contains X264 and XVID TV." lastupdate="Tue, 01 Jan 2019 08:29:00 +0100" />
<group id="99" name="alt.binaries.tv" description="This group contains XVID TV." lastupdate="Tue, 01 Jan 2019 09:41:41 +0100" />
<group id="195" name="alt.binaries.tv.big-brother" description="Big Brother Live Feed" lastupdate="Tue, 01 Jan 2019 08:29:23 +0100" />
<group id="30" name="alt.binaries.tvseries" description="This group contains X264 and XVID TV." lastupdate="Tue, 01 Jan 2019 09:28:55 +0100" />
<group id="136" name="alt.binaries.worms" description="This group contains a lot of U4ALL." lastupdate="Tue, 01 Jan 2019 08:29:12 +0100" />
<group id="15" name="alt.binaries.x264" description="This group contains X264 Movies and TV." lastupdate="Tue, 01 Jan 2019 09:41:42 +0100" />
</groups>
<genres>
<genre id="3028" categoryid="3000" name="" />
<genre id="20" categoryid="1000" name="Action" />
<genre id="21" categoryid="1000" name="Adventure" />
<genre id="3002" categoryid="3000" name="Alternative Rock" />
<genre id="22" categoryid="1000" name="Arcade" />
<genre id="3003" categoryid="3000" name="Blues" />
<genre id="32" categoryid="1000" name="Board Games" />
<genre id="3004" categoryid="3000" name="Broadway &amp; Vocalists" />
<genre id="30" categoryid="1000" name="Cards" />
<genre id="26" categoryid="1000" name="Casino" />
<genre id="3005" categoryid="3000" name="Children" />
<genre id="1026" categoryid="3000" name="Children&#039;s Music" />
<genre id="3006" categoryid="3000" name="Christian" />
<genre id="1027" categoryid="3000" name="Christian &amp; Gospel" />
<genre id="3008" categoryid="3000" name="Classic Rock" />
<genre id="3007" categoryid="3000" name="Classical" />
<genre id="3009" categoryid="3000" name="Country" />
<genre id="3010" categoryid="3000" name="Dance &amp; Electronic" />
<genre id="37" categoryid="1000" name="Flying" />
<genre id="3011" categoryid="3000" name="Folk" />
<genre id="3012" categoryid="3000" name="Gospel" />
<genre id="3013" categoryid="3000" name="Hard Rock &amp; Metal" />
<genre id="3014" categoryid="3000" name="Indie Music" />
<genre id="3015" categoryid="3000" name="Jazz" />
<genre id="3016" categoryid="3000" name="Latin" />
<genre id="3027" categoryid="3000" name="Latin Music" />
<genre id="3025" categoryid="3000" name="Miscellaneous" />
<genre id="3026" categoryid="3000" name="New Age" />
<genre id="3017" categoryid="3000" name="Opera &amp; Vocal Music" />
<genre id="1" categoryid="3000" name="Other" />
<genre id="3018" categoryid="3000" name="Pop" />
<genre id="23" categoryid="1000" name="Puzzle" />
<genre id="1025" categoryid="3000" name="R&amp;B" />
<genre id="3019" categoryid="3000" name="R&amp;B &amp; Soul" />
<genre id="29" categoryid="1000" name="Racing" />
<genre id="3020" categoryid="3000" name="Rap &amp; Hip-Hop" />
<genre id="31" categoryid="1000" name="Rhythm" />
<genre id="3021" categoryid="3000" name="Rock" />
<genre id="24" categoryid="1000" name="Role-Playing" />
<genre id="19" categoryid="1000" name="Simulation" />
<genre id="3022" categoryid="3000" name="Soundtracks" />
<genre id="3024" categoryid="3000" name="Specialty Label Stores" />
<genre id="28" categoryid="1000" name="Sports" />
<genre id="25" categoryid="1000" name="Strategy" />
<genre id="27" categoryid="1000" name="Trivia" />
<genre id="33" categoryid="1000" name="Unknown" />
<genre id="3023" categoryid="3000" name="World Music" />
</genres>
</caps>

97
tests/newznab_data/nntmux_caps.xml

@ -0,0 +1,97 @@
<?xml version="1.0" encoding="UTF-8"?>
<caps>
<server title="NNTMUX" strapline="Fake NNTMUX" email="nntmux@fake.fake" meta="fake" url="https://fake.fake" image="https://fake.fake/logo.png" />
<limits max="100" default="100" />
<registration available="yes" open="yes" />
<searching>
<search available="yes" supportedParams="q" />
<tv-search available="yes" supportedParams="q,vid,tvdbid,traktid,rid,tvmazeid,imdbid,tmdbid,season,ep" />
<movie-search available="yes" supportedParams="q,imdbid, tmdbid, traktid" />
<audio-search available="no" supportedParams="" />
</searching>
<categories>
<category id="1000" name="Console">
<subcat id="1110" name="3DS" />
<subcat id="1010" name="NDS" />
<subcat id="1999" name="Other" />
<subcat id="1120" name="PS Vita" />
<subcat id="1080" name="PS3" />
<subcat id="1180" name="PS4" />
<subcat id="1020" name="PSP" />
<subcat id="1030" name="Wii" />
<subcat id="1130" name="WiiU" />
<subcat id="1060" name="WiiWare VC" />
<subcat id="1040" name="Xbox" />
<subcat id="1050" name="Xbox 360" />
<subcat id="1070" name="Xbox 360 DLC" />
<subcat id="1140" name="Xbox One" />
</category>
<category id="2000" name="Movies">
<subcat id="2050" name="3D" />
<subcat id="2060" name="BluRay" />
<subcat id="2070" name="DVD" />
<subcat id="2010" name="Foreign" />
<subcat id="2040" name="HD" />
<subcat id="2999" name="Other" />
<subcat id="2030" name="SD" />
<subcat id="2045" name="UHD" />
<subcat id="2080" name="WEB-DL" />
<subcat id="2090" name="X265" />
</category>
<category id="3000" name="Audio">
<subcat id="3030" name="Audiobook" />
<subcat id="3060" name="Foreign" />
<subcat id="3040" name="Lossless" />
<subcat id="3010" name="MP3" />
<subcat id="3999" name="Other" />
<subcat id="3020" name="Video" />
</category>
<category id="4000" name="PC">
<subcat id="4010" name="0day" />
<subcat id="4050" name="Games" />
<subcat id="4020" name="ISO" />
<subcat id="4030" name="Mac" />
<subcat id="4070" name="Mobile-Android" />
<subcat id="4040" name="Mobile-Other" />
<subcat id="4060" name="Mobile-iOS" />
</category>
<category id="5000" name="TV">
<subcat id="5070" name="Anime" />
<subcat id="5080" name="Documentary" />
<subcat id="5020" name="Foreign" />
<subcat id="5040" name="HD" />
<subcat id="5999" name="Other" />
<subcat id="5030" name="SD" />
<subcat id="5060" name="Sport" />
<subcat id="5045" name="UHD" />
<subcat id="5010" name="WEB-DL" />
<subcat id="5090" name="X265" />
</category>
<category id="6000" name="XXX">
<subcat id="6010" name="DVD" />
<subcat id="6041" name="HD Clips" />
<subcat id="6060" name="ImgSet" />
<subcat id="6999" name="Other" />
<subcat id="6050" name="Pack" />
<subcat id="6080" name="SD" />
<subcat id="6042" name="SD Clips" />
<subcat id="6045" name="UHD" />
<subcat id="6090" name="WEB-DL" />
<subcat id="6020" name="WMV" />
<subcat id="6030" name="XviD" />
<subcat id="6040" name="x264" />
</category>
<category id="7000" name="Books">
<subcat id="7030" name="Comics" />
<subcat id="7020" name="Ebook" />
<subcat id="7060" name="Foreign" />
<subcat id="7010" name="Mags" />
<subcat id="7999" name="Other" />
<subcat id="7040" name="Technical" />
</category>
<category id="1" name="Other">
<subcat id="20" name="Hashed" />
<subcat id="10" name="Misc" />
</category>
</categories>
</caps>

93
tests/newznab_data/nzedb_caps.xml

@ -0,0 +1,93 @@
<?xml version="1.0" encoding="UTF-8"?>
<caps>
<server appversion="0.8.3.0" version="0.1" title="NZEDB" strapline="Fake NZEDB" email="nzedb@fake.fake" meta="usenet,nzbs,cms,community" url="https://fake.fake/" image="https://fake.fake/logo.png" />
<limits max="100" default="100" />
<registration available="yes" open="no" />
<searching>
<search available="yes" supportedParams="q" />
<tv-search available="yes" supportedParams="q,vid,tvdbid,traktid,rid,tvmazeid,imdbid,tmdbid,season,ep" />
<movie-search available="yes" supportedParams="q,imdbid" />
<audio-search available="no" supportedParams="" />
</searching>
<categories>
<category id="1000" name="Console">
<subcat id="1110" name="3DS" />
<subcat id="1010" name="NDS" />
<subcat id="1999" name="Other" />
<subcat id="1120" name="PS Vita" />
<subcat id="1080" name="PS3" />
<subcat id="1180" name="PS4" />
<subcat id="1020" name="PSP" />
<subcat id="1030" name="Wii" />
<subcat id="1130" name="WiiU" />
<subcat id="1060" name="WiiWare/VC" />
<subcat id="1070" name="XBOX 360 DLC" />
<subcat id="1040" name="Xbox" />
<subcat id="1050" name="Xbox 360" />
<subcat id="1140" name="Xbox One" />
</category>
<category id="2000" name="Movies">
<subcat id="2050" name="3D" />
<subcat id="2060" name="BluRay" />
<subcat id="2070" name="DVD" />
<subcat id="2010" name="Foreign" />
<subcat id="2040" name="HD" />
<subcat id="2999" name="Other" />
<subcat id="2030" name="SD" />
<subcat id="2045" name="UHD" />
<subcat id="2080" name="WEBDL" />
</category>
<category id="3000" name="Audio">
<subcat id="3030" name="Audiobook" />
<subcat id="3060" name="Foreign" />
<subcat id="3040" name="Lossless" />
<subcat id="3010" name="MP3" />
<subcat id="3999" name="Other" />
<subcat id="3020" name="Video" />
</category>
<category id="4000" name="PC">
<subcat id="4010" name="0day" />
<subcat id="4050" name="Games" />
<subcat id="4020" name="ISO" />
<subcat id="4030" name="Mac" />
<subcat id="4070" name="Phone-Android" />
<subcat id="4060" name="Phone-IOS" />
<subcat id="4999" name="Phone-Other" />
</category>
<category id="5000" name="TV">
<subcat id="5070" name="Anime" />
<subcat id="5080" name="Documentary" />
<subcat id="5020" name="Foreign" />
<subcat id="5040" name="HD" />
<subcat id="5999" name="Other" />
<subcat id="5030" name="SD" />
<subcat id="5060" name="Sport" />
<subcat id="5045" name="UHD" />
<subcat id="5010" name="WEB-DL" />
</category>
<category id="6000" name="XXX">
<subcat id="6010" name="DVD" />
<subcat id="6060" name="Imageset" />
<subcat id="6999" name="Other" />
<subcat id="6070" name="Packs" />
<subcat id="6080" name="SD" description="XXX SD Releases" />
<subcat id="6045" name="UHD" />
<subcat id="6090" name="WEB-DL" description="XXX WEBDL Releases" />
<subcat id="6020" name="WMV" />
<subcat id="6030" name="XviD" />
<subcat id="6040" name="x264" />
</category>
<category id="7000" name="Books">
<subcat id="7030" name="Comics" />
<subcat id="7020" name="Ebook" />
<subcat id="7060" name="Foreign" />
<subcat id="7010" name="Magazines" />
<subcat id="7999" name="Other" />
<subcat id="7040" name="Technical" />
</category>
<category id="0" name="Other">
<subcat id="20" name="Hashed" />
<subcat id="10" name="Misc" />
</category>
</categories>
</caps>

55
tests/newznab_data/spotweb_caps.xml

@ -0,0 +1,55 @@
<?xml version="1.0" encoding="utf-8"?>
<caps>
<server version="0.1" title="Spotweb" strapline="Spotweb API Index" email="spotweb@fake.fake" url="https://fake.fake/" image="https://fake.fake/spotnet.gif" type="Spotweb" />
<limits max="500" default="25" />
<registration available="no" open="no" />
<searching>
<search available="yes" />
<tv-search available="yes" supportedParams="q,rid,tvmazeid,season,ep" />
<movie-search available="yes" supportedParams="q,imdbid" />
<audio-search available="yes" />
</searching>
<categories>
<category id="1000" name="Console">
<subcat id="1010" name="NDS" />
<subcat id="1020" name="PSP" />
<subcat id="1030" name="Wii" />
<subcat id="1040" name="Xbox" />
<subcat id="1050" name="Xbox 360" />
<subcat id="1080" name="PS3" />
</category>
<category id="2000" name="Movies">
<subcat id="2030" name="SD" />
<subcat id="2040" name="HD" />
<subcat id="2050" name="BluRay" />
</category>
<category id="3000" name="Audio">
<subcat id="3010" name="MP3" />
<subcat id="3020" name="Video" />
<subcat id="3040" name="Lossless" />
</category>
<category id="4000" name="PC">
<subcat id="4030" name="Mac" />
<subcat id="4040" name="Mobile" />
<subcat id="4050" name="Games" />
</category>
<category id="5000" name="TV">
<subcat id="5020" name="Foreign" />
<subcat id="5030" name="SD" />
<subcat id="5040" name="HD" />
<subcat id="5050" name="Other" />
<subcat id="5060" name="Sport" />
<subcat id="5070" name="Anime" />
</category>
<category id="6000" name="XXX">
<subcat id="6010" name="DVD" />
<subcat id="6020" name="WMV" />
<subcat id="6030" name="XviD" />
<subcat id="6040" name="x264" />
</category>
<category id="7000" name="Other">
<subcat id="7010" name="Misc" />
<subcat id="7020" name="Ebook" />
</category>
</categories>
</caps>

350
tests/newznab_tests.py

@ -0,0 +1,350 @@
# coding=utf-8
from __future__ import print_function
import warnings
warnings.filterwarnings('ignore', module=r'.*fuz.*', message='.*Sequence.*')
warnings.filterwarnings('ignore', module=r'.*dateutil.*', message='.*Unicode.*')
import datetime
import os.path
import random
import sys
import test_lib as test
import unittest
sys.path.insert(1, os.path.abspath('..'))
sys.path.insert(1, os.path.abspath('../lib'))
try:
from lxml import etree
except ImportError:
try:
import xml.etree.cElementTree as etree
except ImportError:
import xml.etree.ElementTree as etree
from lib.dateutil import parser
from sickbeard.indexers.indexer_config import *
from sickbeard.network_timezones import sb_timezone
from sickbeard.providers import newznab
import sickbeard
sickbeard.SYS_ENCODING = 'UTF-8'
DEBUG = VERBOSE = False
item_parse_test_cases = [
(('Show.Name.S02E01.720p.HDTV.x264-GROUP', 'https://test.h/test/hhhh'),
('Show.Name.S02E01.720p.HDTV.x264-GROUP', 'https://test.h/test/hhhh')),
(('Show.Name.S02E02.720p.HDTV.x264-GROUP-JUNK', 'https://test.h/test/hhhh'),
('Show.Name.S02E02.720p.HDTV.x264-GROUP', 'https://test.h/test/hhhh')),
(('Show.Name.S02E03.720p.HDTV.x264-GROUP[JUNK]', 'https://test.h'),
('Show.Name.S02E03.720p.HDTV.x264-GROUP', 'https://test.h')),
(('Show.Name.S02E04.720p.HDTV.x264-GROUP-JUNK-JUNK', 'https://test.h'),
('Show.Name.S02E04.720p.HDTV.x264-GROUP', 'https://test.h')),
(('Show.Name.S02E05.720p.HDTV.x264-GROUP-JUNK[JUNK]', 'https://test.h'),
('Show.Name.S02E05.720p.HDTV.x264-GROUP', 'https://test.h')),
((u'Show.Name.S02E06.720p.HDTV.x264-GROUP-JUNK[JUNK帝]', 'https://test.h'),
(u'Show.Name.S02E06.720p.HDTV.x264-GROUP', 'https://test.h')),
((u'Show.Name.S02E07-EpName帝.720p.HDTV.x264-GROUP帝-JUNK[JUNK帝]', 'https://test.h'),
(u'Show.Name.S02E07-EpName帝.720p.HDTV.x264-GROUP帝', 'https://test.h')),
((u'[grp 帝] Show Name - 11 [1024x576 h264 AAC ger-sub][123456].mp4', 'https://test.h'),
(u'[grp.帝].Show.Name.-.11.[1024x576.h264.AAC.ger-sub][123456]', 'https://test.h')),
]
size_test_cases = [
((1000, 'ad87987dadf7987987'), (1000, 'ad87987dadf7987987')),
((1254105454, 'ffdds7766dgdzhghdzghdgg'), (1254105454, 'ffdds7766dgdzhghdzghdgg')),
((-1, ''), (-1, None))
]
pubdate_test_cases = [
'Sat, 28 Jul 2018 07:33:06 +0000',
'Sun, 10 Sep 2017 23:11:09 +0200'
]
caps_test_cases = [
{
'name': 'newznab',
'data_files': {'caps': 'newznab_caps.xml'},
'caps': {
INDEXER_TVDB: 'tvdbid', INDEXER_TVRAGE: 'rid', INDEXER_TVMAZE: 'tvmazeid',
newznab.NewznabConstants.SEARCH_EPISODE: 'ep', newznab.NewznabConstants.SEARCH_SEASON: 'season',
newznab.NewznabConstants.SEARCH_TEXT: 'q'
},
'cats': {
newznab.NewznabConstants.CAT_SD: ['5030'], newznab.NewznabConstants.CAT_SPORT: ['5060'],
newznab.NewznabConstants.CAT_ANIME: ['5070'], newznab.NewznabConstants.CAT_UHD: ['5045'],
newznab.NewznabConstants.CAT_HD: ['5040']
},
'all_cats': [
{'id': '5070', 'name': 'Anime'}, {'id': '5185', 'name': 'Docu HD'},
{'id': '5180', 'name': 'Docu SD'}, {'id': '5020', 'name': 'Foreign'},
{'id': '5040', 'name': 'HD'}, {'id': '5200', 'name': 'HEVC'},
{'id': '5050', 'name': 'Other'}, {'id': '5030', 'name': 'SD'},
{'id': '5060', 'name': 'Sport'}, {'id': '5045', 'name': 'UHD'}
],
'limits': 100,
'server_type': newznab.NewznabConstants.SERVER_DEFAULT
}, {
'name': 'nzedb',
'data_files': {'caps': 'nzedb_caps.xml'},
'caps': {
INDEXER_TVDB: 'tvdbid', INDEXER_TVRAGE: 'rid', INDEXER_TVMAZE: 'tvmazeid', INDEXER_TRAKT: 'traktid',
INDEXER_IMDB: 'imdbid', INDEXER_TMDB: 'tmdbid',
newznab.NewznabConstants.SEARCH_EPISODE: 'ep', newznab.NewznabConstants.SEARCH_SEASON: 'season',
newznab.NewznabConstants.SEARCH_TEXT: 'q'
},
'cats': {
newznab.NewznabConstants.CAT_SD: ['5030'], newznab.NewznabConstants.CAT_SPORT: ['5060'],
newznab.NewznabConstants.CAT_ANIME: ['5070'], newznab.NewznabConstants.CAT_UHD: ['5045'],
newznab.NewznabConstants.CAT_HD: ['5040'], newznab.NewznabConstants.CAT_WEBDL: ['5010']
},
'all_cats': [
{'id': '5070', 'name': 'Anime'}, {'id': '5080', 'name': 'Documentary'},
{'id': '5020', 'name': 'Foreign'}, {'id': '5040', 'name': 'HD'},
{'id': '5999', 'name': 'Other'}, {'id': '5030', 'name': 'SD'},
{'id': '5060', 'name': 'Sport'}, {'id': '5045', 'name': 'UHD'},
{'id': '5010', 'name': 'WEB-DL'}
],
'limits': 100,
'server_type': newznab.NewznabConstants.SERVER_DEFAULT
}, {
'name': 'nntmux',
'data_files': {'caps': 'nntmux_caps.xml'},
'caps': {
INDEXER_TVDB: 'tvdbid', INDEXER_TVRAGE: 'rid', INDEXER_TVMAZE: 'tvmazeid', INDEXER_TRAKT: 'traktid',
INDEXER_IMDB: 'imdbid', INDEXER_TMDB: 'tmdbid',
newznab.NewznabConstants.SEARCH_EPISODE: 'ep', newznab.NewznabConstants.SEARCH_SEASON: 'season',
newznab.NewznabConstants.SEARCH_TEXT: 'q'
},
'cats': {
newznab.NewznabConstants.CAT_SD: ['5030'], newznab.NewznabConstants.CAT_SPORT: ['5060'],
newznab.NewznabConstants.CAT_ANIME: ['5070'], newznab.NewznabConstants.CAT_UHD: ['5045'],
newznab.NewznabConstants.CAT_HD: ['5040'], newznab.NewznabConstants.CAT_WEBDL: ['5010']
},
'all_cats': [
{'id': '5070', 'name': 'Anime'}, {'id': '5080', 'name': 'Documentary'},
{'id': '5020', 'name': 'Foreign'}, {'id': '5040', 'name': 'HD'}, {'id': '5999', 'name': 'Other'},
{'id': '5030', 'name': 'SD'}, {'id': '5060', 'name': 'Sport'}, {'id': '5045', 'name': 'UHD'},
{'id': '5010', 'name': 'WEB-DL'}, {'id': '5090', 'name': 'X265'}
],
'limits': 100,
'server_type': newznab.NewznabConstants.SERVER_DEFAULT
}, {
'name': 'spotweb',
'data_files': {'caps': 'spotweb_caps.xml'},
'caps': {
INDEXER_TVRAGE: 'rid', INDEXER_TVMAZE: 'tvmazeid',
newznab.NewznabConstants.SEARCH_EPISODE: 'ep', newznab.NewznabConstants.SEARCH_SEASON: 'season',
newznab.NewznabConstants.SEARCH_TEXT: 'q'
},
'cats': {
newznab.NewznabConstants.CAT_SD: ['5030'], newznab.NewznabConstants.CAT_SPORT: ['5060'],
newznab.NewznabConstants.CAT_ANIME: ['5070'], newznab.NewznabConstants.CAT_HD: ['5040']
},
'all_cats': [
{'id': '5020', 'name': 'Foreign'}, {'id': '5030', 'name': 'SD'}, {'id': '5040', 'name': 'HD'},
{'id': '5050', 'name': 'Other'}, {'id': '5060', 'name': 'Sport'}, {'id': '5070', 'name': 'Anime'}
],
'limits': 500,
'server_type': newznab.NewznabConstants.SERVER_SPOTWEB
}, {
'name': 'NZBHydra',
'data_files': {'caps': 'hydra1_caps.xml'},
'caps': {
INDEXER_TVDB: 'tvdbid', INDEXER_TVRAGE: 'rid',
newznab.NewznabConstants.SEARCH_EPISODE: 'ep', newznab.NewznabConstants.SEARCH_SEASON: 'season',
newznab.NewznabConstants.SEARCH_TEXT: 'q'
},
'cats': {
newznab.NewznabConstants.CAT_SD: ['5030'], newznab.NewznabConstants.CAT_SPORT: ['5060'],
newznab.NewznabConstants.CAT_ANIME: ['5070'], newznab.NewznabConstants.CAT_HD: ['5040']
},
'all_cats': [
{'id': '5020', 'name': 'Foreign'}, {'id': '5030', 'name': 'SD'}, {'id': '5040', 'name': 'HD'},
{'id': '5050', 'name': 'Other'}, {'id': '5060', 'name': 'Sport'}, {'id': '5070', 'name': 'Anime'},
{'id': '5080', 'name': 'Documentary'}
],
'limits': 100,
'server_type': newznab.NewznabConstants.SERVER_HYDRA1
}, {
'name': 'NZBHydra 2',
'data_files': {'caps': 'hydra2_caps.xml'},
'caps': {
INDEXER_TVDB: 'tvdbid', INDEXER_TVRAGE: 'rid', INDEXER_TVMAZE: 'tvmazeid', INDEXER_TRAKT: 'traktid',
newznab.NewznabConstants.SEARCH_EPISODE: 'ep', newznab.NewznabConstants.SEARCH_SEASON: 'season',
newznab.NewznabConstants.SEARCH_TEXT: 'q'
},
'cats': {
newznab.NewznabConstants.CAT_SD: ['5030'], newznab.NewznabConstants.CAT_SPORT: ['5060'],
newznab.NewznabConstants.CAT_ANIME: ['5070'], newznab.NewznabConstants.CAT_HD: ['5040']
},
'all_cats': [
{'id': '5070', 'name': 'Anime'}, {'id': '5040', 'name': 'TV HD'}, {'id': '5030', 'name': 'TV SD'}
],
'limits': 100,
'server_type': newznab.NewznabConstants.SERVER_HYDRA2
},
]
class FakeNewznabProvider(newznab.NewznabProvider):
def __init__(self, *args, **kwargs):
self.FILEDIR = os.path.join(test.TESTDIR, 'newznab_data')
self._data_files_dict = ({}, kwargs['data_files_dict'])[isinstance(kwargs.get('data_files_dict'), dict)]
if 'data_files_dict' in kwargs:
del kwargs['data_files_dict']
super(FakeNewznabProvider, self).__init__(*args, **kwargs)
def _read_data(self, filename):
try:
f = os.path.join(self.FILEDIR, filename)
if os.path.isfile(f):
with open(f, 'r') as d:
return d.read().decode('UTF-8')
except (StandardError, Exception):
return
# simulate Data from provider
def get_url(self, url, skip_auth=False, use_tmr_limit=True, *args, **kwargs):
data = None
if '/api?' in url:
api_parameter = url[url.find('/api?') + 5:]
if 't=caps' in api_parameter and 'caps' in self._data_files_dict:
data = self._read_data(self._data_files_dict['caps'])
return data
class BasicTests(test.SickbeardTestDBCase):
ns = {'newznab': 'http://www.newznab.com/DTD/2010/feeds/attributes/', 'atom': 'http://www.w3.org/2005/Atom'}
ns_parsed = dict((k, '{%s}' % v) for (k, v) in ns.items())
@staticmethod
def _create_item(title, link, size=-1, uuid='', ids=None, pubdate=None):
item = etree.Element('item', nsmap=BasicTests.ns)
title_item = etree.Element('title')
title_item.text = title
link_item = etree.Element('link')
link_item.text = link
item.append(title_item)
item.append(link_item)
if -1 != size:
size_item = etree.Element('{%s}attr' % BasicTests.ns['newznab'], nsmap=BasicTests.ns)
size_item.set('name', 'size')
size_item.set('value', '%s' % size)
item.append(size_item)
if uuid:
uuid_item = etree.Element('{%s}attr' % BasicTests.ns['newznab'], nsmap=BasicTests.ns)
uuid_item.set('name', 'guid')
uuid_item.set('value', '%s' % uuid)
item.append(uuid_item)
if ids:
for a, b in ids.iteritems():
ids_item = etree.Element('{%s}attr' % BasicTests.ns['newznab'], nsmap=BasicTests.ns)
ids_item.set('name', a)
ids_item.set('value', '%s' % b)
item.append(ids_item)
if pubdate:
pubdate_item = etree.Element('pubDate')
pubdate_item.text = pubdate
item.append(pubdate_item)
return item
def test_title_and_url(self):
if VERBOSE:
print('Running tests')
newznab_provider = newznab.NewznabProvider('test', '')
for cur_test, cur_expected in item_parse_test_cases:
item = self._create_item(cur_test[0], cur_test[1])
result = newznab_provider._title_and_url(item)
self.assertEqual(cur_expected, result)
def test_get_size_uid(self):
newznab_provider = newznab.NewznabProvider('test', '')
for cur_test, cur_expected in size_test_cases:
item = self._create_item('Show.Name.S01E01.x264-Group', 'http://test.h', cur_test[0], cur_test[1])
result = newznab_provider.get_size_uid(item, name_space=BasicTests.ns_parsed)
self.assertEqual(cur_expected, result)
def test_parse_ids(self):
ids_test_cases = []
for k in newznab.NewznabConstants.providerToIndexerMapping.iterkeys():
rand_id = random.randrange(1, 99999999)
ids_test_cases.append(({k: rand_id}, {newznab.NewznabConstants.providerToIndexerMapping[k]: rand_id}))
all_case = {}
all_case_ex = {}
for k in newznab.NewznabConstants.providerToIndexerMapping.iterkeys():
rand_id = random.randrange(1, 99999999)
all_case.update({k: rand_id})
all_case_ex.update({newznab.NewznabConstants.providerToIndexerMapping[k]: rand_id})
ids_test_cases.append((all_case, all_case_ex))
newznab_provider = newznab.NewznabProvider('test', '')
for cur_test, cur_expected in ids_test_cases:
item = self._create_item('Show.Name.S01E01.x264-Group', 'https://test.h', ids=cur_test)
result = newznab_provider.cache.parse_ids(item, BasicTests.ns_parsed)
self.assertEqual(cur_expected, result)
@staticmethod
def _parse_pub_date(date_str):
parsed_date = None
try:
if date_str:
p = parser.parse(date_str, fuzzy=True)
try:
p = p.astimezone(sb_timezone)
except (StandardError, Exception):
pass
if isinstance(p, datetime.datetime):
parsed_date = p.replace(tzinfo=None)
except (StandardError, Exception):
pass
return parsed_date
def test_parse_pub_date(self):
newznab_provider = newznab.NewznabProvider('test', '')
for cur_test in pubdate_test_cases:
item = self._create_item('Show.Name.S01E01.x264-Group', 'https://test.h', pubdate=cur_test)
result = newznab_provider._parse_pub_date(item)
cur_expected = self._parse_pub_date(cur_test)
self.assertEqual(cur_expected, result)
class FakeProviderTests(test.SickbeardTestDBCase):
def test_caps(self):
self.longMessage = True
for cur_test in caps_test_cases:
newznab_provider = FakeNewznabProvider('test', 'https://fake.fake/', data_files_dict=cur_test['data_files'])
newznab_provider.enabled = True
newznab_provider.get_caps()
msg = 'Test case: %s' % cur_test['name']
self.assertEqual(cur_test['server_type'], newznab_provider.server_type, msg=msg)
self.assertEqual(cur_test['limits'], newznab_provider.limits, msg=msg)
self.assertEqual(cur_test['caps'], newznab_provider.caps, msg=msg)
self.assertEqual(cur_test['cats'], newznab_provider.cats, msg=msg)
self.assertEqual(cur_test['all_cats'], newznab_provider.all_cats, msg=msg)
if __name__ == '__main__':
if len(sys.argv) > 1:
suite = unittest.TestLoader().loadTestsFromName('newznab_tests.BasicTests.test_' + sys.argv[1])
else:
suite = unittest.TestLoader().loadTestsFromTestCase(BasicTests)
unittest.TextTestRunner(verbosity=2).run(suite)
suite = unittest.TestLoader().loadTestsFromTestCase(FakeProviderTests)
unittest.TextTestRunner(verbosity=2).run(FakeNewznabProvider)

3
tests/scene_helpers_tests.py

@ -1,4 +1,7 @@
# coding=utf-8
import warnings
warnings.filterwarnings('ignore', module=r'.*fuz.*', message='.*Sequence.*')
warnings.filterwarnings('ignore', module=r'.*connectionpool.*', message='.*certificate verification.*')
import unittest
import test_lib as test

4
tests/search_tests.py

@ -1,3 +1,7 @@
import warnings
warnings.filterwarnings('ignore', module=r'.*fuz.*', message='.*Sequence.*')
warnings.filterwarnings('ignore', module=r'.*connectionpool.*', message='.*certificate verification.*')
import unittest
from sickbeard import properFinder

Loading…
Cancel
Save