# -*- coding: utf-8; -*-

from pyramid import testing

from wuttaweb.views import progress as mod
from wuttaweb.progress import get_progress_session
from tests.util import WebTestCase


class TestProgressView(WebTestCase):

    def test_includeme(self):
        self.pyramid_config.include('wuttaweb.views.progress')

    def test_basic(self):
        self.request.session.id = 'mockid'
        self.request.matchdict = {'key': 'foo'}

        # first call with no setup, will create the progress session
        # but it should be "empty" - except not really since beaker
        # adds some keys by default
        context = mod.progress(self.request)
        self.assertIsInstance(context, dict)

        # now let's establish a progress session of our own
        progsess = get_progress_session(self.request, 'bar')
        progsess['maximum'] = 2
        progsess['value'] = 1
        progsess.save()

        # then call view, check results
        self.request.matchdict = {'key': 'bar'}
        context = mod.progress(self.request)
        self.assertEqual(context['maximum'], 2)
        self.assertEqual(context['value'], 1)
        self.assertNotIn('complete', context)

        # now mark it as complete, check results
        progsess['complete'] = True
        progsess['success_msg'] = "yay!"
        progsess.save()
        context = mod.progress(self.request)
        self.assertTrue(context['complete'])
        self.assertEqual(context['success_msg'], "yay!")

        # now do that all again, with error
        progsess = get_progress_session(self.request, 'baz')
        progsess['maximum'] = 2
        progsess['value'] = 1
        progsess.save()
        self.request.matchdict = {'key': 'baz'}
        context = mod.progress(self.request)
        self.assertEqual(context['maximum'], 2)
        self.assertEqual(context['value'], 1)
        self.assertNotIn('complete', context)
        self.assertNotIn('error', context)
        progsess['error'] = True
        progsess['error_msg'] = "omg!"
        progsess.save()
        context = mod.progress(self.request)
        self.assertTrue(context['error'])
        self.assertEqual(context['error_msg'], "omg!")
