#!/usr/bin/python3 -OO # Copyright 2007-2025 by The SABnzbd-Team (sabnzbd.org) # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. """ tests.test_nzbparser - Tests of basic NZB parsing """ from tests.testhelper import * import sabnzbd.nzbparser as nzbparser from sabnzbd.nzb import NzbObject from sabnzbd.filesystem import save_compressed @pytest.mark.usefixtures("clean_cache_dir") class TestNzbParser: @set_config({"download_dir": SAB_CACHE_DIR}) def test_nzbparser(self): nzo = NzbObject("test_basic") # Create test file metadata = {"category": "test", "password": "testpass"} nzb_fp = create_and_read_nzb_fp("..", metadata=metadata) # Create folder and save compressed NZB like SABnzbd would do save_compressed(SAB_CACHE_DIR, "test", nzb_fp) nzb_file = os.path.join(SAB_CACHE_DIR, "test.nzb.gz") assert os.path.exists(nzb_file) # Files we expect test_dir = os.path.normpath(os.path.join(SAB_DATA_DIR, "..")) expected_files = [fl for fl in os.listdir(test_dir) if os.path.isfile(os.path.join(test_dir, fl))] expected_files.sort() assert expected_files # Parse the file nzbparser.nzbfile_parser(nzb_file, nzo) # Compare filenames resulting_files = [nzf.filename for nzf in nzo.files] resulting_files.sort() assert resulting_files == expected_files # Compare sizes expected_sizes = [os.path.getsize(os.path.join(test_dir, fl)) for fl in expected_files] expected_sizes.sort() resulting_sizes = [nzf.bytes for nzf in nzo.files] resulting_sizes.sort() assert resulting_sizes == expected_sizes # Check meta-data for field in metadata: assert [metadata[field]] == nzo.meta[field] @pytest.mark.xfail(reason="These tests should be added") def test_nzbparser_bad_stuff(self): # TODO: Add tests for: # Duplicate parts # Strange articles sizes # Correct parsing of dates assert False