mirror of https://codeberg.org/dribdat/dribdat.git
Project stage test
This commit is contained in:
parent
c4f7d95ba3
commit
4c9567f314
|
@ -4,7 +4,7 @@ from factory import PostGenerationMethodCall, Sequence
|
|||
from factory.alchemy import SQLAlchemyModelFactory
|
||||
|
||||
from dribdat.database import db
|
||||
from dribdat.user.models import User, Project
|
||||
from dribdat.user.models import User, Project, Event, Activity
|
||||
|
||||
|
||||
class BaseFactory(SQLAlchemyModelFactory):
|
||||
|
@ -25,9 +25,10 @@ class UserFactory(BaseFactory):
|
|||
password = PostGenerationMethodCall('set_password', 'example')
|
||||
active = True
|
||||
|
||||
class Meta:
|
||||
class Meta: # noqa: D106
|
||||
model = User
|
||||
|
||||
|
||||
class ProjectFactory(BaseFactory):
|
||||
"""Project factory."""
|
||||
|
||||
|
@ -37,23 +38,25 @@ class ProjectFactory(BaseFactory):
|
|||
webpage_url = "http://webpage.localhost"
|
||||
logo_color = "red"
|
||||
|
||||
class Meta:
|
||||
class Meta: # noqa: D106
|
||||
model = Project
|
||||
|
||||
|
||||
class EventFactory(BaseFactory):
|
||||
"""Event factory."""
|
||||
|
||||
name = Sequence(lambda n: 'Event {0}'.format(n))
|
||||
summary = "Just a sample event"
|
||||
|
||||
class Meta:
|
||||
model = Project
|
||||
class Meta: # noqa: D106
|
||||
model = Event
|
||||
|
||||
|
||||
class ActivityFactory(BaseFactory):
|
||||
"""Activity factory."""
|
||||
|
||||
name = Sequence(lambda n: 'Event {0}'.format(n))
|
||||
summary = "Just a sample event"
|
||||
name = "review"
|
||||
content = Sequence(lambda n: 'Activity {0}'.format(n))
|
||||
|
||||
class Meta:
|
||||
model = Project
|
||||
class Meta: # noqa: D106
|
||||
model = Activity
|
||||
|
|
|
@ -4,22 +4,17 @@
|
|||
See: http://webtest.readthedocs.org/
|
||||
"""
|
||||
from flask import url_for
|
||||
import pytest
|
||||
|
||||
from dribdat.user.models import Project
|
||||
from dribdat.user import projectProgressList
|
||||
|
||||
from .factories import ProjectFactory
|
||||
|
||||
import pytest # noqa: F401
|
||||
from .factories import ProjectFactory, EventFactory
|
||||
from dribdat.onebox import make_onebox
|
||||
from dribdat.aggregation import *
|
||||
from dribdat.public.projhelper import resources_by_stage, project_action
|
||||
|
||||
|
||||
class TestProjects:
|
||||
"""Project features."""
|
||||
|
||||
def test_onebox(self, project, testapp):
|
||||
"""Generate one box."""
|
||||
|
||||
srv = url_for('public.home', _external=True)
|
||||
url = "%sproject/%d" % (srv, project.id)
|
||||
test_markdown = """Some project content
|
||||
|
@ -31,16 +26,31 @@ EOF""" % (url, url)
|
|||
|
||||
def test_project_api(self, project, testapp):
|
||||
"""Make sure Project APIs respond correctly."""
|
||||
|
||||
project = ProjectFactory()
|
||||
project.name = 'example'
|
||||
project.autotext = 'some test readme content'
|
||||
project.save()
|
||||
|
||||
# print(project.data)
|
||||
|
||||
assert 'example' in project.data['name']
|
||||
assert project.data['excerpt'] is ''
|
||||
assert project.data['excerpt'] == ''
|
||||
project.autotext_url = 'https:/...'
|
||||
assert 'test' in project.autotext
|
||||
assert 'test' in project.data['excerpt']
|
||||
|
||||
def test_project_stage(self, project, testapp):
|
||||
"""Check stage progression."""
|
||||
event = EventFactory()
|
||||
event.lock_resources = True
|
||||
event.hidden = False
|
||||
event.save()
|
||||
project = ProjectFactory()
|
||||
project.name = 'example resource'
|
||||
project.save()
|
||||
assert resources_by_stage(0) == []
|
||||
project.event_id = event.id
|
||||
project.progress = 0
|
||||
project.is_hidden = False
|
||||
assert project.is_challenge
|
||||
project.save()
|
||||
assert len(resources_by_stage(0)) == 1
|
||||
assert project_action(project.id)
|
||||
|
|
|
@ -3,8 +3,8 @@
|
|||
|
||||
from dribdat.public.forms import LoginForm
|
||||
from dribdat.user.forms import RegisterForm
|
||||
import pytest # noqa: F401
|
||||
|
||||
import pytest
|
||||
|
||||
class TestRegisterForm:
|
||||
"""Register form."""
|
||||
|
@ -17,7 +17,6 @@ class TestRegisterForm:
|
|||
assert form.validate() is False
|
||||
assert 'A user with this name already exists' in form.username.errors
|
||||
|
||||
|
||||
def test_validate_email_already_registered(self, user):
|
||||
"""Enter email that is already registered."""
|
||||
form = RegisterForm(username='unique', email=user.email,
|
||||
|
@ -26,7 +25,6 @@ class TestRegisterForm:
|
|||
assert form.validate() is False
|
||||
assert 'Email already registered' in form.email.errors
|
||||
|
||||
|
||||
def test_validate_success(self, db):
|
||||
"""Register with success."""
|
||||
form = RegisterForm(username='newusername', email='new@dribdat.cc',
|
||||
|
@ -37,7 +35,6 @@ class TestRegisterForm:
|
|||
class TestLoginForm:
|
||||
"""Login form."""
|
||||
|
||||
|
||||
def test_validate_success(self, user):
|
||||
"""Login successful."""
|
||||
user.set_password('example')
|
||||
|
@ -46,7 +43,6 @@ class TestLoginForm:
|
|||
assert form.validate() is True
|
||||
assert form.user == user
|
||||
|
||||
|
||||
def test_validate_unknown_username(self, db):
|
||||
"""Unknown username."""
|
||||
form = LoginForm(username='unknown', password='example')
|
||||
|
@ -54,7 +50,6 @@ class TestLoginForm:
|
|||
assert 'Unknown username' in form.username.errors
|
||||
assert form.user is None
|
||||
|
||||
|
||||
def test_validate_invalid_password(self, user):
|
||||
"""Invalid password."""
|
||||
user.set_password('example')
|
||||
|
@ -63,7 +58,6 @@ class TestLoginForm:
|
|||
assert form.validate() is False
|
||||
assert 'Invalid password' in form.password.errors
|
||||
|
||||
|
||||
def test_validate_inactive_user(self, user, testapp):
|
||||
"""Inactive user."""
|
||||
user.active = False
|
||||
|
|
3
tox.ini
3
tox.ini
|
@ -5,6 +5,7 @@ max-complexity = 10
|
|||
# Q000: Double quotes are fine, really
|
||||
# I001: isort's import rules are too troublesome
|
||||
# I003: isort unexpected lines don't make sense to me
|
||||
# I005: isort's mysterious import is too mysterious
|
||||
# H101: Use TODO(NAME)
|
||||
# H202: assertRaises Exception too broad
|
||||
# H233: Python 3.x incompatible use of print operator
|
||||
|
@ -15,4 +16,4 @@ max-complexity = 10
|
|||
# H404: multi line docstring should start without a leading new line
|
||||
# H405: multi line docstring summary not separated with an empty line
|
||||
# H501: Do not use self.__dict__ for string formatting
|
||||
extend-ignore = Q000,I001,I003,H101,H202,H233,H301,H306,H401,H403,H404,H405,H501
|
||||
extend-ignore = Q000,I001,I003,I005,H101,H202,H233,H301,H306,H401,H403,H404,H405,H501
|
||||
|
|
Loading…
Reference in New Issue