# Path: borme/models.py
# class Person(m.Model):
#     """ Persona """
#     name = m.CharField(max_length=200, db_index=True)
#     slug = m.SlugField(max_length=200, primary_key=True)
#     in_companies = JSONField(default=list)
#     in_bormes = JSONField(default=list)
# 
#     date_updated = m.DateField(db_index=True)
#     cargos_actuales = JSONField(default=list)
#     cargos_historial = JSONField(default=list)
# 
#     document = SearchVectorField(null=True, db_index=True)
# 
#     # last access
#     # number of visits
# 
#     def add_in_companies(self, company):
#         if company not in self.in_companies:
#             self.in_companies.append(company)
# 
#     def add_in_bormes(self, borme):
#         if borme not in self.in_bormes:
#             self.in_bormes.append(borme)
# 
#     def update_cargos_entrantes(self, cargos):
#         """ cargos = [dict] """
#         self.cargos_actuales.extend(cargos)
# 
#     def update_cargos_salientes(self, cargos):
#         """ cargos = [dict] """
# 
#         for cargo in cargos:
#             for cargo_a in self.cargos_actuales:
#                 if all(cargo[k] == cargo_a[k] for k in ('name', 'title')):
#                     self.cargos_actuales.remove(cargo_a)
#                     cargo['date_from'] = cargo_a['date_from']
#                     break
#             self.cargos_historial.append(cargo)
# 
#     def _cesar_cargo(self, company, date):
#         """ Se llama a este método cuando una sociedad se extingue.
#         Todos los cargos vigentes que ocupe en la sociedad extinguida pasan a
#         estar en la lista de cargos cesados.
#         company: str
#         date: str iso format
#         """
#         for cargo in self.cargos_actuales:
#             if cargo['name'] == company:
#                 self.cargos_actuales.remove(cargo)
#                 cargo['date_to'] = date
#                 self.cargos_historial.append(cargo)
# 
#     def get_cargos_actuales(self, offset=0, limit=settings.CARGOS_LIMIT):
#         """ Devuelve el listado de cargos actuales de una sociedad y si hace
#         falta mostrar más (paginación)
# 
#         :rtype: (list, bool)
#         """
#         cargos = self.cargos_actuales.copy()
#         cargos = [dict(item, **{'type': 'company'}) for item in cargos]
#         cargos = sorted(cargos, key=lambda k: k['date_from'])
# 
#         if limit == 0:
#             limit = len(cargos)
#         show_more = offset+limit < len(cargos)
# 
#         return cargos[offset:offset+limit], show_more
# 
#     def get_cargos_historial(self, offset=0, limit=settings.CARGOS_LIMIT):
#         """ Devuelve el listado de cargos pasados de una sociedad y si hace
#         falta mostrar más (paginación)
# 
#         :rtype: (list, bool)
#         """
#         cargos = self.cargos_historial.copy()
#         cargos = [dict(item, **{'type': 'company'}) for item in cargos]
#         cargos = sorted(cargos, key=lambda k: k['date_to'])
# 
#         if limit == 0:
#             limit = len(cargos)
#         show_more = offset+limit < len(cargos)
# 
#         return cargos[offset:offset+limit], show_more
# 
#     @property
#     def total_companies(self):
#         return len(self.in_companies)
# 
#     @property
#     def total_bormes(self):
#         return len(self.in_bormes)
# 
#     @property
#     def todos_cargos(self):
#         return self.cargos_actuales + self.cargos_historial
# 
#     def save(self, *args, **kwargs):
#         self.slug = slugify(self.name)
#         super(Person, self).save(*args, **kwargs)
# 
#     def get_absolute_url(self):
#         return reverse('borme-persona', args=[str(self.slug)])
# 
#     def __str__(self):
#         return self.name


from django.test import TestCase
from borme.models import Person
import datetime


today = datetime.date.today()
tomorrow = today + datetime.timedelta(days=1)


class TestPersonModel(TestCase):

    # This method run on instance of class
    @classmethod
    def setUpClass(cls):
        super(TestPersonModel, cls).setUpClass()

        p1 = Person(name='JUAN', date_updated=today)
        p1.save()

    def test_person_object(self):

# Path: borme/models.py
# class Person(m.Model):
#     """ Persona """
#     name = m.CharField(max_length=200, db_index=True)
#     slug = m.SlugField(max_length=200, primary_key=True)
#     in_companies = JSONField(default=list)
#     in_bormes = JSONField(default=list)
# 
#     date_updated = m.DateField(db_index=True)
#     cargos_actuales = JSONField(default=list)
#     cargos_historial = JSONField(default=list)
# 
#     document = SearchVectorField(null=True, db_index=True)
# 
#     # last access
#     # number of visits
# 
#     def add_in_companies(self, company):
#         if company not in self.in_companies:
#             self.in_companies.append(company)
# 
#     def add_in_bormes(self, borme):
#         if borme not in self.in_bormes:
#             self.in_bormes.append(borme)
# 
#     def update_cargos_entrantes(self, cargos):
#         """ cargos = [dict] """
#         self.cargos_actuales.extend(cargos)
# 
#     def update_cargos_salientes(self, cargos):
#         """ cargos = [dict] """
# 
#         for cargo in cargos:
#             for cargo_a in self.cargos_actuales:
#                 if all(cargo[k] == cargo_a[k] for k in ('name', 'title')):
#                     self.cargos_actuales.remove(cargo_a)
#                     cargo['date_from'] = cargo_a['date_from']
#                     break
#             self.cargos_historial.append(cargo)
# 
#     def _cesar_cargo(self, company, date):
#         """ Se llama a este método cuando una sociedad se extingue.
#         Todos los cargos vigentes que ocupe en la sociedad extinguida pasan a
#         estar en la lista de cargos cesados.
#         company: str
#         date: str iso format
#         """
#         for cargo in self.cargos_actuales:
#             if cargo['name'] == company:
#                 self.cargos_actuales.remove(cargo)
#                 cargo['date_to'] = date
#                 self.cargos_historial.append(cargo)
# 
#     def get_cargos_actuales(self, offset=0, limit=settings.CARGOS_LIMIT):
#         """ Devuelve el listado de cargos actuales de una sociedad y si hace
#         falta mostrar más (paginación)
# 
#         :rtype: (list, bool)
#         """
#         cargos = self.cargos_actuales.copy()
#         cargos = [dict(item, **{'type': 'company'}) for item in cargos]
#         cargos = sorted(cargos, key=lambda k: k['date_from'])
# 
#         if limit == 0:
#             limit = len(cargos)
#         show_more = offset+limit < len(cargos)
# 
#         return cargos[offset:offset+limit], show_more
# 
#     def get_cargos_historial(self, offset=0, limit=settings.CARGOS_LIMIT):
#         """ Devuelve el listado de cargos pasados de una sociedad y si hace
#         falta mostrar más (paginación)
# 
#         :rtype: (list, bool)
#         """
#         cargos = self.cargos_historial.copy()
#         cargos = [dict(item, **{'type': 'company'}) for item in cargos]
#         cargos = sorted(cargos, key=lambda k: k['date_to'])
# 
#         if limit == 0:
#             limit = len(cargos)
#         show_more = offset+limit < len(cargos)
# 
#         return cargos[offset:offset+limit], show_more
# 
#     @property
#     def total_companies(self):
#         return len(self.in_companies)
# 
#     @property
#     def total_bormes(self):
#         return len(self.in_bormes)
# 
#     @property
#     def todos_cargos(self):
#         return self.cargos_actuales + self.cargos_historial
# 
#     def save(self, *args, **kwargs):
#         self.slug = slugify(self.name)
#         super(Person, self).save(*args, **kwargs)
# 
#     def get_absolute_url(self):
#         return reverse('borme-persona', args=[str(self.slug)])
# 
#     def __str__(self):
#         return self.name


# Path: borme/tests/test_person_model.py
from django.test import TestCase
from borme.models import Person
import datetime



today = datetime.date.today()
tomorrow = today + datetime.timedelta(days=1)


class TestPersonModel(TestCase):

    # This method run on instance of class
    @classmethod
    def setUpClass(cls):
        super(TestPersonModel, cls).setUpClass()

        p1 = Person(name='JUAN', date_updated=today)
        p1.save()

    def test_person_object(self):

        find = Person.objects.filter(name='JUAN')