revised testing critera
This commit is contained in:
21
models.py
21
models.py
@@ -2,17 +2,30 @@ from flask_sqlalchemy import SQLAlchemy
|
|||||||
|
|
||||||
db = SQLAlchemy()
|
db = SQLAlchemy()
|
||||||
|
|
||||||
|
|
||||||
class Feature(db.Model):
|
class Feature(db.Model):
|
||||||
id = db.Column(db.Integer, primary_key=True)
|
id = db.Column(db.Integer, primary_key=True)
|
||||||
title = db.Column(db.String(100), nullable=False)
|
title = db.Column(db.String(100), nullable=False)
|
||||||
description = db.Column(db.String(200), nullable=False)
|
description = db.Column(db.String(200), nullable=False)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
def seed_db():
|
def seed_db():
|
||||||
if Feature.query.count() == 0: # Seed only if empty
|
# Seed only if empty
|
||||||
|
if Feature.query.count() == 0:
|
||||||
features = [
|
features = [
|
||||||
Feature(title="Responsive Design", description="Adapts seamlessly to mobile, tablet, and desktop devices."),
|
Feature(
|
||||||
Feature(title="Modern UI", description="Uses Bootstrap 5 for clean, professional styling."),
|
title="Responsive Design",
|
||||||
Feature(title="Easy Deployment", description="Containerized with Docker for quick setup on any server.")
|
description="Adapts seamlessly to mobile, tablet, and desktop devices.",
|
||||||
|
),
|
||||||
|
Feature(
|
||||||
|
title="Modern UI",
|
||||||
|
description="Uses Bootstrap 5 for clean, professional styling.",
|
||||||
|
),
|
||||||
|
Feature(
|
||||||
|
title="Easy Deployment",
|
||||||
|
description="Containerized with Docker for quick setup on any server.",
|
||||||
|
),
|
||||||
]
|
]
|
||||||
db.session.bulk_save_objects(features)
|
db.session.bulk_save_objects(features)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
|
|||||||
37
test_app.py
37
test_app.py
@@ -1,27 +1,40 @@
|
|||||||
import pytest
|
|
||||||
import os
|
import os
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
# Ensure tests always use the in-memory SQLite DB, even if CI sets DB_* secrets
|
||||||
|
for var in ("DB_USER", "DB_PASS", "DB_NAME"):
|
||||||
|
os.environ.pop(var, None)
|
||||||
|
|
||||||
from app import app
|
from app import app
|
||||||
from models import db, Feature
|
from models import db, Feature
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def client():
|
def client():
|
||||||
app.config['TESTING'] = True
|
app.config["TESTING"] = True
|
||||||
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///:memory:'
|
# app was already initialised with SQLite because DB_USER is now unset
|
||||||
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
|
|
||||||
db.init_app(app) # Re-init DB with test config
|
# Fresh DB per test
|
||||||
|
with app.app_context():
|
||||||
|
db.drop_all()
|
||||||
|
db.create_all()
|
||||||
|
|
||||||
with app.test_client() as client:
|
with app.test_client() as client:
|
||||||
with app.app_context():
|
|
||||||
db.create_all()
|
|
||||||
yield client
|
yield client
|
||||||
|
|
||||||
|
# Clean up after test
|
||||||
|
with app.app_context():
|
||||||
db.drop_all()
|
db.drop_all()
|
||||||
|
|
||||||
def test_index(client):
|
|
||||||
response = client.get('/')
|
|
||||||
assert response.status_code == 200
|
|
||||||
assert b'Professional Demo Site' in response.data
|
|
||||||
|
|
||||||
def test_seed_db(client): # Add fixture here
|
def test_index(client):
|
||||||
|
response = client.get("/")
|
||||||
|
assert response.status_code == 200
|
||||||
|
assert b"Professional Demo Site" in response.data
|
||||||
|
|
||||||
|
|
||||||
|
def test_seed_db(client):
|
||||||
with app.app_context():
|
with app.app_context():
|
||||||
Feature.seed_db()
|
Feature.seed_db()
|
||||||
assert Feature.query.count() == 3
|
assert Feature.query.count() == 3
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user