"""
Tests for the card create view.
"""
from django.test import RequestFactory
from django.urls import reverse

from django_mock_queries.query import MockSet
from django_mock_queries.query import MockModel

from cards.views import CardCreateView
from cards.models import Template


def test_card_create_template(mocker):
    template_object = MockModel(mock_name="template", pk=1)
    mocker.patch("cards.views.Template.objects", MockSet(template_object))
    request = RequestFactory().get(reverse("cards:card-create"))

    view = CardCreateView()
    view.setup(request)
    view.kwargs = {"pk": 1}
    template = view.get_card_template()

    assert template == template_object


def test_card_create_template_non_existant(mocker):
    mocker.patch("cards.views.Template.objects", MockSet(model=Template))
    request = RequestFactory().get(reverse("cards:card-create"))

    view = CardCreateView()
    view.setup(request)
    view.kwargs = {"pk": 1}
    template = view.get_card_template()

    assert template is None


def test_card_create_horizontal_orientation_context(mocker):
    request = RequestFactory().get(
        reverse("cards:card-create"),
        {"orientation": "1"},
    )

    view = CardCreateView()
    view.setup(request)
    mocker.patch.object(view, "object", create=True)
    context = view.get_context_data()

    assert context["orientation"] == 1


def test_card_create_vertical_orientation_context(mocker):
    request = RequestFactory().get(
        reverse("cards:card-create"),
        {"orientation": "2"},
    )

    view = CardCreateView()
    view.setup(request)
    mocker.patch.object(view, "object", create=True)
    context = view.get_context_data()

    assert context["orientation"] == 2


def test_card_create_invalid_orientation_context(mocker):
    request = RequestFactory().get(
        reverse("cards:card-create"),
        {"orientation": "3"},
    )

    view = CardCreateView()
    view.setup(request)
    mocker.patch.object(view, "object", create=True)
    context = view.get_context_data()

    assert context["orientation"] == 1


def test_card_create_default_orientation(mocker):
    request = RequestFactory().get(reverse("cards:card-create"))

    view = CardCreateView()
    view.setup(request)
    mocker.patch.object(view, "object", create=True)
    context = view.get_context_data()

    assert context["orientation"] == 1


def test_card_create_template_in_context(mocker):
    request = RequestFactory().get(reverse("cards:card-create"))

    view = CardCreateView()
    view.setup(request)
    view.kwargs = {"pk": 1}
    mocker.patch.object(view, "object", create=True)
    mocker.patch.object(view, "get_card_template")
    mocker.return_value = True
    context = view.get_context_data()

    assert context["template"]


def test_card_create_blank_in_context(mocker):
    mocker.patch("cards.views.Template.objects", MockSet(model=Template))
    request = RequestFactory().get(reverse("cards:card-create"))

    view = CardCreateView()
    view.setup(request)
    mocker.patch.object(view, "object", create=True)
    context = view.get_context_data()

    assert context["blank"]
