Action: Add test

Spins up jellyfin and plex containers to test against
pull/119/head
Luigi311 2023-12-06 12:54:33 -07:00
parent 2a65c4b5ca
commit ca5403f97b
4 changed files with 163 additions and 21 deletions

View File

@ -21,9 +21,50 @@ jobs:
- name: "Run tests" - name: "Run tests"
run: pytest -vvv run: pytest -vvv
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: "Install dependencies"
run: |
pip install -r requirements.txt
sudo apt update && sudo apt install -y docker-compose
- name: "Checkout JellyPlex-Watched-CI"
uses: actions/checkout@v2
with:
repository: luigi311/JellyPlex-Watched-CI
path: JellyPlex-Watched-CI
- name: "Start containers"
run: |
export PGID=$(id -g)
export PUID=$(id -u)
sudo chown -R $PUID:$PGID JellyPlex-Watched-CI
docker-compose -f JellyPlex-Watched-CI/plex/docker-compose.yml up -d
docker-compose -f JellyPlex-Watched-CI/jellyfin/docker-compose.yml up -d
# Wait for containers to start
sleep 15
docker-compose -f JellyPlex-Watched-CI/plex/docker-compose.yml logs
docker-compose -f JellyPlex-Watched-CI/jellyfin/docker-compose.yml logs
- name: "Run tests"
run: |
# Move test/.env to root
mv test/ci.env .env
# Run script
python main.py
cat mark.log
docker: docker:
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: pytest needs:
- pytest
- test
env: env:
DEFAULT_VARIANT: alpine DEFAULT_VARIANT: alpine
strategy: strategy:

View File

@ -100,7 +100,7 @@ class Jellyfin:
return await self.query(query, query_type, session, identifiers) return await self.query(query, query_type, session, identifiers)
results = None results = None
authorization = ( authorization = (
"MediaBrowser , " "MediaBrowser , "
'Client="other", ' 'Client="other", '
@ -108,8 +108,12 @@ class Jellyfin:
'DeviceId="script", ' 'DeviceId="script", '
'Version="0.0.0"' 'Version="0.0.0"'
) )
headers = {"Accept": "application/json", "X-Emby-Token": self.token, "X-Emby-Authorization": authorization} headers = {
"Accept": "application/json",
"X-Emby-Token": self.token,
"X-Emby-Authorization": authorization,
}
if query_type == "get": if query_type == "get":
async with session.get( async with session.get(
self.baseurl + query, headers=headers self.baseurl + query, headers=headers

View File

@ -83,17 +83,21 @@ def generate_server_connections():
) )
for i, url in enumerate(plex_baseurl): for i, url in enumerate(plex_baseurl):
server = Plex(
baseurl=url.strip(),
token=plex_token[i].strip(),
username=None,
password=None,
servername=None,
ssl_bypass=ssl_bypass,
)
logger(f"Plex Server {i} info: {server.info()}", 3)
servers.append( servers.append(
( (
"plex", "plex",
Plex( server,
baseurl=url.strip(),
token=plex_token[i].strip(),
username=None,
password=None,
servername=None,
ssl_bypass=ssl_bypass,
),
) )
) )
@ -110,17 +114,20 @@ def generate_server_connections():
) )
for i, username in enumerate(plex_username): for i, username in enumerate(plex_username):
server = Plex(
baseurl=None,
token=None,
username=username.strip(),
password=plex_password[i].strip(),
servername=plex_servername[i].strip(),
ssl_bypass=ssl_bypass,
)
logger(f"Plex Server {i} info: {server.info()}", 3)
servers.append( servers.append(
( (
"plex", "plex",
Plex( server,
baseurl=None,
token=None,
username=username.strip(),
password=plex_password[i].strip(),
servername=plex_servername[i].strip(),
ssl_bypass=ssl_bypass,
),
) )
) )
@ -140,10 +147,14 @@ def generate_server_connections():
baseurl = baseurl.strip() baseurl = baseurl.strip()
if baseurl[-1] == "/": if baseurl[-1] == "/":
baseurl = baseurl[:-1] baseurl = baseurl[:-1]
server = Jellyfin(baseurl=baseurl, token=jellyfin_token[i].strip())
logger(f"Jellyfin Server {i} info: {server.info()}", 3)
servers.append( servers.append(
( (
"jellyfin", "jellyfin",
Jellyfin(baseurl=baseurl, token=jellyfin_token[i].strip()), server,
) )
) )

86
test/ci.env Normal file
View File

@ -0,0 +1,86 @@
# Global Settings
## Do not mark any shows/movies as played and instead just output to log if they would of been marked.
DRYRUN = "False"
## Additional logging information
DEBUG = "True"
## Debugging level, "info" is default, "debug" is more verbose
DEBUG_LEVEL = "debug"
## If set to true then the script will only run once and then exit
RUN_ONLY_ONCE = "True"
## How often to run the script in seconds
SLEEP_DURATION = 10
## Log file where all output will be written to
LOG_FILE = "log.log"
## Mark file where all shows/movies that have been marked as played will be written to
MARK_FILE = "mark.log"
## Timeout for requests for jellyfin
REQUEST_TIMEOUT = 300
## Max threads for processing
MAX_THREADS = 2
## Map usernames between servers in the event that they are different, order does not matter
## Comma seperated for multiple options
USER_MAPPING = {"JellyUser":"jellyplex_watched"}
## Map libraries between servers in the even that they are different, order does not matter
## Comma seperated for multiple options
LIBRARY_MAPPING = { "Shows": "TV Shows" }
## Blacklisting/Whitelisting libraries, library types such as Movies/TV Shows, and users. Mappings apply so if the mapping for the user or library exist then both will be excluded.
## Comma seperated for multiple options
#BLACKLIST_LIBRARY = ""
#WHITELIST_LIBRARY = "Movies"
#BLACKLIST_LIBRARY_TYPE = "Series"
#WHITELIST_LIBRARY_TYPE = "Movies, movie"
#BLACKLIST_USERS = ""
WHITELIST_USERS = "jellyplex_watched"
# Plex
## Recommended to use token as it is faster to connect as it is direct to the server instead of going through the plex servers
## URL of the plex server, use hostname or IP address if the hostname is not resolving correctly
## Comma seperated list for multiple servers
PLEX_BASEURL = "https://localhost:32400"
## Plex token https://support.plex.tv/articles/204059436-finding-an-authentication-token-x-plex-token/
## Comma seperated list for multiple servers
PLEX_TOKEN = "mVaCzSyd78uoWkCBzZ_Y"
## If not using plex token then use username and password of the server admin along with the servername
## Comma seperated for multiple options
#PLEX_USERNAME = "PlexUser, PlexUser2"
#PLEX_PASSWORD = "SuperSecret, SuperSecret2"
#PLEX_SERVERNAME = "Plex Server1, Plex Server2"
## Skip hostname validation for ssl certificates.
## Set to True if running into ssl certificate errors
SSL_BYPASS = "True"
## control the direction of syncing. e.g. SYNC_FROM_PLEX_TO_JELLYFIN set to true will cause the updates from plex
## to be updated in jellyfin. SYNC_FROM_PLEX_TO_PLEX set to true will sync updates between multiple plex servers
SYNC_FROM_PLEX_TO_JELLYFIN = "True"
SYNC_FROM_JELLYFIN_TO_PLEX = "True"
SYNC_FROM_PLEX_TO_PLEX = "True"
SYNC_FROM_JELLYFIN_TO_JELLYFIN = "True"
# Jellyfin
## Jellyfin server URL, use hostname or IP address if the hostname is not resolving correctly
## Comma seperated list for multiple servers
JELLYFIN_BASEURL = "http://localhost:8096"
## Jellyfin api token, created manually by logging in to the jellyfin server admin dashboard and creating an api key
## Comma seperated list for multiple servers
JELLYFIN_TOKEN = "d773c4db3ecc4b028fc0904d9694804c"