Merge pull request #38 from ikame/pytest

Integration tests
remotes/origin/enhancement/email-actions
Jesús Espino 2014-04-30 09:21:34 +02:00
commit 64d9ba17ca
6 changed files with 113 additions and 30 deletions

View File

@ -1,2 +1,3 @@
[pytest]
DJANGO_SETTINGS_MODULE = settings.testing
DJANGO_SETTINGS_MODULE = settings.testing
python_paths = .

View File

@ -4,3 +4,4 @@ factory-boy==2.3.1
py==1.4.20
pytest==2.5.2
pytest-django==2.6.1
pytest-pythonpath=0.3

View File

@ -1,23 +0,0 @@
# -*- coding: utf-8 -*-
import pytest
from unittest import mock
from rest_framework.reverse import reverse
from ..factories import DomainFactory
pytestmark = pytest.mark.django_db
def setup_module(module):
module.patcher = mock.patch("taiga.domains.base.get_default_domain", DomainFactory.build)
module.patcher.start()
def teardown_module(module):
module.patcher.stop()
def test_respond_400_if_credentials_are_invalid(client):
response = client.post(reverse("auth-list"), {"username": "john", "password": "smith"})
assert response.status_code == 400

View File

@ -1,13 +1,62 @@
# -*- coding: utf-8 -*-
import factory
import uuid
from taiga.domains import models
import factory
from django.conf import settings
import taiga.domains.models
import taiga.projects.models
import taiga.users.models
class DomainFactory(factory.DjangoModelFactory):
FACTORY_FOR = models.Domain
FACTORY_FOR = taiga.domains.models.Domain
FACTORY_DJANGO_GET_OR_CREATE = ("domain",)
public_register = False
name = "Default domain"
domain = "default"
scheme = None
name = "localhost"
domain = "localhost"
public_register = False
class ProjectTemplateFactory(factory.DjangoModelFactory):
FACTORY_FOR = taiga.projects.models.ProjectTemplate
name = "Template name"
slug = settings.DEFAULT_PROJECT_TEMPLATE
default_owner_role = "tester"
class ProjectFactory(factory.DjangoModelFactory):
FACTORY_FOR = taiga.projects.models.Project
name = factory.Sequence(lambda n: "Project {}".format(n))
slug = factory.Sequence(lambda n: "project-{}-slug".format(n))
description = "Project description"
owner = factory.SubFactory("tests.factories.UserFactory")
domain = factory.SubFactory("tests.factories.DomainFactory")
creation_template = factory.SubFactory("tests.factories.ProjectTemplateFactory")
class RoleFactory(factory.DjangoModelFactory):
FACTORY_FOR = taiga.users.models.Role
name = "Tester"
project = factory.SubFactory("tests.factories.ProjectFactory")
class UserFactory(factory.DjangoModelFactory):
FACTORY_FOR = taiga.users.models.User
username = factory.Sequence(lambda n: "user{}".format(n))
email = factory.LazyAttribute(lambda obj: '%s@email.com' % obj.username)
password = factory.PostGeneration(lambda obj, *args, **kwargs: obj.set_password(obj.username))
class MembershipFactory(factory.DjangoModelFactory):
FACTORY_FOR = taiga.projects.models.Membership
token = factory.LazyAttribute(lambda obj: uuid.uuid1())
project = factory.SubFactory("tests.factories.ProjectFactory")
role = factory.SubFactory("tests.factories.RoleFactory")
user = factory.SubFactory("tests.factories.UserFactory")

View File

@ -0,0 +1,55 @@
# -*- coding: utf-8 -*-
from unittest import mock
import pytest
from rest_framework.reverse import reverse
from .. import factories
pytestmark = pytest.mark.django_db
def setup_module(module):
module.patcher = mock.patch("taiga.domains.base.get_default_domain",
mock.Mock(return_value=factories.DomainFactory()))
module.patcher.start()
def teardown_module(module):
module.patcher.stop()
class TestPublicRegistration:
@classmethod
def setup_class(cls):
cls.form = {"username": "username", "password": "password", "first_name": "fname",
"last_name": "lname", "email": "user@email.com", "type": "public"}
def test_respond_201_if_domain_allows_public_registration(self, client):
domain = factories.DomainFactory(public_register=True)
response = client.post(reverse("auth-register"), self.form, HTTP_X_HOST=domain.domain)
assert response.status_code == 201
def test_respond_400_if_domain_does_not_allow_public_registration(self, client):
domain = factories.DomainFactory(public_register=False)
response = client.post(reverse("auth-register"), self.form, HTTP_X_HOST=domain.domain)
assert response.status_code == 400
@pytest.mark.xfail
class TestPrivateRegistration:
@classmethod
def setup_class(cls):
cls.form = {"username": "username", "password": "password", "first_name": "fname",
"last_name": "lname", "email": "user@email.com", "type": "private",
"existing": "1"}
def test_respond_201_if_domain_allows_public_registration(self, client):
domain = factories.DomainFactory(public_register=True)
membership = factories.MembershipFactory()
headers = {"HTTP_X_HOST": domain.domain}
response = client.post(reverse("auth-register"), self.form, **headers)
assert response.status_code == 201