diff --git a/main.py b/main.py new file mode 100644 index 0000000..0a4d1b5 --- /dev/null +++ b/main.py @@ -0,0 +1,13 @@ +import os +import sys +#sys.path.insert(0, os.path.abspath('../../scaffold/scaffold/')) +#sys.path.insert(0, os.path.abspath('../../scaffold/')) + +#sys.path.append(os.path.abspath('../../scaffold/scaffold/')) +#sys.path.append(os.path.abspath('../../scaffold/')) + +from website import index + + +if __name__ == '__main__': + index.app.run(host='0.0.0.0', port=5001, debug=True) diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..7f4ede3 --- /dev/null +++ b/setup.py @@ -0,0 +1,26 @@ +import os +from setuptools import setup, find_packages + + +def read(fname): + return open(os.path.join(os.path.dirname(__file__), fname)).read() + +setup( + name = "mhackspace", + version = "0.0.1", + author = "Oliver Marks", + author_email = "contact@maidstone-hackspace.org.uk", + description = ("Maidstone Hackspace website"), + license = "MIT", + keywords = "templating web", + url = "https://maidstone-hackspace.org.uk", + packages=find_packages(), + + long_description=read('README.md'), + classifiers=[ + "Development Status :: 3 - Alpha", + "Topic :: Utilities", + "License :: OSI Approved :: MIT", + ], +) + diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/__pycache__/__init__.cpython-35.pyc b/tests/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000..a3802a6 Binary files /dev/null and b/tests/__pycache__/__init__.cpython-35.pyc differ diff --git a/tests/__pycache__/base.cpython-35.pyc b/tests/__pycache__/base.cpython-35.pyc new file mode 100644 index 0000000..ea3b8c2 Binary files /dev/null and b/tests/__pycache__/base.cpython-35.pyc differ diff --git a/tests/__pycache__/test_add_badge.cpython-35-PYTEST.pyc b/tests/__pycache__/test_add_badge.cpython-35-PYTEST.pyc new file mode 100644 index 0000000..194621f Binary files /dev/null and b/tests/__pycache__/test_add_badge.cpython-35-PYTEST.pyc differ diff --git a/tests/__pycache__/test_create_users.cpython-35-PYTEST.pyc b/tests/__pycache__/test_create_users.cpython-35-PYTEST.pyc new file mode 100644 index 0000000..a3ccf5c Binary files /dev/null and b/tests/__pycache__/test_create_users.cpython-35-PYTEST.pyc differ diff --git a/tests/__pycache__/test_data.cpython-35-PYTEST.pyc b/tests/__pycache__/test_data.cpython-35-PYTEST.pyc new file mode 100644 index 0000000..3588546 Binary files /dev/null and b/tests/__pycache__/test_data.cpython-35-PYTEST.pyc differ diff --git a/tests/__pycache__/test_oauth_login.cpython-35-PYTEST.pyc b/tests/__pycache__/test_oauth_login.cpython-35-PYTEST.pyc new file mode 100644 index 0000000..02d4476 Binary files /dev/null and b/tests/__pycache__/test_oauth_login.cpython-35-PYTEST.pyc differ diff --git a/tests/__pycache__/test_users.cpython-35-PYTEST.pyc b/tests/__pycache__/test_users.cpython-35-PYTEST.pyc new file mode 100644 index 0000000..dcd1a38 Binary files /dev/null and b/tests/__pycache__/test_users.cpython-35-PYTEST.pyc differ diff --git a/tests/base.py b/tests/base.py new file mode 100644 index 0000000..b3c1adb --- /dev/null +++ b/tests/base.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +import os, sys +import unittest +import random +from collections import defaultdict + +sys.path.append(os.path.abspath('../')) + +from config import settings +from scaffold.core.data.database import db +from data import site_user +from tests.test_data import clean, populate + + +class TestBase(unittest.TestCase): + def setUp(self): + clean() + populate() diff --git a/tests/test_add_badge.py b/tests/test_add_badge.py new file mode 100644 index 0000000..7c2f092 --- /dev/null +++ b/tests/test_add_badge.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +import os, sys +import unittest +from collections import defaultdict + +from website.config import settings +from website.data.badges import create_badge, assign_badge, remove_badge, fetch_badge, fetch_user_badges_grouped + +from scaffold.core.data.database import db +from tests.base import TestBase + +import unittest + +class TestBadges(TestBase): + + def setUp(self): + super(TestBadges, self).setUp() + create_badge().execute({'name': 'member'}) + create_badge().execute({'name': 'backer'}) + create_badge().execute({'name': 'teacher'}) + create_badge().execute({'name': 'chairman'}) + create_badge().execute({'name': 'treasurer'}) + create_badge().execute({'name': 'secretary'}) + assign_badge().execute({'badge_id': '1', 'user_id': '1' }) + assign_badge().execute({'badge_id': '2', 'user_id': '1' }) + assign_badge().execute({'badge_id': '3', 'user_id': '1' }) + + def testFetchUserBadges(self): + self.assertTrue([a for a in fetch_badge({'badge_id': '1', 'user_id': '1' })]) + + def test_badge_grouping(self): + self.assertEquals(fetch_user_badges_grouped(),{1: [1, 2, 3]} ) + + def testSelectingBadges(self): + # this record should exist + self.assertTrue([a for a in fetch_badge({'badge_id': '1', 'user_id': '1' })]) + + # these don't exist + self.assertFalse([a for a in fetch_badge({'badge_id': '10', 'user_id': '10' })]) + self.assertFalse([a for a in fetch_badge({'user_id': '10'})]) + + def assignBadgeToUser(self): + assign_badge().execute({'badge_id': '1', 'user_id': '1' }) + assign_badge().execute({'badge_id': '1', 'user_id': '1' }) + assign_badge().execute({'badge_id': '2', 'user_id': '1' }) + assign_badge().execute({'badge_id': '3', 'user_id': '1' }) + + def testAddingBadges(self): + create_badge().execute({'name': 'badget'}) + self.assertEquals(fetch_user_badges_grouped(),{1: [1, 2, 3]} ) + + def testRemoveBadges(self): + remove_badge().execute({'id': '1' }) + remove_badge().execute({'id': '2' }) + remove_badge().execute({'id': '3' }) + +if __name__ == '__main__': + unittest.main(buffer=False) + diff --git a/tests/test_add_badge.pyc b/tests/test_add_badge.pyc new file mode 100644 index 0000000..be19b03 Binary files /dev/null and b/tests/test_add_badge.pyc differ diff --git a/tests/test_create_users.py b/tests/test_create_users.py new file mode 100644 index 0000000..8e4c1d3 --- /dev/null +++ b/tests/test_create_users.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +import os, sys +import unittest + +from werkzeug.security import generate_password_hash, check_password_hash + +from website.config import settings +from website.data import site_user +from scaffold.core.data.database import db +print(settings.database) + +class TestBasePage(unittest.TestCase): +#~ class TestBasePage(TestDataSetup): + + def testCreateBasicUser(self): + """User has not signed up yet but has interacted with the site, donated perhaps ?""" + site_user.create_basic_user().execute({ + 'first_name': 'myfirstname', + 'last_name': 'mylastname' + }) + + def testCreateNormalUser(self): + pw_hash = generate_password_hash('letmein') + site_user.create().execute({ + 'username': 'test@test.com', + 'first_name': 'myfirstname', + 'last_name': 'mylastname', + 'password': pw_hash + }) + + def testCreateDuplicateUsers(self): + pw_hash = generate_password_hash('letmein') + site_user.create().execute({ + 'username': 'test@test.com', + 'first_name': 'myfirstname', + 'last_name': 'mylastname', + 'password': pw_hash + }) + + site_user.create().execute({ + 'username': 'test@test.com', + 'first_name': 'myfirstname', + 'last_name': 'mylastname', + 'password': pw_hash + }) + + def testRegisterNewUser(self): + pw_hash = generate_password_hash('letmein') + site_user.create().execute({ + 'username': 'new_user@test.com', + 'first_name': 'myfirstname', + 'last_name': 'mylastname', + 'password': pw_hash + }) + + user_details = site_user.get_by_username({ + 'username': 'new_user@test.com'}).get() + self.assertTrue(user_details) + self.assertTrue(pw_hash == user_details.get('password')) + self.assertTrue(user_details) + + + def testRegisteringExistingUser(self): + pw_hash = generate_password_hash('letmein') + site_user.create().execute({ + 'username': 'test@test.com', + 'first_name': 'myfirstname', + 'last_name': 'mylastname', + 'created': '', + 'password': pw_hash + }) + + def testChangeUserPassword(self): + site_user.change_password().execute({ + 'id': '1', + 'password': 'password hash' + }) + + def testUpdateLastLogin(self): + site_user.update_last_login().execute({ + 'id': '1' + }) + + +if __name__ == '__main__': + unittest.main(buffer=False) + diff --git a/tests/test_create_users.pyc b/tests/test_create_users.pyc new file mode 100644 index 0000000..3b5277b Binary files /dev/null and b/tests/test_create_users.pyc differ diff --git a/tests/test_data.py b/tests/test_data.py new file mode 100644 index 0000000..b29bf2b --- /dev/null +++ b/tests/test_data.py @@ -0,0 +1,31 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +import os, sys +import unittest +import random +from collections import defaultdict +from werkzeug.security import generate_password_hash, check_password_hash + +from scaffold.core.data.sql import query +from scaffold.core.data.database import db + +from website.config import settings +from website.data import site_user + +data_first_names = ['ralf', 'teddy', 'sprite'] +data_last_names = ['fuzzie'] + + + +def clean(): + clean_file = os.path.abspath('./data/migrate/clean.sql') + with open(clean_file, 'r') as clean_fp: + sql = clean_fp.read() + query().execute({}, sql) + +def populate(): + site_user.create_basic_user().execute(data={ + 'first_name': random.choice(data_first_names), + 'last_name': random.choice(data_last_names), + 'password': generate_password_hash('test') + }) diff --git a/tests/test_data.pyc b/tests/test_data.pyc new file mode 100644 index 0000000..7bba19c Binary files /dev/null and b/tests/test_data.pyc differ diff --git a/tests/test_oauth_login.py b/tests/test_oauth_login.py new file mode 100644 index 0000000..fec5ca4 --- /dev/null +++ b/tests/test_oauth_login.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +import os, sys +import unittest +from collections import defaultdict + +from website.config import settings +from scaffold.core.data.database import db +from website.data import site_user + + +class TestBasePage(unittest.TestCase): + + def test_fetch_non_existant_oauth_user(self): + site_user.create_oauth_login().execute({ + 'username': 'Non existant username', + 'provider': 1, + 'user_id': 1, + }) + + def test_fetch_existant_oauth_user(self): + site_user.create_oauth_login().execute({ + 'username': 'nick', + 'provider': 1, + 'user_id': 1, + }) + + def test_update_oauth_user(self): + site_user.update_oauth_login().execute({ + 'user_id': '2', + 'username': 'nick_modified', + 'provider': 3, + }) + + +if __name__ == '__main__': + unittest.main(buffer=False) + diff --git a/tests/test_oauth_login.pyc b/tests/test_oauth_login.pyc new file mode 100644 index 0000000..4be1ab9 Binary files /dev/null and b/tests/test_oauth_login.pyc differ diff --git a/tests/test_simple_querys.db b/tests/test_simple_querys.db new file mode 100644 index 0000000..e69de29 diff --git a/tests/test_users.py b/tests/test_users.py new file mode 100644 index 0000000..92c3214 --- /dev/null +++ b/tests/test_users.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +import os, sys +import unittest +from collections import defaultdict + +from scaffold.core.data.database import db +from website.data import site_user + + +class TestBasePage(unittest.TestCase): + + def test_fetch_non_existant_oauth_user(self): + site_user.create_oauth_login().execute({ + 'username': 'Non existant username', + 'provider': 1, + 'user_id': 1, + }) + + def test_fetch_existant_oauth_user(self): + site_user.create_oauth_login().execute({ + 'username': 'nick', + 'provider': 1, + 'user_id': 1, + }) + + def test_update_oauth_user(self): + result = site_user.update_oauth_login().execute({ + 'user_id': '2', + 'username': 'nick_modified', + 'provider': '3', + }) + + + +if __name__ == '__main__': + unittest.main(buffer=False) diff --git a/tests/test_users.pyc b/tests/test_users.pyc new file mode 100644 index 0000000..f678161 Binary files /dev/null and b/tests/test_users.pyc differ diff --git a/website/main.py b/website/main.py new file mode 100644 index 0000000..60c12b4 --- /dev/null +++ b/website/main.py @@ -0,0 +1,87 @@ +import os +import sys +from flask import Flask, send_from_directory +from flask import make_response + +sys.path.append(os.path.abspath('../../../scaffold/')) +sys.path.insert(0,os.path.abspath('../../../scaffold/')) + +from config import settings +import generate +from pages import homepage +from pages import chat +from pages import blog +from pages import members +from pages.contact import contact_page, submit_contact_page + +from pages.core.login_pages import login_pages +from pages.core.authorize import authorize_pages, login_manager +from pages.donate import donate_pages +from pages.google_groups import google_groups_pages +from pages.equipment import equipment_pages +from pages.profile import profile_pages + + +web_app = Flask(__name__, static_folder='static') +web_app.config['PROPAGATE_EXCEPTIONS'] = True +web_app.secret_key = settings.flask_secret_key +login_manager.init_app(web_app) + +web_app.register_blueprint(login_pages) +web_app.register_blueprint(authorize_pages) +web_app.register_blueprint(equipment_pages) +web_app.register_blueprint(profile_pages) +web_app.register_blueprint(google_groups_pages) +web_app.register_blueprint(donate_pages) + +#~ @web_app.route('/static/') +#~ def send_js(filename): + #~ print filename + #~ print send_from_directory('/static_resources/', filename) + #~ path = os.path.abspath('./static_resources/') + #~ print path + 'css/' + #~ return send_from_directory(path + 'css/', 'default.css') + +# local testing server, add your pages here +@web_app.route("/examples/", methods=['GET']) +def examples(): + """temporary for testing / examples""" + return make_response(generate.examples()) + +@web_app.route("/blogs/", methods=['GET']) +def blogs(): + """temporary for testing / examples""" + return make_response(blog.index()) + +@web_app.route("/", methods=['GET']) +def index(): + """home page""" + return make_response(homepage.index()) + +@web_app.route("/members/", methods=['GET']) +def members_index(): + """list of members""" + return make_response(members.index()) + +@web_app.route("/members//", methods=['GET']) +def members_profile(user_id, name): + """members profile""" + return make_response(members.profile(user_id, name)) + +@web_app.route("/chat/", methods=['GET']) +def chat_index(): + """competition page""" + return make_response(chat.index()) + +@web_app.route("/contact-us/", methods=['GET']) +def contact_us(): + """Contact page""" + return make_response(contact_page()) + +@web_app.route("/contact-us/", methods=['POST']) +def submit_contact_us(): + """Contact page""" + return make_response(submit_contact_page()) + +if __name__ == '__main__': + web_app.run(host='0.0.0.0', port=5000, debug=True)