# -*- coding: utf-8 -*-
# Copyright 2017 Luc Saffre
# License: BSD (see file COPYING for details)

"""Test whether :ticket:`2148` is fixed (Cannot insert person with
nonempty email in Amici (lino_xl.lib.phones))

You can run only these tests by issuing::

  $ go herman
  $ python manage.py test tests.test_insert_person


"""

from __future__ import unicode_literals

import datetime

from django.conf import settings
from django.utils.timezone import make_aware

from lino.api import dd, rt
from lino.utils.djangotest import TestCase
from lino.core import constants

from lino.modlib.users.choicelists import UserTypes

from lino.utils.instantiator import create

class TestCase(TestCase):
    """Miscellaneous tests."""
    maxDiff = None

    def test_01(self):
        self.assertEqual(settings.SETTINGS_MODULE, None)
        self.assertEqual(settings.LOGGING, {})
        self.assertEqual(settings.SERVER_EMAIL, 'root@localhost')
        
    def test_insert_person(self):
        # ContentType = rt.modules.contenttypes.ContentType
        # Person = rt.models.contacts.Person
        Partner = rt.models.contacts.Partner
        ContactDetail = rt.models.phones.ContactDetail
        User = settings.SITE.user_model
        # create(Project, name="Project")
        robin = create(
            User, username='robin',
            first_name="Robin",
            user_type=UserTypes.admin)
        # ar = rt.login('robin')
        # self.client.force_login(ar.user)
        url = "/api/contacts/Persons"
        post_data = dict()
        post_data[constants.URL_PARAM_ACTION_NAME] = 'submit_insert'
        post_data.update(first_name="Joe", last_name="Meyer",
                         email="joe@meyer.com")
        self.client.force_login(robin)
        response = self.client.post(
            url, post_data,
            REMOTE_USER='robin',
            HTTP_ACCEPT_LANGUAGE='en')
        result = self.check_json_result(
            response, 'rows success message close_window navinfo data_record detail_handler_name')
        self.assertEqual(result['success'], True)
        self.assertEqual(
            result['message'],
            """Person "Joe Meyer" has been created.""")

        joe = Partner.objects.get(pk=101)
        self.assertEqual(joe.email, "joe@meyer.com")
        self.assertEqual(ContactDetail.objects.count(), 1)
        cd = ContactDetail.objects.all()[0]
        self.assertEqual(cd.partner, joe)
        self.assertEqual(cd.value, "joe@meyer.com")
        
