def register(): """display register page for new users""" registration_form = classes.RegistrationForm() if registration_form.validate_on_submit(): username = registration_form.username.data password = registration_form.password.data email = registration_form.email.data image_file = registration_form.image_file.data gender = registration_form.gender.data age = registration_form.age.data city = registration_form.city.data user_count = (classes.User.query.filter_by(username=username).count() + classes.User.query.filter_by(email=email).count()) if user_count > 0: flash("Error - Existing user : "******" OR " + email) else: user = classes.User(username, email, password, image_file, gender, age, city) db.session.add(user) db.session.commit() return redirect(url_for("login")) return render_template( "register.html", form=registration_form, authenticated_user=current_user.is_authenticated, )
def register(): """ This function uses method request to take user-input data from a regular html form (not a FlaskForm object) then inserts the information of a new user into the database using SQLAlchemy. If data is valid, dedirect to log in page. Oherwise, render the sign up form again. """ if request.method == "POST": username = request.form['username'] companyname = request.form['companyname'] email = request.form['email'] password = request.form['password'] user_count = classes.User.query.filter_by(username=username).count() \ + classes.User.query.filter_by(email=email).count() if user_count == 0: user = classes.User(username, email, companyname, password) db.session.add(user) db.session.commit() # flash('successfully logged in.') return redirect(url_for('signin')) else: flash('Username or email already exists.') return render_template("signup.html")
def register(): """Register page""" registration_form = classes.RegistrationForm() if current_user.is_authenticated: return redirect(url_for("dashboard")) if registration_form.validate_on_submit(): first_name = registration_form.first_name.data last_name = registration_form.last_name.data email = registration_form.email.data phone = registration_form.phone.data password = registration_form.password.data # Make sure email and phone number are unique user_count = (classes.User.query.filter_by(email=email).count() + classes.User.query.filter_by(phone=phone).count()) if len(phone) != 10: flash('Please enter a valid phone number') elif user_count != 0: flash('User already exists') else: # User information does not already exist in DB user = classes.User(first_name, last_name, email, phone, password) db.session.add(user) db.session.commit() return redirect(url_for("login")) return render_template("register.html", form=registration_form)
def mobile_register(): """ This function uses method post to register user information in the data base. This returns a message indicating the if the procedure has been successful or not. :return: return dictionary with success "1"/"0" if success/failure """ if request.method == "POST": username = request.form['username'] companyname = request.form['companyname'] email = request.form['email'] password = request.form['password'] user_count = classes.User.query.filter_by(username=username).count() \ + classes.User.query.filter_by(email=email).count() if user_count == 0: user = classes.User(username, email, companyname, password) db.session.add(user) db.session.commit() # return "1" # return json.dumps({"success": "1"}) # return "0" return json.dumps({"success": "0"})
def new_user_form(): """Let a new user to register""" if request.method == "POST": # when a user fills the new user form name = request.form['name'] username = request.form['username'] email = request.form['email'] password = request.form['password'] # we look to check if the user is already created user = classes.User.query.filter_by(email=email).first() if user is not None: login_user(user) flash("Email already has an account associated.") return render_template("index_newform.html") else: # we create the user in the database user = classes.User(name, username, email, password) db.session.add(user) db.session.commit() return redirect(url_for("login")) return render_template("index_newform.html")
def setUp(self): """Initialization for the test cases This is executed prior to each test. """ application.config['TESTING'] = True application.config['WTF_CSRF_ENABLED'] = False application.config['DEBUG'] = False self.app = application.test_client() # setup plaid client self.client = Client(ENV_VARS["PLAID_CLIENT_ID"], ENV_VARS["PLAID_SECRET"], ENV_VARS["PLAID_PUBLIC_KEY"], "sandbox") self.public_token = sandbox.PublicToken(self.client) db.drop_all() db.create_all() # Create a test user and test plaid item self.test_user = classes.User(first_name="first", last_name="last", email="*****@*****.**", phone="9876543210", password="******") db.session.add(self.test_user) db.session.commit() self.test_item = classes.PlaidItems(user=self.test_user, item_id="item", access_token="token") db.session.add(self.test_item) db.session.commit()
def register(): """Registration Page""" registration_form = classes.RegistrationForm() if registration_form.validate_on_submit(): username = registration_form.username.data password = registration_form.password.data email = registration_form.email.data user = classes.User(username, email, password) msg = classes.UserBL.RegisterUserDB(user) if msg == "User registered": return redirect(url_for('login')) else: if msg == "Email address already taken": flash(msg + ": " + email) if msg == "Username already taken": flash(msg + ": " + username) return render_template( 'register.html', form=registration_form, authenticated_user=current_user.is_authenticated) return render_template('register.html', form=registration_form, authenticated_user=current_user.is_authenticated)
def register(): """Sign up""" if current_user.is_authenticated: return '<h1> Error: User already logged in. </h1>' form = classes.SurveyForm() if form.validate_on_submit(): username = form.username_entry.data password = form.password_entry.data first_name = form.first_name_entry.data last_name = form.last_name_entry.data email = form.email_entry.data age = form.age_entry.data food = form.food_entry.data nightlife = form.nightlife_entry.data nature = form.nature_entry.data museums = form.museums_entry.data landmarks = form.landmarks_entry.data music = form.music_entry.data performing = form.performing_entry.data user_count = classes\ .User\ .query\ .filter_by(username=username)\ .count() +\ classes.User.query.filter_by(email=email).count() if (user_count > 0): return '<h1> Error - Existing user : '******' or ' + email + '</h1>' +\ '<p> Please <a href="/register">try again.</a></p>' else: user = classes.User(username=username, email=email, password=password, first_name=first_name, last_name=last_name, age=age, food=food, nightlife=nightlife, museums=museums, nature=nature, landmarks=landmarks, music=music, performing=performing) db.session.add(user) db.session.commit() login_user(user) return redirect(url_for('my_account')) return render_template('register.html', form=form)
def register(): registration_form = classes.RegistrationForm() if registration_form.validate_on_submit(): username = registration_form.username.data password = registration_form.password.data email = registration_form.email.data ################################## #### UPDATE THIS (EXERCISE 1) #### ################################## user = classes.User(username, email, password) db.session.add(user) db.session.commit() return redirect(url_for('index')) return render_template('register.html', form=registration_form)
def test_invalid_login(self): # add user to db test_user = classes.User('First', 'Last', '*****@*****.**', '6158172309', 'password') db.session.add(test_user) db.session.commit() with self.app as c: email = '*****@*****.**' password = '******' response = self.app.post('/login', data=dict(email=email, password=password), follow_redirects=True) is_logged_in = '_user_id' in flask.session self.assertFalse(is_logged_in)
def register(): """Handle user registration.""" if request.method == 'POST': print(request.json) password = request.json['password'] email = request.json['email'] username = email.split('@')[0] user_count = classes.User.query.filter_by(email=email).count() if user_count > 0: # email exists return '<h1> Error - Existing User:'******'</h1>' user = classes.User(username, email, password) db.session.add(user) db.session.commit() return '<h1> Registered : ' + email + '</h1>'
def test_phone_exists_register(self): test_user = classes.User('First', 'Last', '*****@*****.**', '6158172309', 'password') db.session.add(test_user) db.session.commit() data = { 'first_name': 'First', 'last_name': 'Last', 'email': '*****@*****.**', 'phone': '6158172309', 'password': '******' } with self.app as c: response = self.app.post('/register', data=data) self.assertEqual(response.location, None)
def test_email_exists_register(self): test_user = classes.User('First', 'Last', '*****@*****.**', '6158172309', 'password') db.session.add(test_user) db.session.commit() data = { 'first_name': 'First', 'last_name': 'Last', 'email': '*****@*****.**', 'phone': '1234567890', 'password': '******' } with self.app as c: response = self.app.post('/register', data=data) # When location is None then no redirect happens self.assertEqual(response.location, None)
def test_register(): """ Testing the registration for new users (base flow) """ username = "******" email = "*****@*****.**" password = "******" user = classes.User(username, email, password) msg = classes.UserBL.RegisterUserDB(user) user = classes.UserBL.UserFromDB(username) val = True assert msg == "User registered" assert user.email == email assert user.username == username assert user.check_password(password) == val classes.UserBL.DeleteUserDB(username)
def register(): registration_form = classes.RegistrationForm() if registration_form.validate_on_submit(): username = registration_form.username.data password = registration_form.password.data email = registration_form.email.data user_count = classes.User.query.filter_by(username=username).count() +classes.User.query.filter_by(email=email).count() if (user_count > 0): flash('Error - Existing user : '******' OR ' + email) else: user = classes.User(username, email, password) db.session.add(user) db.session.commit() return redirect(url_for('login')) return render_template('register.html', form=registration_form)
def register(): registration_form = classes.RegistrationForm() if registration_form.validate_on_submit(): username = registration_form.username.data password = registration_form.password.data email = registration_form.email.data user_count = classes.User.query.filter_by(username=username).count() \ + classes.User.query.filter_by(email=email).count() if (user_count > 0): #### UPDATE THIS ##### return '<h1>Error - Existing user : '******' OR ' + email + '</h1>' else: user = classes.User(username, email, password) db.session.add(user) db.session.commit() return redirect(url_for('index')) return render_template('register.html', form=registration_form)
def register(): if current_user.is_authenticated: return redirect(url_for('index')) else: registration_form = classes.RegistrationForm() next_page = 'register' if registration_form.validate_on_submit(): username = registration_form.username.data password = registration_form.password.data confirm_password = registration_form.confirm_password.data email = registration_form.email.data user = classes.User(username, email, password) db.session.add(user) db.session.commit() login_user(user) return redirect(url_for('index')) return render_template('index.html', form=registration_form, registration_form=registration_form, next_page=next_page)
def register(): """ Create a new user in the database (username, email, pw) if does not already exist. If succesful, render questionnaire page. """ registration_form = classes.RegistrationForm() if registration_form.validate_on_submit(): username = registration_form.username.data password = registration_form.password.data email = registration_form.email.data user_count = classes.User.query.filter_by(username=username).count() email_count = classes.User.query.filter_by(email=email).count() if user_count > 0: flash(f'Username \'{username}\' already taken.') elif email_count > 0: flash(f'Email \'{email}\' already registered.') else: user = classes.User(username, email, password) db.session.add(user) db.session.commit() login_user(user) return redirect(url_for('questionnaire')) return render_template('register.html', form=registration_form)
def test_insertion(self): """Test if new records can be correctly inserted to each table Tables include user, plaid_items, accounts, transaction, savings_history and habits. """ # add a new user to user table test_user = classes.User(first_name="first", last_name="last", email="*****@*****.**", phone="9876543210", password="******") db.session.add(test_user) db.session.commit() # test if the new user is correctly inserted user = classes.User.query.first() self.assertEqual(user.first_name, "first", msg="check first name") self.assertEqual(user.last_name, "last", msg="check last name") self.assertEqual(user.email, "*****@*****.**", msg="check email") self.assertEqual(user.phone, "9876543210", msg="check phone number") self.assertEqual(user.coins, 0, msg="check coin balance") self.assertTrue(user.check_password, msg="check password") # add a new plaid item to plaid_items table test_item = classes.PlaidItems(user=user, item_id="%item$", access_token="$token&") db.session.add(test_item) db.session.commit() # test if the new plaid item is correctly inserted item = classes.PlaidItems.query.first() self.assertEqual(item.user_id, user.id, msg="check user id") self.assertEqual(item.item_id, "%item$", msg="check item id") self.assertEqual(item.access_token, "$token&", msg="check access token") # add a new account to accounts table test_account = classes.Accounts(user=user, plaid_id=item.id, account_plaid_id="test-account", account_name="test-bank", account_type="test-type", account_subtype="test-subtype") db.session.add(test_account) db.session.commit() # test if the new account is correctly inserted account = classes.Accounts.query.first() self.assertEqual(account.user_id, user.id, msg="check user id") self.assertEqual(account.plaid_id, item.id, msg="check plaid item id") self.assertEqual(account.account_plaid_id, "test-account", msg="check account plaid id") self.assertEqual(account.account_name, "test-bank", msg="check account name") self.assertEqual(account.account_type, "test-type", msg="check account type") self.assertEqual(account.account_subtype, "test-subtype", msg="check account subtype") # add a new transaction to transaction table test_trans = classes.Transaction( user=user, account_id=account.id, trans_amount=123.45, category_id=12345678, is_preferred_saving="Yes", trans_date=datetime.strptime("2020-01-01", "%Y-%m-%d"), post_date=datetime.strptime("2020-01-02", "%Y-%m-%d"), merchant_category="Food", merchant_address="23 Street", merchant_city="San Francisco", merchant_state="CA", merchant_country="US", merchant_postal_code="94102", merchant_longitude="34.12", merchant_latitude="102.45") db.session.add(test_trans) db.session.commit() # test if the new transaction is correctly inserted trans = classes.Transaction.query.first() self.assertEqual(trans.user_id, user.id, msg="check user id") self.assertEqual(trans.account_id, account.id, msg="check account id") self.assertEqual(str(trans.trans_amount), "123.45", msg="check transaction amount") self.assertEqual(trans.category_id, 12345678, msg="check category id") self.assertEqual(trans.is_preferred_saving, "Yes", msg="check if it is a preferred saving category") self.assertEqual(datetime.strftime(trans.trans_date, "%Y-%m-%d"), "2020-01-01", msg="check transaction date") self.assertEqual(datetime.strftime(trans.post_date, "%Y-%m-%d"), "2020-01-02", msg="check post date") self.assertEqual(trans.merchant_category, "Food", msg="check merchant category") self.assertEqual(trans.merchant_address, "23 Street", msg="check merchant address") self.assertEqual(trans.merchant_city, "San Francisco", msg="check merchant city") self.assertEqual(trans.merchant_state, "CA", msg="check merchant state") self.assertEqual(trans.merchant_country, "US", msg="check merchant country") self.assertEqual(trans.merchant_postal_code, "94102", msg="check merchant postal code") self.assertEqual(trans.merchant_longitude, "34.12", msg="check merchant longitude") self.assertEqual(trans.merchant_latitude, "102.45", msg="check merchant latitude") # add a new saving history to savings_history table test_saving = classes.SavingsHistory( user=user, savings_amount="3.21", total_savings="5.67", predicted_savings="10.89", transfer_date=datetime.strptime("2020-02-01", "%Y-%m-%d"), update_date=datetime.strptime("2020-02-02", "%Y-%m-%d")) db.session.add(test_saving) db.session.commit() # test if the new saving history is correctly inserted saving = classes.SavingsHistory.query.first() self.assertEqual(saving.user_id, user.id, msg="check user id") self.assertEqual(str(saving.savings_amount), "3.21", msg="check savings amount") self.assertEqual(str(saving.total_savings), "5.67", msg="check total savings") self.assertEqual(str(saving.predicted_savings), "10.89", msg="check predicted savings") self.assertEqual(datetime.strftime(saving.transfer_date, "%Y-%m-%d"), "2020-02-01", msg="check transfer date") self.assertEqual(datetime.strftime(saving.update_date, "%Y-%m-%d"), "2020-02-02", msg="check update date") # add a new habit to habits table test_habit = classes.Habits(user=user, habit_name="coffee", habit_category="test-category", time_minute=25, time_hour=10, time_day_of_week="weekday") db.session.add(test_habit) db.session.commit() # test if the new habit is correctly inserted habit = classes.Habits.query.first() self.assertEqual(habit.user_id, user.id, msg="check user id") self.assertEqual(habit.habit_name, "coffee", msg="check habit name") self.assertEqual(habit.habit_category, "test-category", msg="check habit category") self.assertEqual(habit.time_minute, 25, msg="check habit minute") self.assertEqual(habit.time_hour, 10, msg="check habit hour") self.assertEqual(habit.time_day_of_week, "weekday", msg="check habit day of week") # add a new coin transaction to coin table test_coin = classes.Coin(user=user, coin_amount=5, log_date=datetime.strptime( "2020-03-10", "%Y-%m-%d"), description="login") db.session.add(test_coin) db.session.commit() # test if the new coin transaction is correctly inserted coin = classes.Coin.query.first() self.assertEqual(coin.user_id, user.id, msg="check user id") self.assertEqual(coin.coin_amount, 5, msg="check coin amount") self.assertEqual(datetime.strftime(coin.log_date, "%Y-%m-%d"), "2020-03-10", msg="check coin log date") self.assertEqual(coin.description, "login", msg="check coin description")