Skip to content

Commit

Permalink
catch correct error type (#23)
Browse files Browse the repository at this point in the history
  • Loading branch information
hollanbm committed May 21, 2024
1 parent 7806e3f commit dad3c77
Show file tree
Hide file tree
Showing 5 changed files with 62 additions and 129 deletions.
13 changes: 10 additions & 3 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,15 @@ repos:
# Ruff version.
rev: v0.4.2
hooks:
# Run the linter.
- id: ruff
args: [ --fix ]
# Run the formatter.
- id: ruff-format
- id: ruff-format
- repo: local
hooks:
- id: pytest
name: pytest
entry: poetry run pytest --cov=src --cov-branch tests
language: system
types: [python]
pass_filenames: false
always_run: true
6 changes: 3 additions & 3 deletions src/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from config_schema import CONFIG_SCHEMA
from existing_renamer import ExistingRenamer
from loguru import logger
from pycliarr.api import CliServerError
from pycliarr.api import CliArrError
from pyconfigparser import ConfigError, ConfigFileNotFoundError, configparser
from series_scanner import SeriesScanner

Expand All @@ -33,7 +33,7 @@ def __series_scanner_job(self, sonarr_config):
api_key=sonarr_config.api_key,
hours_before_air=sonarr_config.series_scanner.hours_before_air,
).scan()
except CliServerError as exc:
except CliArrError as exc:
logger.error(exc)

def __schedule_series_scanner(self, sonarr_config):
Expand All @@ -52,7 +52,7 @@ def __existing_renamer_job(self, sonarr_config):
url=sonarr_config.url,
api_key=sonarr_config.api_key,
).scan()
except CliServerError as exc:
except CliArrError as exc:
logger.error(exc)

def __schedule_existing_renamer(self, sonarr_config):
Expand Down
16 changes: 16 additions & 0 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from typing import List

import pytest
from loguru import logger
from pycliarr.api import SonarrCli, SonarrSerieItem
from pycliarr.api.base_api import json_data

Expand All @@ -14,6 +15,21 @@ def get_serie(mocker) -> None:
mocker.patch.object(SonarrCli, "get_serie").return_value = series


@pytest.fixture
def mock_loguru_error(mocker) -> None:
return mocker.patch.object(logger, "error")


@pytest.fixture
def mock_loguru_info(mocker) -> None:
return mocker.patch.object(logger, "info")


@pytest.fixture
def mock_loguru_debug(mocker) -> None:
return mocker.patch.object(logger, "debug")


def episode_data(
id: int,
title: str,
Expand Down
123 changes: 0 additions & 123 deletions tests/test_existing_renamer.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,126 +56,3 @@ def test_when_multiple_episodes_need_renamed(
assert "Found episodes to be renamed" in caplog.text
assert "Renaming S01E01, S01E02" in caplog.text
rename_files.assert_called_once_with([1, 2], 1)

# def test_when_episodes_filtered_out(self, get_serie, caplog, mocker) -> None:
# episodes: List[json_data] = [
# episode_data(
# id=1,
# title="TBA",
# airDateDelta=timedelta(hours=2),
# seasonNumber=0,
# ),
# episode_data(
# id=2,
# title="TBA",
# airDateDelta=timedelta(hours=8),
# ),
# dict(id=3, title="NOT TBA", airDateUtc=None, seasonNumber=1, hasFile=False),
# ]
# mocker.patch.object(SonarrCli, "get_episode").return_value = episodes
# rename_files = mocker.patch.object(SonarrCli, "rename_files")

# with caplog.at_level(logging.DEBUG):
# ExistingRenamer("test", "test.tld", "test-api-key").scan()

# assert "Starting Existing Renamer" in caplog.text
# assert "Retrieved series list" in caplog.text
# assert "No rename needed" in caplog.text
# assert not rename_files.called

# def test_when_episode_file_name_contains_TBA(
# self, get_serie, caplog, mocker
# ) -> None:
# episodes: List[json_data] = [
# episode_data(
# id=1,
# title="NOT TBA",
# airDateDelta=timedelta(days=-1),
# seasonNumber=1,
# ),
# ]
# mocker.patch.object(SonarrCli, "get_episode").return_value = episodes
# rename_files = mocker.patch.object(SonarrCli, "rename_files")

# file: json_data = file_info(
# id=1,
# file_name="The Series Titles (2010) - S01E01 - TBA.mkv",
# )

# mocker.patch.object(SonarrCli, "get_episode_file").return_value = file

# with caplog.at_level(logging.DEBUG):
# ExistingRenamer("test", "test.tld", "test-api-key").scan()

# assert "S01E01 Queuing for rename" in caplog.text
# assert "Renaming S01E01" in caplog.text
# rename_files.assert_called_once_with([1], 1)

# def test_when_renaming_multiple_files(self, get_serie, caplog, mocker) -> None:
# episodes: List[json_data] = [
# episode_data(
# id=1,
# title="NOT TBA",
# airDateDelta=timedelta(days=-1),
# seasonNumber=1,
# episodeNumber=1,
# ),
# episode_data(
# id=2,
# title="NOT TBA",
# airDateDelta=timedelta(days=-1),
# seasonNumber=1,
# episodeNumber=2,
# ),
# ]
# mocker.patch.object(SonarrCli, "get_episode").return_value = episodes
# rename_files = mocker.patch.object(SonarrCli, "rename_files")

# file1: json_data = file_info(
# id=1,
# file_name="The Series Titles (2010) - S01E01 - TBA.mkv",
# )

# file2: json_data = file_info(
# id=2,
# file_name="The Series Titles (2010) - S01E02 - TBA.mkv",
# )

# get_episode_file = mocker.patch.object(SonarrCli, "get_episode_file")
# get_episode_file.return_value = file1
# get_episode_file.side_effect = [file1, file2]

# with caplog.at_level(logging.DEBUG):
# ExistingRenamer("test", "test.tld", "test-api-key").scan()

# assert "S01E01 Queuing for rename" in caplog.text
# assert "S01E02 Queuing for rename" in caplog.text
# assert "Renaming S01E01, S01E02" in caplog.text
# rename_files.assert_called_once_with([1, 2], 1)

# def test_when_episode_file_name_does_not_contain_TBA(
# self, get_serie, caplog, mocker
# ) -> None:
# episodes: List[json_data] = [
# episode_data(
# id=1,
# title="NOT TBA",
# airDateDelta=timedelta(days=-1),
# seasonNumber=1,
# ),
# ]
# mocker.patch.object(SonarrCli, "get_episode").return_value = episodes
# rename_files = mocker.patch.object(SonarrCli, "rename_files")

# file: json_data = file_info(
# id=1,
# file_name="The Series Titles (2010) - S01E01 - Episode1.mkv",
# )

# mocker.patch.object(SonarrCli, "get_episode_file").return_value = file

# with caplog.at_level(logging.DEBUG):
# ExistingRenamer("test", "test.tld", "test-api-key").scan()

# assert "No rename needed" in caplog.text
# assert not rename_files.called
33 changes: 33 additions & 0 deletions tests/test_main.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from config_schema import CONFIG_SCHEMA
from existing_renamer import ExistingRenamer
from main import Main
from pycliarr.api import CliArrError
from pyconfigparser import Config, configparser
from schedule import Job
from series_scanner import SeriesScanner
Expand Down Expand Up @@ -52,6 +53,22 @@ def test_series_scanner_hourly_job(self, config, mocker) -> None:
assert series_scanner.called
assert job.called

def test_series_scanner_pycliarr_exception(
self, config, mock_loguru_error, mocker
) -> None:
config.sonarr[0].series_scanner.enabled = True
mocker.patch("pyconfigparser.configparser.get_config").return_value = config
mocker.patch.object(Job, "do")

exception = CliArrError("BOOM!")

series_scanner = mocker.patch.object(SeriesScanner, "scan")
series_scanner.side_effect = exception

Main().start()

mock_loguru_error.assert_called_once_with(exception)

def test_existing_renamer_scan(self, config, mocker) -> None:
config.sonarr[0].existing_renamer.enabled = True
mocker.patch("pyconfigparser.configparser.get_config").return_value = config
Expand All @@ -73,3 +90,19 @@ def test_existing_renamer_hourly_job(self, config, mocker) -> None:
Main().start()
assert existing_renamer.called
assert job.called

def test_existing_renamer_pycliarr_exception(
self, config, mock_loguru_error, mocker
) -> None:
config.sonarr[0].existing_renamer.enabled = True
mocker.patch("pyconfigparser.configparser.get_config").return_value = config
mocker.patch.object(Job, "do")

exception = CliArrError("BOOM!")

existing_renamer = mocker.patch.object(ExistingRenamer, "scan")
existing_renamer.side_effect = exception

Main().start()

mock_loguru_error.assert_called_once_with(exception)

0 comments on commit dad3c77

Please sign in to comment.