From 5a7aaf85ac5a6e971c032a2ecb642a0c05eec580 Mon Sep 17 00:00:00 2001 From: yaswanthsaivendra Date: Wed, 27 Mar 2024 18:08:24 +0530 Subject: [PATCH] added tests and testconfig --- .gitignore | 1 + blogexample/app.py | 16 +++---- blogexample/blueprints/blog/views.py | 1 - blogexample/tests/__init__.py | 0 blogexample/tests/test_views.py | 66 +++++++++++++++++++++++++++ config/settings.py | 34 ++++++++++---- config/test.db | Bin 0 -> 32768 bytes image.png | Bin 0 -> 48670 bytes pytest.ini | 6 +++ requirements.txt | 1 + 10 files changed, 108 insertions(+), 17 deletions(-) create mode 100644 blogexample/tests/__init__.py create mode 100644 blogexample/tests/test_views.py create mode 100644 config/test.db create mode 100644 image.png create mode 100644 pytest.ini diff --git a/.gitignore b/.gitignore index 1face41..5914f64 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ benv/ *.pyc +.python-version \ No newline at end of file diff --git a/blogexample/app.py b/blogexample/app.py index 7c19bbb..f626bf0 100644 --- a/blogexample/app.py +++ b/blogexample/app.py @@ -1,8 +1,9 @@ #!/usr/bin/env python -from flask import Flask, render_template, session, request, jsonify, url_for -from flask_sqlalchemy import SQLAlchemy +import os +from flask import Flask, jsonify, render_template, request, session, url_for +from flask_sqlalchemy import SQLAlchemy from werkzeug.debug import DebuggedApplication # from flask_ckeditor import CKEditor#, CKEditorField @@ -15,19 +16,18 @@ def create_app(main=True, debug=True): """Create an application.""" app = Flask(__name__) - app.config.from_object('config.settings') - app.config['SECRET_KEY'] = 'secret!' + config_type = os.getenv("CONFIG_TYPE", default="config.settings.DevelopmentConfig") + app.config.from_object(config_type) - from blogexample.blueprints.blog import blog + app.register_blueprint(blog) - + db.init_app(app) # ckeditor.init_app(app) if app.debug: app.wsgi_app = DebuggedApplication(app.wsgi_app, evalex=True) - - return app + return app diff --git a/blogexample/blueprints/blog/views.py b/blogexample/blueprints/blog/views.py index c58ca71..7ba835d 100644 --- a/blogexample/blueprints/blog/views.py +++ b/blogexample/blueprints/blog/views.py @@ -51,7 +51,6 @@ def add_post(): if Post.create_blogpost(params): flash('Post has been created successfully.', 'success') return redirect(url_for('blog.show_posts')) - return render_template('add.html', form=form, blogpost=blogpost) diff --git a/blogexample/tests/__init__.py b/blogexample/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/blogexample/tests/test_views.py b/blogexample/tests/test_views.py new file mode 100644 index 0000000..67e80f7 --- /dev/null +++ b/blogexample/tests/test_views.py @@ -0,0 +1,66 @@ +import os + +import pytest +from flask import url_for + +from blogexample.app import create_app, db +from blogexample.blueprints.blog.forms import AddPostForm +from blogexample.blueprints.blog.models import Post + + +@pytest.fixture(scope="function") +def client(): + os.environ["CONFIG_TYPE"] = "config.settings.TestingConfig" + flask_app = create_app() + + with flask_app.test_client() as testing_client: + with flask_app.app_context(): + + db.create_all() + yield testing_client # testing phase + db.drop_all() + + +def test_index(client): + response = client.get(url_for("blog.index")) + assert response.status_code == 200 + + +def test_add_post(client): + form_data = { + "title": "Test Title", + "body": "Test Body", + "taglist": "two, new", + "visible": True, + } + + response = client.post( + url_for("blog.add_post"), data=form_data, follow_redirects=True + ) + assert response.status_code == 200 + + # test if the post exists in db + post = Post.query.filter_by(title="Test Title").first() + assert post is not None + assert post.body == "Test Body" + + +def test_show_posts(client): + + test_post_1 = Post( + title="First Post", body="Body of Post 1", visible=True, url="first-post" + ) + test_post_2 = Post( + title="Second Post", body="Body of Post 1", visible=True, url="second-post" + ) + + db.session.add(test_post_1) + db.session.add(test_post_2) + + db.session.commit() + + response = client.get(url_for("blog.show_posts")) + assert response.status_code == 200 + assert b'First Post' in response.data + + diff --git a/config/settings.py b/config/settings.py index 1cf2d55..c57045f 100755 --- a/config/settings.py +++ b/config/settings.py @@ -1,14 +1,32 @@ +import os from datetime import timedelta -DEBUG = True +BASEDIR = os.path.abspath(os.path.dirname(__file__)) -SERVER_NAME = 'localhost:8000' -SECRET_KEY = 'insecurekeyfordev' +class Config(object): + FLASK_ENV = "development" + SERVER_NAME = "localhost:8000" + DEBUG = False + TESTING = False + REMEMBER_COOKIE_DURATION = timedelta(days=90) + SECRET_KEY = os.getenv("SECRET_KEY", default="BAD_SECRET_KEY") -# SQLAlchemy. -db_uri = 'postgresql://flaskblog:blogpassword@postgres:5432/flaskblog' -SQLALCHEMY_DATABASE_URI = db_uri -SQLALCHEMY_TRACK_MODIFICATIONS = False + SQLALCHEMY_DATABASE_URI = ( + "postgresql://flaskblog:blogpassword@postgres:5432/flaskblog" + ) + SQLALCHEMY_TRACK_MODIFICATIONS = False -REMEMBER_COOKIE_DURATION = timedelta(days=90) + +class ProductionConfig(Config): + FLASK_ENV = "production" + + +class DevelopmentConfig(Config): + DEBUG = True + + +class TestingConfig(Config): + TESTING = True + SQLALCHEMY_DATABASE_URI = f"sqlite:///{os.path.join(BASEDIR, 'test.db')}" + WTF_CSRF_ENABLED = False diff --git a/config/test.db b/config/test.db new file mode 100644 index 0000000000000000000000000000000000000000..6fd428cd780c49d0c7da6cbbb7a08a8f4dbd7b38 GIT binary patch literal 32768 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 WD`S}Lb~8%~AGTIB%i=xm7yb#$tV}Ne literal 0 HcmV?d00001 diff --git a/pytest.ini b/pytest.ini new file mode 100644 index 0000000..9a08eef --- /dev/null +++ b/pytest.ini @@ -0,0 +1,6 @@ +[pytest] +addopts = -v +testpaths = ./blogexample/tests +filterwarnings = + ignore::DeprecationWarning + ignore::RuntimeWarning diff --git a/requirements.txt b/requirements.txt index d5f92bc..ce63010 100644 --- a/requirements.txt +++ b/requirements.txt @@ -20,3 +20,4 @@ WTForms-Alchemy==0.16.9 flask_ckeditor pytz +pytest \ No newline at end of file