# Copyright 2015 Cisco Systems, Inc.
#
#    Licensed under the Apache License, Version 2.0 (the "License"); you may
#    not use this file except in compliance with the License. You may obtain
#    a copy of the License at
#
#         http://www.apache.org/licenses/LICENSE-2.0
#
#    Unless required by applicable law or agreed to in writing, software
#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
#    License for the specific language governing permissions and limitations
#    under the License.

from django import forms
from django.test import client
from django.utils.translation import gettext_lazy as _
from django.views import generic

from horizon.test import helpers as test
from horizon import views

FAKENAME = "FakeName"


class ViewData(object):

    template_name = 'fake'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['object'] = {'name': 'myName'}
        return context


class PageWithNoTitle(ViewData, views.HorizonTemplateView):
    pass


class PageWithTitle(ViewData, views.HorizonTemplateView):
    page_title = "A Title"


class PageWithTitleData(ViewData, views.HorizonTemplateView):
    page_title = "A Title: {{ object.name }}"


class FormWithTitle(ViewData, views.HorizonFormView):
    form_class = forms.Form
    page_title = "A Title: {{ object.name }}"


class ViewWithTitle(views.PageTitleMixin, generic.TemplateView):
    page_title = "Fake"


class ViewWithTransTitle(views.PageTitleMixin, generic.TemplateView):
    page_title = _("Fake")


class PageTitleTests(test.TestCase):

    def setUp(self):
        super().setUp()
        self.request = client.RequestFactory().get('fake')

    def _dispatch(self, viewClass):
        p = viewClass()
        p.request = self.request
        return p.dispatch(self.request)

    def test_render_context_with_title(self):
        tm = ViewWithTitle()
        context = tm.render_context_with_title({})
        self.assertEqual("Fake", context['page_title'])

    def test_render_context_with_title_override(self):
        tm = ViewWithTitle()
        context = tm.render_context_with_title({'page_title': "ekaF"})
        self.assertEqual("ekaF", context['page_title'])

    def test_render_context_with_title_lazy_translations(self):
        tm = ViewWithTransTitle()
        context = tm.render_context_with_title({})
        self.assertEqual("Fake", context['page_title'])

    def test_no_title_set(self):
        res = self._dispatch(PageWithNoTitle)
        self.assertEqual("", res.context_data['page_title'])

    def test_title_set(self):
        res = self._dispatch(PageWithTitle)
        self.assertEqual("A Title", res.context_data['page_title'])

    def test_title_with_data(self):
        res = self._dispatch(PageWithTitleData)
        self.assertEqual("A Title: myName", res.context_data['page_title'])

    def test_form_with_title(self):
        res = self._dispatch(FormWithTitle)
        self.assertEqual("A Title: myName", res.context_data['page_title'])
