Skip to content
This repository has been archived by the owner on May 2, 2023. It is now read-only.

Commit

Permalink
renames & match's unittest
Browse files Browse the repository at this point in the history
  • Loading branch information
jaramir committed Mar 1, 2012
1 parent e786c58 commit 3efe8f6
Show file tree
Hide file tree
Showing 9 changed files with 130 additions and 37 deletions.
12 changes: 4 additions & 8 deletions houserule/__init__.py
Expand Up @@ -22,14 +22,10 @@
def load_user( id ):
return User.query.filter_by( id=id ).first()

if os.environ.get( "DEBUG", "0" ) == "1":
app.config["DEBUG"] = True

app.config["SQLALCHEMY_DATABASE_URI"] = \
os.environ.get( "HEROKU_SHARED_POSTGRESQL_ORANGE_URL", "sqlite://" )
app.config["SQLALCHEMY_DATABASE_URI"] = os.environ["HEROKU_SHARED_POSTGRESQL_ORANGE_URL"]

db = SQLAlchemy( app )

from model import *
from view import *
from form import *
from models import *
from views import *
from forms import *
5 changes: 4 additions & 1 deletion houserule/form.py → houserule/forms.py
Expand Up @@ -5,7 +5,7 @@
from flaskext.wtf import TextField, PasswordField, SubmitField, BooleanField
from flaskext.wtf.html5 import EmailField

from model import User
from models import User
from houserule import bcrypt

class Unique( object ):
Expand Down Expand Up @@ -78,3 +78,6 @@ class LoginForm( Form ):
class BGGTestForm( Form ):
username = TextField( "Nome utente BGG" )
submit = SubmitField( "Elenca giochi" )

class MatchForm( Form ):
submit = SubmitField( "Salva" )
15 changes: 15 additions & 0 deletions houserule/model.py → houserule/models.py
Expand Up @@ -18,3 +18,18 @@ def __init__( self, username, password, email ):
self.username = username
self.password = bcrypt.generate_password_hash( password )
self.email = email

class Game( db.Model ):
__tablename__ = "games"

id = db.Column( db.Integer, primary_key=True )
bgg_id = db.Column( db.Integer )
name = db.Column( db.String( 150 ) )
thumbnail_url = db.Column( db.String( 150 ) )

class Match( db.Model ):
__tablename__ = "matches"

id = db.Column( db.Integer, primary_key=True )
organizer_id = db.Column( db.Integer, db.ForeignKey( "users.id" ) )
game_id = db.Column( db.Integer, db.ForeignKey( "games.id" ) )
24 changes: 17 additions & 7 deletions houserule/view.py → houserule/views.py
Expand Up @@ -3,10 +3,11 @@

from houserule import app, db
from flask import render_template, request, redirect, url_for, flash, send_from_directory
from form import RegistrationForm, LoginForm, BGGTestForm
from model import User
from flaskext.login import login_user, logout_user, login_required, current_user

import pyBGG
import forms
import models

@app.route( "/" )
def splash():
Expand All @@ -18,9 +19,9 @@ def index():

@app.route( "/register", methods=( "GET", "POST" ) )
def register():
form = RegistrationForm()
form = forms.RegistrationForm()
if form.validate_on_submit():
user = User( form.username.data, form.password.data, form.email.data )
user = models.User( form.username.data, form.password.data, form.email.data )
db.session.add( user )
db.session.commit()
flash( "Grazie per esserti registrato!" )
Expand All @@ -29,9 +30,9 @@ def register():

@app.route( "/login", methods=( "GET", "POST" ) )
def login():
form = LoginForm()
form = forms.LoginForm()
if form.validate_on_submit():
user = User.query.filter_by( username=form.username.data ).first()
user = models.User.query.filter_by( username=form.username.data ).first()
login_user( user, remember=form.remember.data )
flash( "Bentornato %s!" % user.username )
return redirect( request.args.get( "next" ) or url_for( "index" ) )
Expand All @@ -47,8 +48,17 @@ def logout():
@app.route( "/bggtest", methods=( "GET", "POST" ) )
@login_required
def bggtest():
form = BGGTestForm()
form = forms.BGGTestForm()
collection = []
if form.validate_on_submit():
collection = pyBGG.collection( form.username.data, own=True, prefetch=True )
return render_template( "bggtest.html", form=form, collection=collection )

@app.route( "/match", methods=( "GET", "POST" ) )
@login_required
def match():
form = forms.MatchForm()
if form.validate_on_submit():
flash( "Grazie per aver proposto una nuova partita!" )
return redirect( url_for( "index" ) )
return render_template( "match.html", form=form )
18 changes: 0 additions & 18 deletions run.py

This file was deleted.

22 changes: 22 additions & 0 deletions run_local_server.py
@@ -0,0 +1,22 @@
#!/usr/bin/python
# coding: utf-8

import argparse
import os

os.environ["HEROKU_SHARED_POSTGRESQL_ORANGE_URL"] = "sqlite:///../db.sqlite"
os.environ["SECRET_KEY"] = "development server not so secret key"

port = int( os.environ.get( "PORT", "5000" ) )

parser = argparse.ArgumentParser( description = "HouseRule Development Server" )
parser.add_argument( "--initdb", action="store_true", help="Create initial database" )
parser.add_argument( "--debug", action="store_true", help="Start with debugging and reloading" )
args = parser.parse_args()

from houserule import app, db

if args.initdb:
db.create_all()

app.run( "0.0.0.0", port, debug=args.debug )
3 changes: 3 additions & 0 deletions templates/index.html
Expand Up @@ -6,6 +6,9 @@
<li>
<a href="{{ url_for( "bggtest" ) }}">BoardGameGeek Test</a>
</li>
<li>
<a href="{{ url_for( "match" ) }}">Organizza una partita</a>
</li>
<li>
<a href="{{ url_for( "logout" ) }}">Esci</a>
</li>
Expand Down
10 changes: 10 additions & 0 deletions templates/match.html
@@ -0,0 +1,10 @@
{% extends "layout.html" %}
{% from "_formhelpers.html" import render_field %}

{% block body %}
<form method="POST" action="{{ url_for( "bggtest" ) }}">
{{ form.hidden_tag() }}
{{ form.submit }}
</form>

{% endblock %}
58 changes: 55 additions & 3 deletions test.py
@@ -1,15 +1,25 @@
#!/usr/bin/python
# coding: utf-8

import os
os.environ["SECRET_KEY"] = "unittest"

import unittest
import houserule

houserule.app.config["TESTING"] = True
houserule.app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite://"
houserule.app.config["CSRF_ENABLED"] = False

class TestApp( unittest.TestCase ):

def setUp( self ):
houserule.app.config["TESTING"] = True
houserule.db.create_all()
self.app = houserule.app.test_client()

def tearDown( self ):
houserule.db.drop_all()

def test_home_page_works( self ):
r = self.app.get( '/' )
self.assertTrue( r.data )
Expand All @@ -19,8 +29,50 @@ def test_404_page( self ):
r = self.app.get( '/i-am-not-found/' )
self.assertEquals( r.status_code, 404 )

def test_user_loader( self ):
self.assertEqual( self.app.load_user( "nonesiste" ), None )
def test_register( self ):
data = {
"username": "ciccio",
"email": "ciccio@slack.it",
"password": "cicciociccio",
"verify": "cicciociccio",
}
r = self.app.post( "/register", data=data, follow_redirects=True )
self.assertIn( "Grazie", r.data )

def test_register_unique_username( self ):
self.test_register()
self.assertRaises( self.failureException, self.test_register )

def test_login( self ):
self.test_register()
data = {
"username": "ciccio",
"password": "cicciociccio",
}
r = self.app.post( "/login", data=data, follow_redirects=True )
self.assertIn( "Bentornato ciccio", r.data )

def test_ciccio_is_the_one( self ):
self.test_register()
users = houserule.models.User.query.all()
self.assertEqual( len( users ), 1 )
self.assertEqual( users[0].id, 1 )
self.assertEqual( users[0].username, "ciccio" )

def test_match_requires_login( self ):
r = self.app.post( "/match", data={} )
self.assertEqual( "401 UNAUTHORIZED", r.status )

def test_create_match( self ):
self.test_login()
data = {
"bgg_id": "421",
"name": "1830: Railways & Robber Barons",
"thumbnail": "http://cf.geekdo-images.com/images/pic882119_t.jpg",
"user_id": "1",
}
r = self.app.post( "/match", data=data, follow_redirects=True )
self.assertIn( "Grazie", r.data )

if __name__ == '__main__':
unittest.main()

0 comments on commit 3efe8f6

Please sign in to comment.