# Copyright (c) 2019, InfluxFramework LLC
# License: MIT. See LICENSE
import influxframework
import influxframework.cache_manager
from influxframework.tests.utils import InfluxFrameworkTestCase


class TestMilestoneTracker(InfluxFrameworkTestCase):
	def test_milestone(self):
		influxframework.db.delete("Milestone Tracker")

		influxframework.cache().delete_key("milestone_tracker_map")

		milestone_tracker = influxframework.get_doc(
			dict(doctype="Milestone Tracker", document_type="ToDo", track_field="status")
		).insert()

		todo = influxframework.get_doc(dict(doctype="ToDo", description="test milestone", status="Open")).insert()

		milestones = influxframework.get_all(
			"Milestone",
			fields=["track_field", "value", "milestone_tracker"],
			filters=dict(reference_type=todo.doctype, reference_name=todo.name),
		)

		self.assertEqual(len(milestones), 1)
		self.assertEqual(milestones[0].track_field, "status")
		self.assertEqual(milestones[0].value, "Open")

		todo.status = "Closed"
		todo.save()

		milestones = influxframework.get_all(
			"Milestone",
			fields=["track_field", "value", "milestone_tracker"],
			filters=dict(reference_type=todo.doctype, reference_name=todo.name),
			order_by="modified desc",
		)

		self.assertEqual(len(milestones), 2)
		self.assertEqual(milestones[0].track_field, "status")
		self.assertEqual(milestones[0].value, "Closed")

		# cleanup
		influxframework.db.delete("Milestone")
		milestone_tracker.delete()
