Beispiel #1
0
# coding: utf-8
from attest import assert_hook, Tests  # pylint: disable=W0611
import itertools
from django_attest import TestContext
import django_tables2 as tables
from .app.models import Person, Occupation

models = Tests()
models.context(TestContext())


class PersonTable(tables.Table):
    first_name = tables.Column()
    last_name = tables.Column()
    occupation = tables.Column()


@models.test
def boundrows_iteration():
    occupation = Occupation.objects.create(name='Programmer')
    Person.objects.create(first_name='Bradley',
                          last_name='Ayers',
                          occupation=occupation)
    Person.objects.create(first_name='Chris',
                          last_name='Doble',
                          occupation=occupation)

    table = PersonTable(Person.objects.all())
    records = [row.record for row in table.rows]
    expecteds = Person.objects.all()
    for expected, actual in itertools.izip(expecteds, records):
Beispiel #2
0
    table.as_html()


@general.test
def bound_columns_should_support_indexing():
    class SimpleTable(tables.Table):
        a = tables.Column()
        b = tables.Column()

    table = SimpleTable([])
    Assert('b') == table.columns[1].name
    Assert('b') == table.columns['b'].name


linkcolumn = Tests()
linkcolumn.context(TransactionTestContext())

@linkcolumn.test
def unicode():
    """Test LinkColumn"""
    # test unicode values + headings
    class UnicodeTable(tables.Table):
        first_name = tables.LinkColumn('person', args=[A('pk')])
        last_name = tables.LinkColumn('person', args=[A('pk')], verbose_name=u'äÚ¨´ˆÁ˜¨ˆ˜˘Ú…Ò˚ˆπ∆ˆ´')

    dataset = [
        {'pk': 1, 'first_name': u'Brädley', 'last_name': u'∆yers'},
        {'pk': 2, 'first_name': u'Chr…s', 'last_name': u'DÒble'},
    ]

    table = UnicodeTable(dataset)
Beispiel #3
0
import itertools
from django.conf import settings
from django.test.client import RequestFactory
from django.template import Template, Context
import django_tables2 as tables
from django_attest import TransactionTestContext
from attest import Tests, Assert
from .testapp.models import Person, Occupation


models = Tests()
models.context(TransactionTestContext())


class PersonTable(tables.Table):
    first_name = tables.Column()
    last_name = tables.Column()
    occupation = tables.Column()


@models.test
def boundrows_iteration():
    occupation = Occupation.objects.create(name='Programmer')
    Person.objects.create(first_name='Bradley', last_name='Ayers', occupation=occupation)
    Person.objects.create(first_name='Chris',   last_name='Doble', occupation=occupation)

    table = PersonTable(Person.objects.all())
    records = [row.record for row in table.rows]
    expecteds = Person.objects.all()
    for expected, actual in itertools.izip(expecteds, records):
        Assert(expected) == actual
# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'tests.app.settings'

from attest import Tests
from django_attest import TestContext, FancyReporter
from django_revisionfield.models import Revision
from .app.models import Company, Person


loader = FancyReporter.test_loader
everything = Tests()
everything.context(TestContext())


@everything.test
def creating_model_instance_should_use_new_revision():
    current_revision = Revision.next()
    person = Person.objects.create(name="Brad")
    assert person.revision > current_revision


@everything.test
def saving_model_should_increment_revision():
    person = Person.objects.create(name="Brad")
    revision = person.revision
    person.name = "Sunny"
    person.save()
    assert person.revision > revision
Beispiel #5
0
# coding: utf-8
from .app.models import Region
from attest import assert_hook, Tests
from django_attest import TestContext
import django_tables2 as tables
from django_tables2.utils import build_request


views = Tests()
views.context(TestContext())
USING_CBV = hasattr(tables, "SingleTableView")


class DispatchHookMixin(object):
    """
    Returns a response *and* reference to the view.
    """

    def dispatch(self, *args, **kwargs):
        return super(DispatchHookMixin, self).dispatch(*args, **kwargs), self


class SimpleTable(tables.Table):
    class Meta:
        model = Region


@views.test_if(USING_CBV)
def view_should_support_pagination_options():
    for name in ("Queensland", "New South Wales", "Victoria", "Tasmania"):
        Region.objects.create(name=name)
Beispiel #6
0
    # check deletion
    request = factory.get('/')
    request.COOKIES.update(
        ((k, v.value) for k, v in response.cookies.iteritems()))
    assert 'namespace|name' in request.COOKIES
    storage = CookieStorage('name', 'namespace')
    storage.process_request(request)
    storage.delete()
    response = HttpResponse('')
    storage.process_response(response)
    assert 'namespace|name' not in response.cookies


db = Tests()
db.context(TestContext())


@db.test
def should_complain_if_no_session_and_has_anonymous_user():
    storage = DatabaseStorage('name', 'namespace')
    request = factory.get('/')
    request.user = AnonymousUser()
    with Assert.raises(ImproperlyConfigured):
        storage.process_request(request)


@db.test
def should_complain_if_no_session_and_has_no_user():
    storage = DatabaseStorage('name', 'namespace')
    request = factory.get('/')
Beispiel #7
0
import warnings
from attest import Tests, assert_hook, raises
from .env import NInt, get_session, init_session, key
from sider.types import List
from sider.transaction import Transaction
from sider.exceptions import CommitError
from sider.warnings import PerformanceWarning


tests = Tests()
tests.context(init_session)


@tests.test
def iterate(session):
    view = session.set(key('test_list_iterate'), 'abc', List)
    assert ['a', 'b', 'c'] == list(view)
    view = session.set(key('test_listx_iterate'), [1, 2, 3], List(NInt))
    assert [1, 2, 3] == list(view)


@tests.test
def length(session):
    view = session.set(key('test_list_length'), 'abc', List)
    assert len(view) == 3
    viewx = session.set(key('test_listx_length'), [1, 2, 3], List(NInt))
    assert len(viewx) == 3


@tests.test
def get(session):
Beispiel #8
0
    # return classes of an element as a set
    classes = lambda x: set(x.attrib["class"].split())
    assert "sortable" in classes(root.findall('.//thead/tr/th')[0])
    assert "sortable" not in classes(root.findall('.//thead/tr/th')[1])

    # Now try with an ordered table
    table = SimpleTable([], order_by="a")
    root = ET.fromstring(table.as_html())
    # return classes of an element as a set
    assert "sortable" in classes(root.findall('.//thead/tr/th')[0])
    assert "asc" in classes(root.findall('.//thead/tr/th')[0])
    assert "sortable" not in classes(root.findall('.//thead/tr/th')[1])


linkcolumn = Tests()
linkcolumn.context(TestContext())


@linkcolumn.test
def unicode():
    """Test LinkColumn"""

    # test unicode values + headings
    class UnicodeTable(tables.Table):
        first_name = tables.LinkColumn('person', args=[A('pk')])
        last_name = tables.LinkColumn('person',
                                      args=[A('pk')],
                                      verbose_name=u'äÚ¨´ˆÁ˜¨ˆ˜˘Ú…Ò˚ˆπ∆ˆ´')

    dataset = [
        {
Beispiel #9
0
# coding: utf-8
from .app.models import Region
from attest import assert_hook, Tests
from django_attest import TestContext
import django_tables2 as tables
from django_tables2.utils import build_request

views = Tests()
views.context(TestContext())
USING_CBV = hasattr(tables, "SingleTableView")


class DispatchHookMixin(object):
    """
    Returns a response *and* reference to the view.
    """
    def dispatch(self, *args, **kwargs):
        return super(DispatchHookMixin, self).dispatch(*args, **kwargs), self


class SimpleTable(tables.Table):
    class Meta:
        model = Region


@views.test_if(USING_CBV)
def view_should_support_pagination_options():
    for name in ("Queensland", "New South Wales", "Victoria", "Tasmania"):
        Region.objects.create(name=name)

    class SimpleView(DispatchHookMixin, tables.SingleTableView):
    try:
        yield
    finally:
        stack.append(item.upper())


def reset():
    stack[:] = []
    try:
        yield
    finally:
        stack[:] = []


suite = Tests()
suite.context(reset)


@suite.test
def decorator_no_args():
    @pusher
    def foo():
        pass

    assert stack == []
    foo()
    assert stack == ["a", "A"]


@suite.test
def decorator_with_args():
Beispiel #11
0
    table.as_html()


@general.test
def bound_columns_should_support_indexing():
    class SimpleTable(tables.Table):
        a = tables.Column()
        b = tables.Column()

    table = SimpleTable([])
    Assert('b') == table.columns[1].name
    Assert('b') == table.columns['b'].name


linkcolumn = Tests()
linkcolumn.context(TransactionTestContext())


@linkcolumn.test
def unicode():
    """Test LinkColumn"""

    # test unicode values + headings
    class UnicodeTable(tables.Table):
        first_name = tables.LinkColumn('person', args=[A('pk')])
        last_name = tables.LinkColumn('person',
                                      args=[A('pk')],
                                      verbose_name=u'äÚ¨´ˆÁ˜¨ˆ˜˘Ú…Ò˚ˆπ∆ˆ´')

    dataset = [
        {
Beispiel #12
0
from django_attest import TestContext
from formwizard.views import WizardView


class TestWizard(WizardView):
    # pylint: ignore=W0223
    storage = "formwizard.storage.CookieStorage"
    steps = (
        ("Page 1", Page1),
    )
    template_name = "simple.html"
    wizard_step_templates = {
        "Page 1": "custom_step.html"
    }


urlpatterns = patterns('',
    ('^test/', TestWizard.as_view()),
)


tests = Tests()
tests.context(TestContext(urls='tests.templates'))


@tests.test
def wizard_step_templates_should_be_honored(client):
    response = client.get('/test/')
    assert "custom_step.html" in  [t.name for t in response.templates]
    assert response.content == "This is an empty custom step.\n\n"
    # check deletion
    request = factory.get('/')
    request.COOKIES.update(((k, v.value)
                            for k, v in response.cookies.iteritems()))
    assert 'namespace|name' in request.COOKIES
    storage = CookieStorage('name', 'namespace')
    storage.process_request(request)
    storage.delete()
    response = HttpResponse('')
    storage.process_response(response)
    assert 'namespace|name' not in response.cookies


db = Tests()
db.context(TestContext())


@db.test
def should_complain_if_no_session_and_has_anonymous_user():
    storage = DatabaseStorage('name', 'namespace')
    request = factory.get('/')
    request.user = AnonymousUser()
    with Assert.raises(ImproperlyConfigured):
        storage.process_request(request)


@db.test
def should_complain_if_no_session_and_has_no_user():
    storage = DatabaseStorage('name', 'namespace')
    request = factory.get('/')
Beispiel #14
0
# -*- coding: utf-8 -*-
import itertools
from django.conf import settings
from django.template import Template, Context
import django_tables2 as tables
from django_attest import TransactionTestContext
from attest import Tests, Assert
from .app.models import Person, Occupation

models = Tests()
models.context(TransactionTestContext())


class PersonTable(tables.Table):
    first_name = tables.Column()
    last_name = tables.Column()
    occupation = tables.Column()


@models.test
def boundrows_iteration():
    occupation = Occupation.objects.create(name='Programmer')
    Person.objects.create(first_name='Bradley',
                          last_name='Ayers',
                          occupation=occupation)
    Person.objects.create(first_name='Chris',
                          last_name='Doble',
                          occupation=occupation)

    table = PersonTable(Person.objects.all())
    records = [row.record for row in table.rows]
Beispiel #15
0
    assert "sortable" in classes(root.findall(".//thead/tr/th")[0])
    assert "asc" in classes(root.findall(".//thead/tr/th")[0])
    assert "sortable" not in classes(root.findall(".//thead/tr/th")[1])


@general.test
def empty_values_triggers_default():
    class Table(tables.Table):
        a = tables.Column(empty_values=(1, 2), default="--")

    table = Table([{"a": 1}, {"a": 2}, {"a": 3}, {"a": 4}])
    assert [x["a"] for x in table.rows] == ["--", "--", 3, 4]


linkcolumn = Tests()
linkcolumn.context(TestContext())


@linkcolumn.test
def unicode():
    """Test LinkColumn"""
    # test unicode values + headings
    class UnicodeTable(tables.Table):
        first_name = tables.LinkColumn("person", args=[A("pk")])
        last_name = tables.LinkColumn("person", args=[A("pk")], verbose_name=u"äÚ¨´ˆÁ˜¨ˆ˜˘Ú…Ò˚ˆπ∆ˆ´")

    dataset = [
        {"pk": 1, "first_name": u"Brädley", "last_name": u"∆yers"},
        {"pk": 2, "first_name": u"Chr…s", "last_name": u"DÒble"},
    ]
# coding: utf-8
from __future__ import unicode_literals
from .app.models import Person
from attest import assert_hook, Tests
from contextlib import contextmanager
from django.db import connections, DEFAULT_DB_ALIAS, signals, transaction
from django_attest import TransactionTestContext


suite = Tests()
suite.context(TransactionTestContext(multi_db=True))
conn = lambda alias: connections[DEFAULT_DB_ALIAS if alias is None else alias]


# -- helpers-------------------------------------------------------------------


@contextmanager
def connect(signal, handler):
    """
    Connect and disconnect a signal receiver using a context manager::

        def handler(sender, **kwargs):
            ...

        with connect(pre_commit, handler):
            ...

    """
    signal.connect(handler)
    try:
Beispiel #17
0
# coding: utf-8
from attest import assert_hook, Tests
import itertools
from django_attest import TestContext
import django_tables2 as tables
from .app.models import Person, Occupation


models = Tests()
models.context(TestContext())


class PersonTable(tables.Table):
    first_name = tables.Column()
    last_name = tables.Column()
    occupation = tables.Column()


@models.test
def boundrows_iteration():
    occupation = Occupation.objects.create(name='Programmer')
    Person.objects.create(first_name='Bradley', last_name='Ayers', occupation=occupation)
    Person.objects.create(first_name='Chris',   last_name='Doble', occupation=occupation)

    table = PersonTable(Person.objects.all())
    records = [row.record for row in table.rows]
    expecteds = Person.objects.all()
    for expected, actual in itertools.izip(expecteds, records):
        assert expected == actual

# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'tests.app.settings'

from attest import Tests
from django_attest import TestContext, FancyReporter
from django_revisionfield.models import Revision
from .app.models import Company, Person

loader = FancyReporter.test_loader
everything = Tests()
everything.context(TestContext())


@everything.test
def creating_model_instance_should_use_new_revision():
    current_revision = Revision.next()
    person = Person.objects.create(name="Brad")
    assert person.revision > current_revision


@everything.test
def saving_model_should_increment_revision():
    person = Person.objects.create(name="Brad")
    revision = person.revision
    person.name = "Sunny"
    person.save()
    assert person.revision > revision