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
Esempio n. 4
0
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()
Esempio n. 5
0
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.")