Skip to content

Commit 657cf50

Browse files
Add TVSerie model
- add TVSerie model to persist TV Series - change structure of tests to create tests to model - change .travis.yml to call py.test more easily - add ignore (.gitignore) to database files of sqlite3 - add requirement Flask-SQLAlchemy
1 parent 23b5836 commit 657cf50

File tree

5 files changed

+120
-33
lines changed

5 files changed

+120
-33
lines changed

requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
Flask==0.11.1
22
Flask-Script==2.0.5
3+
Flask-SQLAlchemy==2.1
34
pytest-flask==0.10.0

tvseries/core.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
import os
22
from random import choice
33
from flask import Flask, render_template, request, redirect, url_for
4+
from flask_sqlalchemy import SQLAlchemy
45

56
app = Flask(__name__)
7+
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///tvseries.sqlite3'
8+
db = SQLAlchemy(app)
69
series = []
710

811

@@ -23,3 +26,24 @@ def add():
2326
return redirect('/')
2427

2528
return render_template('add.html')
29+
30+
31+
class TVSerie(db.Model):
32+
__table_args__ = {'sqlite_autoincrement': True}
33+
id = db.Column(db.BigInteger().with_variant(db.Integer, "sqlite"),
34+
nullable=False, unique=True,
35+
autoincrement=True, primary_key=True)
36+
name = db.Column(db.String(50), unique=True, nullable=False)
37+
description = db.Column(db.Text, nullable=True)
38+
episodies_number = db.Column(db.Integer, nullable=False, default=1)
39+
author = db.Column(db.String(50), nullable=False)
40+
41+
def __repr__(self):
42+
if self.description:
43+
self.description = "{0}...".format(self.description[0:10])
44+
45+
return ("TVSerie(id={!r}, name={!r}, "
46+
"description={!r}, episodies_number={!r})").format(
47+
self.id, self.name,
48+
self.description,
49+
self.episodies_number)

tvseries/tests.py

Lines changed: 0 additions & 33 deletions
This file was deleted.

tvseries/tests/__init__.py

Whitespace-only changes.

tvseries/tests/test_core.py

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
import pytest
2+
3+
from tvseries.core import TVSerie
4+
5+
6+
@pytest.mark.usefixtures('client_class')
7+
class TestCore:
8+
9+
@pytest.fixture
10+
def app(self):
11+
from tvseries.core import app
12+
return app
13+
14+
def test_get_home(self):
15+
response = self.client.get("/")
16+
assert '<div class="banner">' in response.data.decode('utf-8')
17+
assert response.status_code == 200
18+
19+
def test_get_add(self):
20+
response = self.client.get("/add")
21+
assert ('<input type="text" name="serie-name" id="id_serie-name">' in
22+
response.data.decode('utf-8'))
23+
assert response.status_code == 200
24+
25+
def test_post_add(self):
26+
response = self.client.post("/add", data={"serie-name": "Teste"})
27+
from tvseries.core import series
28+
assert series == ['Teste']
29+
assert response.status_code == 302
30+
31+
def test_navbar(self):
32+
response = self.client.get("/")
33+
assert ('<nav class="navbar navbar-default"' in
34+
response.data.decode('utf-8'))
35+
assert response.status_code == 200
36+
37+
@pytest.fixture
38+
def db(self, app, request):
39+
from tvseries.core import db as db_test
40+
41+
def teardown():
42+
db_test.drop_all()
43+
44+
db_test.app = app
45+
db_test.create_all()
46+
47+
request.addfinalizer(teardown)
48+
return db_test
49+
50+
def test_insert_on_model_tvserie(self, db):
51+
description = (
52+
"Há muito tempo, em um tempo esquecido, uma força "
53+
"destruiu o equilíbrio das estações. Em uma terra "
54+
"onde os verões podem durar vários anos e o inverno "
55+
"toda uma vida, as reivindicações e as forças sobrenaturais "
56+
"correm as portas do Reino dos Sete Reinos. A irmandade "
57+
"da Patrulha da Noite busca proteger o reino de cada "
58+
"criatura que pode vir de lá da Muralha, mas já não tem "
59+
"os recursos necessários para garantir a segurança de "
60+
"todos. Depois de um verão de dez anos, um inverno "
61+
"rigoroso promete chegar com um futuro mais sombrio. "
62+
"Enquanto isso, conspirações e rivalidades correm no jogo "
63+
"político pela disputa do Trono de Ferro, o símbolo do "
64+
"poder absoluto."
65+
)
66+
serie = TVSerie(name="Game of Thrones",
67+
description=description,
68+
author="George R.R. Martin")
69+
db.session.add(serie)
70+
db.session.commit()
71+
assert TVSerie.query.count() == 1
72+
73+
def test_repr_on_model_tvserie(self, db):
74+
description = (
75+
"Há muito tempo, em um tempo esquecido, uma força "
76+
"destruiu o equilíbrio das estações. Em uma terra "
77+
"onde os verões podem durar vários anos e o inverno "
78+
"toda uma vida, as reivindicações e as forças sobrenaturais "
79+
"correm as portas do Reino dos Sete Reinos. A irmandade "
80+
"da Patrulha da Noite busca proteger o reino de cada "
81+
"criatura que pode vir de lá da Muralha, mas já não tem "
82+
"os recursos necessários para garantir a segurança de "
83+
"todos. Depois de um verão de dez anos, um inverno "
84+
"rigoroso promete chegar com um futuro mais sombrio. "
85+
"Enquanto isso, conspirações e rivalidades correm no jogo "
86+
"político pela disputa do Trono de Ferro, o símbolo do "
87+
"poder absoluto."
88+
)
89+
serie = TVSerie(name="Game of Thrones",
90+
description=description,
91+
author="George R.R. Martin")
92+
assert repr(serie) == (
93+
"TVSerie(id=None, name='Game of Thrones', "
94+
"description='Há muito t...', episodies_number=None)"
95+
)

0 commit comments

Comments
 (0)