132 lines
5.0 KiB
Python
132 lines
5.0 KiB
Python
import unittest
|
|
from unittest.mock import MagicMock, patch
|
|
from datetime import datetime, timedelta
|
|
import json
|
|
import os
|
|
import csv
|
|
from tamigo import get_worked_days, TamigoClient
|
|
|
|
class TestTamigoExport(unittest.TestCase):
|
|
def setUp(self):
|
|
self.client = MagicMock(spec=TamigoClient)
|
|
self.client.session_token = "fake-token"
|
|
|
|
def test_get_worked_days_processing(self):
|
|
# Mock API response
|
|
mock_shifts = [
|
|
{
|
|
"Date": "/Date(1741651200000)/", # 2025-03-11
|
|
"ActualShiftHours": 8.5,
|
|
"ActualShiftText": "Work",
|
|
"IsAbsent": False
|
|
},
|
|
{
|
|
"StartTime": "2025-03-10T09:00:00Z",
|
|
"EndTime": "2025-03-10T17:00:00Z",
|
|
"ActualShiftHours": 0,
|
|
"IsAbsent": False
|
|
}
|
|
]
|
|
self.client.get_employee_actual_shifts.return_value = mock_shifts
|
|
|
|
start_date = datetime(2025, 3, 1)
|
|
end_date = datetime(2025, 3, 15)
|
|
|
|
with patch('tamigo.console'):
|
|
work_days = get_worked_days(self.client, start_date, end_date)
|
|
|
|
self.assertIsNotNone(work_days)
|
|
self.assertIn("2025-03-11", work_days)
|
|
self.assertEqual(work_days["2025-03-11"]["hours"], 8.5)
|
|
self.assertIn("2025-03-10", work_days)
|
|
self.assertEqual(work_days["2025-03-10"]["hours"], 8.0)
|
|
|
|
@patch('tamigo.select_date_range')
|
|
@patch('tamigo.get_worked_days')
|
|
@patch('questionary.select')
|
|
@patch('questionary.text')
|
|
@patch('tamigo.console')
|
|
def test_export_worked_hours_csv(self, mock_console, mock_text, mock_select, mock_get_worked, mock_date_range):
|
|
from tamigo import export_worked_hours
|
|
|
|
mock_date_range.return_value = (datetime(2025, 3, 1), datetime(2025, 3, 15))
|
|
mock_get_worked.return_value = {
|
|
"2025-03-11": {"hours": 8.5, "text": "Work"},
|
|
"2025-03-10": {"hours": 8.0, "text": "Work"}
|
|
}
|
|
|
|
mock_select.return_value.ask.return_value = "CSV"
|
|
mock_text.return_value.ask.return_value = "test_export.csv"
|
|
|
|
export_worked_hours(self.client)
|
|
|
|
self.assertTrue(os.path.exists("test_export.csv"))
|
|
with open("test_export.csv", "r") as f:
|
|
reader = csv.reader(f)
|
|
rows = list(reader)
|
|
self.assertEqual(rows[0], ["Date", "Hours", "Details"])
|
|
# CSV rows might be in different order if dict keys are not sorted, but sorted() was used in code
|
|
self.assertEqual(rows[1], ["2025-03-10", "8.00", "Work"])
|
|
self.assertEqual(rows[2], ["2025-03-11", "8.50", "Work"])
|
|
|
|
os.remove("test_export.csv")
|
|
|
|
@patch('tamigo.select_date_range')
|
|
@patch('tamigo.get_worked_days')
|
|
@patch('questionary.select')
|
|
@patch('questionary.text')
|
|
@patch('tamigo.console')
|
|
def test_export_worked_hours_json(self, mock_console, mock_text, mock_select, mock_get_worked, mock_date_range):
|
|
from tamigo import export_worked_hours
|
|
|
|
mock_date_range.return_value = (datetime(2025, 3, 1), datetime(2025, 3, 15))
|
|
mock_get_worked.return_value = {
|
|
"2025-03-11": {"hours": 8.5, "text": "Work"},
|
|
"2025-03-10": {"hours": 8.0, "text": "Work"}
|
|
}
|
|
|
|
mock_select.return_value.ask.return_value = "JSON"
|
|
mock_text.return_value.ask.return_value = "test_export.json"
|
|
|
|
export_worked_hours(self.client)
|
|
|
|
self.assertTrue(os.path.exists("test_export.json"))
|
|
with open("test_export.json", "r") as f:
|
|
data = json.load(f)
|
|
self.assertEqual(data["2025-03-11"]["hours"], 8.5)
|
|
|
|
os.remove("test_export.json")
|
|
|
|
@patch('tamigo.select_date_range')
|
|
@patch('tamigo.get_worked_days')
|
|
@patch('questionary.select')
|
|
@patch('questionary.text')
|
|
@patch('tamigo.console')
|
|
def test_export_worked_hours_xlsx(self, mock_console, mock_text, mock_select, mock_get_worked, mock_date_range):
|
|
from tamigo import export_worked_hours
|
|
|
|
mock_date_range.return_value = (datetime(2025, 3, 1), datetime(2025, 3, 15))
|
|
mock_get_worked.return_value = {
|
|
"2025-03-11": {"hours": 8.5, "text": "Work"},
|
|
"2025-03-10": {"hours": 8.0, "text": "Work"}
|
|
}
|
|
|
|
mock_select.return_value.ask.return_value = "XLSX"
|
|
mock_text.return_value.ask.return_value = "test_export.xlsx"
|
|
|
|
export_worked_hours(self.client)
|
|
|
|
self.assertTrue(os.path.exists("test_export.xlsx"))
|
|
# We could use openpyxl to verify content if we really wanted to
|
|
import openpyxl
|
|
wb = openpyxl.load_workbook("test_export.xlsx")
|
|
ws = wb.active
|
|
self.assertEqual(ws.cell(row=1, column=1).value, "Date")
|
|
self.assertEqual(ws.cell(row=2, column=1).value, "2025-03-10")
|
|
self.assertEqual(ws.cell(row=2, column=2).value, 8.0)
|
|
|
|
os.remove("test_export.xlsx")
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|