# Path: InternetSemLimites/core/models.py
# class Provider(models.Model):
# 
#     FAME = 'F'
#     SHAME = 'S'
#     CATEGORIES = ((FAME, 'Hall of Fame (não utilizará limites/fraquia)'),
#                   (SHAME, 'Hall of Shame (utilizará limites/franquia)'))
#     CATEGORIES_DICT = dict(CATEGORIES)
# 
#     NEW = 'N'
#     DISCUSSION = 'D'
#     PUBLISHED = 'P'
#     REFUSED = 'R'
#     EDIT = 'E'
#     OUTDATED = 'O'
#     STATUS = ((NEW, 'Aguardando moderação'),
#               (DISCUSSION, 'Em discussão'),
#               (PUBLISHED, 'Publicado'),
#               (REFUSED, 'Recusado'),
#               (EDIT, 'Edição aguardando moderação'),
#               (OUTDATED, 'Substituído por versão atualizada'))
# 
#     BLANK = ''
#     REPEATED = 'R'
#     NOT_FOUND = 'N'
#     IMPRECISE = 'I'
#     NOT_ACCESSIBLE = 'A'
#     PRIVATE = 'P'
#     OTHER = 'O'
#     REASONS = ((BLANK, 'Não se aplica'),
#                (REPEATED, 'Provedor repetido'),
#                (NOT_FOUND, 'Fonte não encontrada (404)'),
#                (IMPRECISE, 'Fonte com informações imprecisas ou erradas'),
#                (NOT_ACCESSIBLE, 'Fonte não acessível (ex.: requer login)'),
#                (PRIVATE, 'Fonte é comunicação privada (ex.: chat ou suporte)'),
#                (OTHER, 'Outros'))
# 
#     category = models.CharField('Categoria', max_length=1, choices=CATEGORIES)
#     name = models.CharField('Nome do provedor', max_length=128)
#     url = models.URLField('URL do provedor')
#     source = models.URLField('URL da fonte da informação')
#     coverage = models.ManyToManyField(State, verbose_name='Cobertura')
#     other = models.CharField('Observações', max_length=140, blank=True)
# 
#     edited_from = models.ForeignKey('self', null=True, blank=True, on_delete=models.CASCADE)
#     status = models.CharField('Status', max_length=1, choices=STATUS, default=NEW)
#     moderation_reason = models.CharField('Motivo', max_length=1, choices=REASONS, blank=True, default=BLANK)
#     moderation_comments = models.TextField('Comentários da moderação', blank=True)
# 
#     created_at = models.DateTimeField('Criado em', auto_now_add=True)
#     updated_at = models.DateTimeField('Editado em', auto_now=True)
# 
#     objects = ProviderManager()
# 
#     def __str__(self):
#         return self.name
# 
#     def get_absolute_url(self):
#         return resolve_url('provider', self.pk)
# 
#     def get_moderation_reason(self):
#         return dict(self.REASONS).get(self.moderation_reason)
# 
#     def get_status(self):
#         return dict(self.STATUS).get(self.status)
# 
#     @property
#     def coverage_to_list(self):
#         return [state.abbr for state in self.coverage.all()]
# 
#     @property
#     def category_name(self):
#         category = self.CATEGORIES_DICT.get(self.category)
#         return re.sub(r' \([\w\sáã\/]*\)$', '', category)
# 
#     class Meta:
#         verbose_name = 'provedor'
#         verbose_name_plural = 'provedores'
#         ordering = ['name']
# 
# class State(models.Model):
#     name = models.CharField('Nome', max_length=128)
#     abbr = models.CharField('Sigla', max_length=2)
# 
#     def __str__(self):
#         return f'{self.name} ({self.abbr})'
# 
#     class Meta:
#         ordering = ['name']


from django.shortcuts import resolve_url
from django.test import TestCase
from InternetSemLimites.core.models import Provider, State


class TestGet(TestCase):

    def setUp(self):
        sc, *_ = State.objects.get_or_create(abbr='SC', name='Santa Catarina')
        go, *_ = State.objects.get_or_create(abbr='GO', name='Goiás')
        props = {'name': 'Xpto',
                 'url': 'http://xp.to',
                 'source': 'http://twitter.com/xpto',

# Path: InternetSemLimites/core/models.py
# class Provider(models.Model):
# 
#     FAME = 'F'
#     SHAME = 'S'
#     CATEGORIES = ((FAME, 'Hall of Fame (não utilizará limites/fraquia)'),
#                   (SHAME, 'Hall of Shame (utilizará limites/franquia)'))
#     CATEGORIES_DICT = dict(CATEGORIES)
# 
#     NEW = 'N'
#     DISCUSSION = 'D'
#     PUBLISHED = 'P'
#     REFUSED = 'R'
#     EDIT = 'E'
#     OUTDATED = 'O'
#     STATUS = ((NEW, 'Aguardando moderação'),
#               (DISCUSSION, 'Em discussão'),
#               (PUBLISHED, 'Publicado'),
#               (REFUSED, 'Recusado'),
#               (EDIT, 'Edição aguardando moderação'),
#               (OUTDATED, 'Substituído por versão atualizada'))
# 
#     BLANK = ''
#     REPEATED = 'R'
#     NOT_FOUND = 'N'
#     IMPRECISE = 'I'
#     NOT_ACCESSIBLE = 'A'
#     PRIVATE = 'P'
#     OTHER = 'O'
#     REASONS = ((BLANK, 'Não se aplica'),
#                (REPEATED, 'Provedor repetido'),
#                (NOT_FOUND, 'Fonte não encontrada (404)'),
#                (IMPRECISE, 'Fonte com informações imprecisas ou erradas'),
#                (NOT_ACCESSIBLE, 'Fonte não acessível (ex.: requer login)'),
#                (PRIVATE, 'Fonte é comunicação privada (ex.: chat ou suporte)'),
#                (OTHER, 'Outros'))
# 
#     category = models.CharField('Categoria', max_length=1, choices=CATEGORIES)
#     name = models.CharField('Nome do provedor', max_length=128)
#     url = models.URLField('URL do provedor')
#     source = models.URLField('URL da fonte da informação')
#     coverage = models.ManyToManyField(State, verbose_name='Cobertura')
#     other = models.CharField('Observações', max_length=140, blank=True)
# 
#     edited_from = models.ForeignKey('self', null=True, blank=True, on_delete=models.CASCADE)
#     status = models.CharField('Status', max_length=1, choices=STATUS, default=NEW)
#     moderation_reason = models.CharField('Motivo', max_length=1, choices=REASONS, blank=True, default=BLANK)
#     moderation_comments = models.TextField('Comentários da moderação', blank=True)
# 
#     created_at = models.DateTimeField('Criado em', auto_now_add=True)
#     updated_at = models.DateTimeField('Editado em', auto_now=True)
# 
#     objects = ProviderManager()
# 
#     def __str__(self):
#         return self.name
# 
#     def get_absolute_url(self):
#         return resolve_url('provider', self.pk)
# 
#     def get_moderation_reason(self):
#         return dict(self.REASONS).get(self.moderation_reason)
# 
#     def get_status(self):
#         return dict(self.STATUS).get(self.status)
# 
#     @property
#     def coverage_to_list(self):
#         return [state.abbr for state in self.coverage.all()]
# 
#     @property
#     def category_name(self):
#         category = self.CATEGORIES_DICT.get(self.category)
#         return re.sub(r' \([\w\sáã\/]*\)$', '', category)
# 
#     class Meta:
#         verbose_name = 'provedor'
#         verbose_name_plural = 'provedores'
#         ordering = ['name']
# 
# class State(models.Model):
#     name = models.CharField('Nome', max_length=128)
#     abbr = models.CharField('Sigla', max_length=2)
# 
#     def __str__(self):
#         return f'{self.name} ({self.abbr})'
# 
#     class Meta:
#         ordering = ['name']


# Path: InternetSemLimites/api/tests/test_fame_view.py
from django.shortcuts import resolve_url
from django.test import TestCase
from InternetSemLimites.core.models import Provider, State



class TestGet(TestCase):

    def setUp(self):
        sc, *_ = State.objects.get_or_create(abbr='SC', name='Santa Catarina')
        go, *_ = State.objects.get_or_create(abbr='GO', name='Goiás')
        props = {'name': 'Xpto',
                 'url': 'http://xp.to',
                 'source': 'http://twitter.com/xpto',

                 'category': Provider.FAME,