def testCreateStudentProfile(): connection = sqlite3.connect("incollege_test.db") cursor = connection.cursor() db.initTables(cursor) db.insertProfilePage(cursor, "uname", "major", "university", "about") db.insertProfileEducation(cursor, "uname", "university_name", "user_degree", "2016", "2020") db.insertProfileJob(cursor, "uname", "title", "employer", "date_start", "date_end", "location", "job_description") assert db.getProfilePage(cursor, "uname") is not None assert db.getProfileJobs(cursor, "uname") is not None assert db.getProfileEducation(cursor, "uname") is not None
def testImportantLinks(monkeypatch, capfd): monkeypatch.setattr("sys.stdin", StringIO("f\nz\nz\nz\n")) settings.signedInUname = "username1" connection = sqlite3.connect("incollege_test.db") cursor = connection.cursor() cursor.execute("DROP TABLE IF EXISTS Users") #delete tables to make sure no conflicts when running test multiple times cursor.execute("DROP TABLE IF EXISTS profile_page") db.initTables(cursor) db.insertUser(cursor, "username1", "password", "first1", "last1", 0, "2020-01-01 12:30:00") db.insertProfilePage(cursor, "username1", "major", "university", "about") settings.currentState = states.mainMenu ui.enterMainMenu(cursor, connection) out, err = capfd.readouterr() assert "Important Links" in out
def testProfileAddFourJobs(monkeypatch, capfd): connection = sqlite3.connect("incollege_test.db") cursor = connection.cursor() cursor.execute("DROP TABLE IF EXISTS profile_jobs") db.initTables(cursor) db.insertUser(cursor, "uname", "password", "first", "last", 0, "01/01/2020") db.insertProfilePage(cursor, "uname", "major", "university", "about") for _ in range(3): # add 3 jobs db.insertProfileJob(cursor, "uname", "title", "employer", "date_start", "date_end", "location", "job_description") settings.currentState = states.profilePage #settings needed for enterProfilePageMenu to work settings.signedInUname = "uname" monkeypatch.setattr("sys.stdin", StringIO("a\nd\nz\nz\n")) #navigate menu. pressing d tries to add a new job which should fail profiles.enterProfilePageMenu(cursor, connection) out, err = capfd.readouterr() assert out is not None assert len(db.getProfileJobs(cursor, settings.signedInUname)) == 3 assert settings.currentState == states.mainMenu
def inputAPIUsers(dbCursor, dbConnection): today = date.today() # Get today's date date_format = "%m/%d/%Y" todayDate = today.strftime(date_format) # Format date mm/dd/yyyy currentDate = datetime.strptime(todayDate, date_format) # Today's date as a string user_count = db.getNumUsers(dbCursor) student_accounts = API.createStudentAccounts() if student_accounts: for obj in student_accounts: # only create up to 10 accounts, don't recreate accounts if user_count < 10 and db.getUserByFullName( dbCursor, obj.first_name, obj.last_name) is None: db.insertUser(dbCursor, obj.username, obj.password, obj.first_name, obj.last_name, obj.plus_member, currentDate) db.insertUserSettings(dbCursor, obj.username, settings.emailNotif, settings.smsNotif, settings.targetAdvert, settings.language) db.insertProfilePage(dbCursor, obj.username, "", "", "") user_count += 1 dbConnection.commit()
def createUser(dbCursor, connection): if db.getNumUsers( dbCursor ) >= constants.MAX_USER_ACCOUNTS: # checks if number of accounts in database is at max limit print( "All permitted accounts have been created, please come back later") settings.currentState = states.loggedOut # returns to main() w/ currentState = loggedOut return print( "Enter desired account credentials, or only press enter at any time to cancel account creation." ) uname = input("Enter your desired username: "******"": print("Account creation canceled.") settings.currentState = states.loggedOut return while db.getUserByName(dbCursor, uname): print("Sorry, that username has already been taken.") uname = input("Enter your desired username: "******"": print("Account creation canceled.") settings.currentState = states.loggedOut return pword = input("Enter your desired password: "******"": print("Account creation canceled.") settings.currentState = states.loggedOut return while not utils.validatePassword(pword): print( "Invalid password. Must be length 8-12 characters, contain one digit, one uppercase character, and one non-alphanumeric." ) pword = input("Enter your desired password: "******"": print("Account creation canceled.") settings.currentState = states.loggedOut return fname = input("Enter your first name: ") if fname == "": print("Account creation canceled.") settings.currentState = states.loggedOut return lname = input("Enter your last name: ") if lname == "": print("Account creation canceled.") settings.currentState = states.loggedOut return plusMember = input( "Sign up for InCollege-Plus membership? (Enter Y for Plus, N for Standard): " ) while True: if plusMember.upper() == "Y": plusMember = 1 break elif plusMember.upper() == "N": plusMember = 0 break else: print(constants.INVALID_INPUT) plusMember = input( "Sign up for InCollege-Plus membership? (Enter Y for Plus, N for Standard): " ) today = date.today() # Get today's date date_format = "%m/%d/%Y" todayDate = today.strftime(date_format) # Format date mm/dd/yyyy currentDate = datetime.strptime(todayDate, date_format) # Today's date as a string db.insertUser(dbCursor, uname, pword, fname, lname, plusMember, currentDate) db.insertUserSettings(dbCursor, uname, settings.emailNotif, settings.smsNotif, settings.targetAdvert, settings.language) db.insertProfilePage(dbCursor, uname, "", "", "") # add notification to let other users know a new student has joined other_users = db.getAllOtherUsers(dbCursor, uname) if len(other_users) > 0: for user in other_users: db.insertNotification(dbCursor, "new_student", fname + " " + lname, user[0]) connection.commit( ) # commits the new account and settings to the database (ensures account and settings are saved) API.outputUsers(dbCursor) API.outputProfiles(dbCursor) settings.currentState = states.loggedOut # returns to main() w/ currentState = loggedOut print("Account has been created.")