This repository has been archived by the owner on Oct 13, 2024. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
9792761
commit 1cf8a8b
Showing
6 changed files
with
204 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -6,6 +6,7 @@ | |
|
||
# ignore directories | ||
docs/ | ||
tests/ | ||
|
||
# ignore venv when building locally | ||
venv/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
--- | ||
name: Python Tests | ||
|
||
on: | ||
pull_request: | ||
branches: [master, nightly] | ||
types: [opened, synchronize, reopened] | ||
|
||
jobs: | ||
pytest: | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
os: [windows-latest, ubuntu-latest, macos-latest] | ||
|
||
runs-on: ${{ matrix.os }} | ||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v3 | ||
|
||
- name: Set up Python | ||
uses: actions/setup-python@v4 | ||
with: | ||
python-version: '2.7' | ||
|
||
- name: Install python dependencies | ||
shell: bash | ||
run: | | ||
# requests is required to install python-plexapi | ||
python -m pip --no-python-version-warning --disable-pip-version-check install --upgrade \ | ||
pip setuptools requests | ||
python -m pip --no-python-version-warning --disable-pip-version-check install -r requirements-dev.txt | ||
python -m pip --no-python-version-warning --disable-pip-version-check install -r requirements.txt | ||
- name: Test with pytest | ||
run: | | ||
python -m pytest -v |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
# standard imports | ||
import os | ||
import sys | ||
|
||
# lib imports | ||
from plexhints.agent_kit import Agent | ||
import pytest | ||
|
||
# add Contents directory to the system path | ||
if os.path.isdir('Contents'): | ||
sys.path.append('Contents') | ||
|
||
# local imports | ||
from Code import Themerr | ||
else: | ||
raise Exception('Contents directory not found') | ||
|
||
|
||
@pytest.fixture | ||
def agent(): | ||
# type: () -> Agent | ||
return Themerr() |
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,118 @@ | ||
# local imports | ||
from Code import ValidatePrefs | ||
from Code import default_prefs | ||
from plexhints.agent_kit import Media | ||
from plexhints.model_kit import Movie | ||
from plexhints.object_kit import MessageContainer, SearchResult | ||
|
||
# setup items to test | ||
test_items = dict( | ||
a=dict( | ||
primary_agent='dev.lizardbyte.retroarcher-plex', | ||
rating_key=1, | ||
title='007 - GoldenEye (USA)', | ||
year=1997, | ||
id='{igdb-1638}', | ||
category='games', | ||
), | ||
b=dict( | ||
primary_agent='com.plexapp.agents.themoviedb', | ||
rating_key=2, | ||
title='GoldenEye', | ||
year=1995, | ||
id='710', | ||
category='movies', | ||
), | ||
c=dict( | ||
primary_agent='com.plexapp.agents.imdb', | ||
rating_key=3, | ||
title='GoldenEye', | ||
year=1995, | ||
id='tt0113189', | ||
category='movies', | ||
) | ||
) | ||
|
||
|
||
def test_validate_prefs(): | ||
result_container = ValidatePrefs() | ||
assert isinstance(result_container, MessageContainer) | ||
assert result_container.header == "Success" | ||
assert "Provided preference values are ok" in result_container.message | ||
|
||
# invalidate prefs, cannot do this due to: | ||
# TypeError: '_PreferenceSet' object does not support item assignment | ||
# Code.Prefs['int_plexapi_plexapi_timeout'] = 'not an integer' | ||
# result_container = ValidatePrefs() | ||
# assert isinstance(result_container, MessageContainer) | ||
# assert result_container.header == "Error" | ||
# assert "must be an integer" in result_container.message | ||
|
||
# add a default pref and make sure it is not in DefaultPrefs.json | ||
default_prefs['new_pref'] = 'new_value' | ||
result_container = ValidatePrefs() | ||
assert isinstance(result_container, MessageContainer) | ||
assert result_container.header == "Error" | ||
assert "missing from 'DefaultPrefs.json'" in result_container.message | ||
|
||
|
||
def test_start(): | ||
# todo | ||
pass | ||
|
||
|
||
def test_main(): | ||
# todo | ||
pass | ||
|
||
|
||
def test_themerr_search(agent): | ||
for key, item in test_items.items(): | ||
media = Media.Movie() | ||
media.primary_metadata = Movie() | ||
|
||
media.primary_agent = item['primary_agent'] | ||
media.primary_metadata.id = item['id'] | ||
media.primary_metadata.title = item['title'] | ||
media.primary_metadata.year = item['year'] | ||
|
||
database = None | ||
item_id = item['id'] | ||
if item['category'] == 'games': | ||
database = item['id'][1:-1].split('-')[0] | ||
item_id = item['id'][1:-1].split('-')[-1] | ||
elif item['category'] == 'movies': | ||
database = item['primary_agent'].split('.')[-1] | ||
|
||
results = agent.search(results=SearchResult(), media=media, lang='en', manual=False) | ||
|
||
for result in results.__items__: | ||
# print(result.__dict__) | ||
assert result.name == item['title'] | ||
assert result.year == item['year'] | ||
assert result.id == "%s-%s-%s" % (item['category'], database, item_id) | ||
|
||
|
||
def test_themerr_update(agent): | ||
metadata = Movie() | ||
|
||
for key, item in test_items.items(): | ||
media = Movie() | ||
|
||
database = None | ||
item_id = item['id'] | ||
if item['category'] == 'games': | ||
database = item['id'][1:-1].split('-')[0] | ||
item_id = item['id'][1:-1].split('-')[-1] | ||
elif item['category'] == 'movies': | ||
database = item['primary_agent'].split('.')[-1] | ||
|
||
media.id = item['rating_key'] | ||
metadata.title = item['title'] | ||
metadata.year = item['year'] | ||
metadata.id = "%s-%s-%s" % (item['category'], database, item_id) | ||
|
||
# this won't actually upload a theme since we're not working with a real Plex Server | ||
metadata = agent.update(metadata=metadata, media=media, lang='en', force=True) | ||
|
||
assert isinstance(metadata, Movie) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
# lib imports | ||
import pytest | ||
from youtube_dl import DownloadError | ||
|
||
# local imports | ||
from Code import youtube_dl_helper | ||
|
||
|
||
def test_process_youtube(): | ||
# test valid urls | ||
valid_urls = [ | ||
'https://www.youtube.com/watch?v=dQw4w9WgXcQ', | ||
] | ||
for url in valid_urls: | ||
audio_url = youtube_dl_helper.process_youtube(url=url) | ||
assert audio_url is not None | ||
assert audio_url.startswith('https://') | ||
|
||
# test invalid urls | ||
invalid_urls = [ | ||
'https://www.youtube.com/watch?v=notavideoid', | ||
'https://blahblahblah', | ||
] | ||
for url in invalid_urls: | ||
with pytest.raises(DownloadError): | ||
youtube_dl_helper.process_youtube(url=url) |