aboutsummaryrefslogtreecommitdiff
path: root/budget
diff options
context:
space:
mode:
authorAlexis Metaireau <alexis@notmyidea.org>2011-08-21 20:54:20 +0200
committerAlexis Metaireau <alexis@notmyidea.org>2011-08-21 20:54:20 +0200
commit35ea308a2692365001dc88212999df9a041bdaf7 (patch)
treec519797a3d7added2421840e78f56e488096b856 /budget
parent63a64910018cbc029e34ccf93370649a517c96d8 (diff)
downloadihatemoney-mirror-35ea308a2692365001dc88212999df9a041bdaf7.zip
ihatemoney-mirror-35ea308a2692365001dc88212999df9a041bdaf7.tar.gz
ihatemoney-mirror-35ea308a2692365001dc88212999df9a041bdaf7.tar.bz2
Fix a weird behavior with tests and databases.
Now all the database during the tests is in memory, created for each test and cleared at the end of the test.
Diffstat (limited to 'budget')
-rw-r--r--budget/static/main.css19
-rw-r--r--budget/templates/forms.html15
-rw-r--r--budget/templates/home.html20
-rw-r--r--budget/tests.py25
-rw-r--r--budget/web.py22
5 files changed, 71 insertions, 30 deletions
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 @@
</div>
{% 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 @@
<button class="btn">Add a new user</button>
{% 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 %}
<div id="header">
<div class="slide">
- <h1><span>Manage your shared <br>expenses easily</span></h1>
+ <h1><span>Manage your shared <br>expenses, easily</span></h1>
<a href="{{ url_for("demo") }}" class="about_link">Try out the demo</a>
</div>
+ <div class="additional-content">
+ <p>You're sharing a house?<br /> Going on holidays with friends?<br /> Simply sharing money with others? <br /><strong>We can help!</strong></p>
+ </div>
+
</div>
{% endblock %}
{% block container %}
<div class="container-fluid" style="margin-top: 20px">
- <div class="content">
+ <div class="content home">
- <h2>Welcome on your budget manager</h2>
- <p>You're sharing a house? Going on holidays with friends? Simply sharing money with others? We can help!</p>
- <div class="row">
+ <div class="row">
<div class="span8 columns">
<form action="{{ url_for('authenticate') }}" method="post">
<h3>Log to an existing project...</h3>
- {{ forms.authenticate(auth_form) }}
+ {{ forms.authenticate(auth_form, home=True) }}
+ <button class="btn">log in</button>
</form>
</div>
<div class="span8 columns">
- <form action="{{ url_for('create_project') }}" method="post">
+ <form class="create" action="{{ url_for('create_project') }}" method="post">
<h3>...or create a new one</h3>
- {{ forms.create_project(project_form) }}</div>
+ {{ forms.create_project(project_form, home=True) }}
+ <button class="btn">let's get started</button>
</form>
</div>
</div>
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__':