# -*- coding: utf-8 -*-
import unittest
import mock
from interactors import base

class baseInteractorTestCase(unittest.TestCase):
	""" some tests for the base interactor implementation."""

	@mock.patch("interactors.base.pub", esp_set=True)
	def test_base_interactor(self, pub_mock):
		""" Test the base interactor class. """
		view=mock.MagicMock(name="view")
		interactor_ = base.baseInteractor()
		presenter_ = mock.MagicMock(name="Presenter")
		interactor_.install(view=view, presenter=presenter_, modulename="base")
		# Check if the interactor has called pubsub correctly.
		pub_mock.subscribe.assert_any_call(interactor_.disable_control, "base_disable_control"),
		pub_mock.subscribe.assert_any_call(interactor_.enable_control, "base_enable_control"),
		pub_mock.subscribe.assert_any_call(interactor_.set_label, "base_set_label"),
		pub_mock.subscribe.assert_any_call(interactor_.focus_control, "base_focus_control")
		# Now, simulate some event calls.
		interactor_.disable_control(control="some_control")
		view.disable.assert_called_with("some_control")
		interactor_.enable_control(control="some_control")
		view.enable.assert_called_with("some_control")
		interactor_.set_label(control="some_control", label="label")
		view.set.assert_called_with("some_control", "label")
		interactor_.focus_control(control="some_control")
		view.some_control.SetFocus.assert_called_with()
		interactor_.uninstall()
		pub_mock.unsubscribe.assert_any_call(interactor_.disable_control, "base_disable_control"),
		pub_mock.unsubscribe.assert_any_call(interactor_.enable_control, "base_enable_control"),
		pub_mock.unsubscribe.assert_any_call(interactor_.set_label, "base_set_label"),
		pub_mock.unsubscribe.assert_any_call(interactor_.focus_control, "base_focus_control")

if __name__ == "__main__":
	unittest.main()