toggl-zei-py/toggl/tests.py

101 lines
3.2 KiB
Python

import os
import unittest
from toggl.TogglPy import Toggl
# these tests assume three things:
#
# first, that you have two environment variables defined
# TOGGL_API_KEY
# WORKPSPACE_ID
#
# second, that you are able to able to reach Toggl's live REST API.
#
# finally, the test_putTimeEntry() will likely fail unless you have 1) a Client "Self" and 2) Project "Self" defined.
# and 3) some Pomodoros completed in your time entries.
# this is because these are acceptance tests that are hitting my personal Toggl repo, where I do all three
# of the above defined
#
class TogglPyTests(unittest.TestCase):
def setUp(self):
self.api_key = os.environ["TOGGL_API_KEY"]
if self.api_key is None:
raise Exception("Unable to execute api tests without an api key")
self.workspace_id = os.environ["WORKSPACE_ID"]
if self.workspace_id is None:
raise Exception(
"Unable to execute api tests without a workspace key to query"
)
self.toggl = Toggl()
self.toggl.setAPIKey(self.api_key)
def test_connect(self):
response = self.toggl.request("https://api.track.toggl.com/api/v8/clients")
pi.track.toggl.com/
self.assertTrue(response is not None)
def test_putTimeEntry(self):
request_args = {
"workspace_id": self.workspace_id,
}
entries = self.toggl.getDetailedReport(request_args)
# for this tests I'm tagging my Pomodoro Entries
missing_projects = [
r
for r in entries["data"]
if r["project"] is None and "Pomodoro" in r["description"]
]
me = missing_projects[0]
me_id = me["id"] # remember for later
# I've tagged my pomodoro entries as Self/Self
cp = self.toggl.getClientProject("Self", "Self")
project_id = cp["data"]["id"]
me["pid"] = project_id
# his is the new stuff
response = self.toggl.putTimeEntry({"id": me_id, "pid": project_id})
self.assertTrue(response is not None)
self.assertTrue("data" in response)
self.assertTrue(response["data"]["pid"] == project_id)
def test_getDetailedReportCSV(self):
data = {
"workspace_id": self.workspace_id,
}
csvfile = "data.csv"
self.toggl.getDetailedReportCSV(data, csvfile)
self.assertTrue(os.path.isfile(csvfile))
os.remove(csvfile)
data = self.toggl.getDetailedReportCSV(data)
self.assertTrue(data is not None)
def test_getDetailedReport(self):
data = {
"workspace_id": self.workspace_id,
}
d = self.toggl.getDetailedReport(data)
self.assertTrue(d is not None)
self.assertTrue(len(d.keys()) > 0)
fields = ["total_count", "total_currencies", "total_billable", "data"]
for f in fields:
self.assertTrue(f in d.keys())
data = d["data"]
self.assertTrue(len(data) > 0)
dr = data[0]
self.assertTrue("client" in dr)
self.assertTrue("start" in dr)
self.assertTrue("end" in dr)
self.assertTrue("task" in dr)
self.assertTrue("user" in dr)
self.assertTrue("project" in dr)
if __name__ == "__main__":
unittest.main()