Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .env_example
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
HOST=0.0.0.0
PORT=8050
PORT=8050
USER_FILE_PATH='file/path/user.json'
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,6 @@ data/
*__pycache__/
*.pyc
./.pytest_cache
.env
.env
.vscode
.pytest_cache
19 changes: 19 additions & 0 deletions app/importers/UserImporter.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import os
import json

from app.tools.Logger import logger

class UserImporter:
def __init__(self):
self.user_file_path = os.environ.get("USER_FILE_PATH")
if self.user_file_path is None:
raise Exception("USER_FILE_PATH environment variable is not set.")

if '.json' not in self.user_file_path:
raise Exception("The user file needs to be a JSON file.")

with open(self.user_file_path, 'r') as file:
user_data = json.load(file)
logger.info(f"Imported user data from {self.user_file_path}.")

self.user_data = user_data
Empty file added app/importers/__init__.py
Empty file.
Empty file added tests/importers/__init__.py
Empty file.
85 changes: 85 additions & 0 deletions tests/importers/test_UserImporter.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
import pytest
import os
import json
from unittest.mock import mock_open, patch

from app.importers.UserImporter import UserImporter


#########################################################################################
# test values
#########################################################################################
USER_FILE_PATH = "fake/file/path/users.json"
USER_DATA = '''
{
"devices": [
{
"ip_address": "174.234.168.00",
"device_model": "unknown",
"device_platform": "ios",
"device_os_versions": "16.5.1"
}
],
"account": {
"signup_time": "2001-06-29 03:27:17.539",
"last_pause_time": "2003-09-04 03:04:32",
"last_unpause_time": "2020-12-10 16:53:40",
"last_seen": "2024-01-17 04:07:39",
"device_platform": "ios",
"device_os": "16.6.1",
"device_model": "unknown",
"app_version": "9.30.0",
"push_notifications_enabled": false
}
}
'''

#########################################################################################
# pytest fixtures
#########################################################################################
@pytest.fixture
def user_importer(monkeypatch):
monkeypatch.setenv("USER_FILE_PATH", USER_FILE_PATH)

with patch("builtins.open", mock_open(read_data=USER_DATA)) as mock_file, \
patch("json.load", return_value=json.loads(USER_DATA)) as mock_json_load:

user_importer = UserImporter()
return user_importer


#########################################################################################
# unit tests
#########################################################################################
def test_exists(user_importer):
assert user_importer is not None

def test_user_file_path_not_set():
if "USER_FILE_PATH" in os.environ:
del os.environ["USER_FILE_PATH"]

with pytest.raises(Exception, match="USER_FILE_PATH environment variable is not set."):
UserImporter()

def test_user_file_not_json():
os.environ["USER_FILE_PATH"] = "invalid_file.txt" # invalid value

with pytest.raises(Exception, match="The user file needs to be a JSON file."):
UserImporter()

def test_user_importer_loads_data(user_importer):
assert isinstance(user_importer.user_data, dict)
assert "devices" in user_importer.user_data
assert "account" in user_importer.user_data

def test_device_data(user_importer):
device = user_importer.user_data["devices"][0]
assert device["ip_address"] == "174.234.168.00"
assert device["device_platform"] == "ios"
assert device["device_os_versions"] == "16.5.1"

def test_account_data(user_importer):
account = user_importer.user_data["account"]
assert account["device_os"] == "16.6.1"
assert account["app_version"] == "9.30.0"
assert account["push_notifications_enabled"] is False
36 changes: 0 additions & 36 deletions tests/test_MatchAnalytics.py

This file was deleted.

126 changes: 0 additions & 126 deletions tests/test_matches.json

This file was deleted.

Loading