# -*- coding: utf-8 -*-
import six
from django.test import TestCase
from django.template import Context, Template, TemplateSyntaxError


class IndentByTagExceptions(TestCase):
    """Test for indentby exceptions."""

    def test_should_raise_TemplateSyntaxError_if_args_lenght_not_in_2_4(self):
        content = """{% load indent_text %}
{% indentby %}
Hello World
{% endindentby %}"""
        with six.assertRaisesRegex(self, TemplateSyntaxError, "indentby tag requires 1 or 3 arguments"):
            Template(content).render(Context())


class IndentByTagTests(TestCase):
    """Tests for indentby tag."""

    def test_should_add_4_spaces_indent_before_given_text(self):
        content = """{% load indent_text %}
{% indentby 4 %}
Hello World
{% endindentby %}"""
        expected_result = '\n    \n    Hello World\n'

        result = Template(content).render(Context())

        self.assertEqual(result, expected_result)

    def test_should_add_2_spaces_indent_before_given_text_if_statement_True(self):
        content = """{% load indent_text %}
{% indentby 2 if test_statement %}
Hello World
{% endindentby %}"""
        expected_result = '\n  \n  Hello World\n'

        result = Template(content).render(Context({'test_statement': True}))

        self.assertEqual(result, expected_result)

    def test_should_not_add_any_spaces_indent_before_given_text_if_statement_variable_does_not_exist(self):
        content = """{% load indent_text %}
{% indentby 2 if test_statement %}
Hello World
{% endindentby %}"""
        expected_result = '\n\nHello World\n'

        result = Template(content).render(Context())

        self.assertEqual(result, expected_result)
