diff --git a/budget/static/main.css b/budget/static/main.css index 5d8b268..8445aa5 100644 --- a/budget/static/main.css +++ b/budget/static/main.css @@ -54,6 +54,25 @@ div.topbar ul.secondary-nav { padding-right: 75px; } display: inline; } +#header .additional-content{ + font-family: 'Comfortaa', arial, serif; + float: right; + position: relative; + top: -150px; + margin-right: 200px; + margin-bottom: -100px; + +} + +.home form button{ + float: right; + margin-right: 100px; +} +.home .create h3{ + text-align: right; + margin-right: 100px; +} + .footer{ position: absolute; bottom: 0px; diff --git a/budget/templates/forms.html b/budget/templates/forms.html index 4e62f58..690f59d 100644 --- a/budget/templates/forms.html +++ b/budget/templates/forms.html @@ -26,17 +26,19 @@ {% endmacro %} -{% macro authenticate(form) %} +{% macro authenticate(form, home=False) %} {% include "display_errors.html" %} {{ form.hidden_tag() }} {{ input(form.id) }} {{ input(form.password) }} + {% if not home %} {{ submit(form.submit) }} + {% endif %} {% endmacro %} -{% macro create_project(form) %} +{% macro create_project(form, home=False) %} {% include "display_errors.html" %} {{ form.hidden_tag() }} @@ -44,7 +46,9 @@ {{ input(form.id) }} {{ input(form.password) }} {{ input(form.contact_email) }} + {% if not home %} {{ submit(form.submit) }} + {% endif %} {% endmacro %} @@ -70,10 +74,3 @@ {% endmacro %} - -{% macro authenticate(form) %} - {{ form.hidden_tag() }} - {{ input(form.id) }} - {{ input(form.password) }} - {{ submit(form.submit) }} -{% endmacro %} diff --git a/budget/templates/home.html b/budget/templates/home.html index eb795ba..1b77cbd 100644 --- a/budget/templates/home.html +++ b/budget/templates/home.html @@ -6,29 +6,33 @@ {% block header %} {% endblock %} {% block container %}
-
+
-

Welcome on your budget manager

-

You're sharing a house? Going on holidays with friends? Simply sharing money with others? We can help!

-
+

Log to an existing project...

- {{ forms.authenticate(auth_form) }} + {{ forms.authenticate(auth_form, home=True) }} +
-
+

...or create a new one

- {{ forms.create_project(project_form) }}
+ {{ forms.create_project(project_form, home=True) }} +
diff --git a/budget/tests.py b/budget/tests.py index 595d1a1..f16a1e1 100644 --- a/budget/tests.py +++ b/budget/tests.py @@ -13,8 +13,7 @@ class TestCase(unittest.TestCase): def setUp(self): web.app.config['TESTING'] = True - self.fd, self.fp = tempfile.mkstemp() - web.app.config['SQLALCHEMY_DATABASE_URI'] = "sqlite:///%s" % self.fp + web.app.config['SQLALCHEMY_DATABASE_URI'] = "sqlite:///memory" web.app.config['CSRF_ENABLED'] = False # simplify the tests self.app = web.app.test_client() @@ -26,8 +25,8 @@ class TestCase(unittest.TestCase): def tearDown(self): # clean after testing - os.close(self.fd) - os.unlink(self.fp) + models.db.session.remove() + models.db.drop_all() def login(self, project, password=None, test_client=None): password = password or project @@ -177,6 +176,24 @@ class BudgetTestCase(TestCase): result = self.app.get("/raclette/add") self.assertNotIn("fred", result.data) + def test_demo(self): + # Test that it is possible to connect automatically by going onto /demo + with web.app.test_client() as c: + models.db.session.add(models.Project(id="demo", name=u"demonstration", + password="demo", contact_email="demo@notmyidea.org")) + models.db.session.commit() + c.get("/demo") + + # session is updated + self.assertEqual(session['demo'], 'demo') + + def test_demo(self): + # test that a demo project is created if none is defined + with web.app.test_client() as c: + self.assertEqual([], models.Project.query.all()) + c.get("/demo") + self.assertTrue(models.Project.query.get("demo") is not None) + if __name__ == "__main__": unittest.main() diff --git a/budget/web.py b/budget/web.py index 4e2b33f..59d7f30 100644 --- a/budget/web.py +++ b/budget/web.py @@ -14,15 +14,6 @@ app = Flask(__name__) app.config.from_object("default_settings") mail = Mail() -# db -db.init_app(app) -db.app = app -db.create_all() - -# mail -mail.init_app(app) - - @app.url_defaults def add_project_id(endpoint, values): if 'project_id' in values or not hasattr(g, 'project'): @@ -126,6 +117,11 @@ def exit(): @app.route("/demo") def demo(): project = Project.query.get("demo") + if not project: + project = Project(id="demo", name=u"demonstration", password="demo", + contact_email="demo@notmyidea.org") + db.session.add(project) + db.session.commit() session[project.id] = project.password return redirect(url_for("list_bills", project_id=project.id)) @@ -247,6 +243,14 @@ def reset_bills(): def main(): + # db + db.init_app(app) + db.app = app + db.create_all() + + # mail + mail.init_app(app) + app.run(host="0.0.0.0", debug=True) if __name__ == '__main__':