From 4c9567f3140b69285059d37e234d2b10c94731c9 Mon Sep 17 00:00:00 2001 From: Oleg Lavrovsky Date: Wed, 5 Oct 2022 00:37:29 +0200 Subject: [PATCH] Project stage test --- tests/factories.py | 21 ++++++++++++--------- tests/test_features.py | 36 +++++++++++++++++++++++------------- tests/test_forms.py | 8 +------- tox.ini | 3 ++- 4 files changed, 38 insertions(+), 30 deletions(-) diff --git a/tests/factories.py b/tests/factories.py index 48e03078..63aeb684 100644 --- a/tests/factories.py +++ b/tests/factories.py @@ -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 diff --git a/tests/test_features.py b/tests/test_features.py index e1a25222..783cc3ec 100644 --- a/tests/test_features.py +++ b/tests/test_features.py @@ -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) diff --git a/tests/test_forms.py b/tests/test_forms.py index 0fb64adf..5d77313e 100644 --- a/tests/test_forms.py +++ b/tests/test_forms.py @@ -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 diff --git a/tox.ini b/tox.ini index b7a970f0..922f041b 100644 --- a/tox.ini +++ b/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