Esempio n. 1
0
    def test_get_insert_id(self):
        # Check if initial ID is one
        initial_id = crud.get_insert_id(User, self.session)
        self.assertEqual(initial_id == 1, True)

        # create multiple users
        user_names = ["cris", "keenan", "mohit", "sarthak"]
        user_emails = ["*****@*****.**", "*****@*****.**",
                       "*****@*****.**", "*****@*****.**"]
        user_phones = ["858-2867-3567", "858-2867-3568",
                       "858-2867-3566", "858-2867-3565"]
        user_descriptions = ["cultured man",
                             "cultured guy", "cultured men", "cultured dude"]
        user_school_years = ["First", "Second", "Third", "Fourth"]
        user_majors = ["Data Science", "CS", "ChemE", "CS"]

        # Add users to database, store objects
        for i in range(len(user_names)):
            crud.add_user(
                user_names[i],
                user_emails[i],
                datetime.now(),
                user_phones[i],
                user_descriptions[i],
                user_school_years[i],
                user_majors[i],
                self.session)
            current_id = crud.get_insert_id(User, self.session)
            self.assertEqual((i+2) == current_id, True)
Esempio n. 2
0
def test_get_exist_user_by_id():
    """Test search exists user by email."""
    with mocked_transaction() as session:
        user = add_user(session, fake.name(), fake.email(), fake.password(),
                        fake.address(), fake.latitude(), fake.longitude())
        assert user is not None
        assert get_user_by_id(session, user.id) is not None
Esempio n. 3
0
    def test_add_user(self):
        user_name = "cris"
        user_email = "*****@*****.**"
        created_time = datetime.now()
        user_phone = "858-2867-3567"
        user_description = "cultured man"
        user_school_year = "Third"
        user_major = "Data Science"

        user_object = crud.add_user(user_name, user_email, created_time,
                                    user_phone, user_description,
                                    user_school_year, user_major, self.session)

        # check if the return object has correct information
        self.assertEqual(user_object.email, user_email)
        self.assertEqual(user_object.name, user_name)
        self.assertEqual(user_object.date_created, created_time)
        self.assertEqual(user_object.phone, user_phone)
        self.assertEqual(user_object.description, user_description)
        self.assertEqual(user_object.school_year, user_school_year)
        self.assertEqual(user_object.major, user_major)

        # check if the user is loaded into the database
        query_object = crud.get_row_if_exists(User, self.session,
                                              **{'email': user_email})

        self.assertEqual(query_object == user_object, True)
Esempio n. 4
0
    def test_get_row_if_exists(self):
        user_name = "cris"
        user_email = "*****@*****.**"
        created_time = datetime.now()
        user_phone = "858-2867-3567"
        user_description = "cultured man"
        user_school_year = "Third"
        user_major = "Data Science"

        # check if it the method detects no users
        query_object = crud.get_row_if_exists(
            User, 
            self.session, 
            **{'email': user_email})

        self.assertEqual(query_object is None, True)

        # add the user
        user_object = crud.add_user(
            user_name, 
            user_email,
            created_time, 
            user_phone,
            user_description, 
            user_school_year,
            user_major, 
            self.session)

        # check if it the method detects an user
        query_object = crud.get_row_if_exists(
            User, 
            self.session, 
            **{'email': user_email})

        self.assertEqual(query_object == user_object, True)
Esempio n. 5
0
    def test_update_field(self):
        # create an user
        user_name = "cris"
        user_email = "*****@*****.**"
        created_time = datetime.now()
        user_phone = "858-2867-3567"
        user_description = "cultured man"
        user_school_year = "Third"
        user_major = "Data Science"
        user_object = crud.add_user(
            user_name, 
            user_email,
            created_time, 
            user_phone,
            user_description, 
            user_school_year,
            user_major, 
            self.session)
        
        # change description
        crud.update_field(
            User, 
            self.session, 
            {'email': '*****@*****.**'}, 
            {'description':'google man'})

        user_object = crud.get_row_if_exists(
            User,
            self.session,
            **{'email': '*****@*****.**'})
        
        self.assertEqual(user_object.description == 'google man', True)
Esempio n. 6
0
def test_add_new_user():
    """Test adding new user."""
    with mocked_transaction() as session:
        user = add_user(session, fake.name(), fake.email(), fake.password(),
                        fake.address(), fake.latitude(), fake.longitude())
        assert user is not None
        assert get_user_by_id(session, user.id) is not None
Esempio n. 7
0
def test_authenticate_user():
    """Test user authentication."""
    with mocked_transaction() as session:
        not_hashed_password = fake.password()
        user = add_user(session, fake.name(), fake.email(),
                        not_hashed_password, fake.address(), fake.latitude(),
                        fake.longitude())
        assert user is not None
        assert is_authenticated_user(session, user.email, not_hashed_password)
Esempio n. 8
0
def test_delete_exists_user():
    """Test deleting user."""
    with mocked_transaction() as session:
        not_hashed_password = fake.password()
        user = add_user(session, fake.name(), fake.email(),
                        not_hashed_password, fake.address(), fake.latitude(),
                        fake.longitude())
        assert user is not None
        assert delete_user(session, user.email, not_hashed_password)
        assert get_user_by_id(session, user.id) is None
Esempio n. 9
0
def test_update_user_categories():
    """Test update user categories."""
    categories_ids = [1, 2, 3, 4, 5, 48, 201]

    with mocked_transaction() as session:
        user = add_user(session, fake.name(), fake.email(), fake.password(),
                        fake.address(), fake.latitude(), fake.longitude())
        assert user is not None
        update_categories_to_user(session, user.id, categories_ids)
        user = get_user_by_id(session, user.id)
        assert user.categories_ids == categories_ids
Esempio n. 10
0
def test_get_near_users():
    """Test getting all nearby result_users functionality."""
    RADIUS = 2  # KM
    base_coordinates = (32.852310, 35.096149)  # BASE
    in_range_coordinates = [
        (32.853418, 35.092406),  # 0.37 KM
        (32.852408, 35.090430),  # 0.54 KM
        (32.845414, 35.078663),  # 1.81 KM
        (32.842025, 35.105976),  # 1.47 KM
        (32.841159, 35.079529)
    ]  # 1.99 KM
    out_of_range_coordinates = [
        (32.834380, 35.103056),  # 2.09 KM
        (32.832722, 35.081751),  # 2.56 KM
        (32.838491, 35.076007),  # 2.43 KM
        (32.838491, 35.076007),  # 4.72 KM
        (32.840005, 35.069641)
    ]  # 2.83 KM
    with mocked_transaction() as session:
        in_range_users = [
            add_user(session, fake.name(), fake.email(), fake.password(),
                     fake.address(), coordinate[0], coordinate[1])
            for coordinate in in_range_coordinates
        ]

        for coordinate in out_of_range_coordinates:
            add_user(session, fake.name(), fake.email(), fake.password(),
                     fake.address(), coordinate[0], coordinate[1])

        # Check that users was added.
        assert len(get_all_users(session)) == len(out_of_range_coordinates) + \
               len(in_range_coordinates)

        result_users = get_near_users(session,
                                      latitude=base_coordinates[0],
                                      longitude=base_coordinates[1],
                                      radius=RADIUS)
    assert set(result_users) == set(in_range_users)
Esempio n. 11
0
    def test_write_room(self):
        # create an user
        user_name = "cris"
        user_email = "*****@*****.**"
        created_time = datetime.now()
        user_phone = "858-2867-3567"
        user_description = "cultured man"
        user_school_year = "Third"
        user_major = "Data Science"
        user_object = crud.add_user(user_name, user_email, created_time,
                                    user_phone, user_description,
                                    user_school_year, user_major, self.session)

        # the input json should be the same as output json from room_json except for id
        test_json = {
            'name': '75 Big Rock Cove St. Middletown',
            'address': '75 Big Rock Cove St. Middletown, NY 10940',
            'distance': '20 mins',
            'pricePerMonth': 500,
            'from_month': 'June/18',
            'to_month': 'July/18',
            'early_date': '06/01/18',
            'late_date': '06/12/18',
            'roomType': 'Single',
            'other': [],
            'facilities': [],
            'leaserName': 'cris',
            'leaserEmail': '*****@*****.**',
            'leaserPhone': '858-2867-3567',
            'leaserSchoolYear': 'Third',
            'leaserMajor': 'Data Science',
            'photos': ['photo1', 'photo2'],
            'profilePhoto': 'profile_photo',
            'negotiable': True,
            'numBaths': 2.5,
            'numBeds': 2,
            'roomDescription': 'dream house in a life time'
        }

        crud.write_room(test_json, self.session, True)

        room_object = crud.get_row_if_exists(Room, self.session, **{'id': 1})

        self.assertEqual(room_object is not None, True)

        result_json = crud.room_json(room_object, self.session, True)

        test_json['roomId'] = 1

        self.assertEqual(result_json == test_json, True)
Esempio n. 12
0
    def test_read_criteria(self):
        # create multiple users
        user_names = ["cris", "keenan", "mohit", "sarthak"]
        user_emails = ["*****@*****.**", "*****@*****.**",
                       "*****@*****.**", "*****@*****.**"]
        user_phones = ["858-2867-3567", "858-2867-3568",
                       "858-2867-3566", "858-2867-3565"]
        user_descriptions = ["cultured man",
                             "cultured guy", "cultured men", "cultured dude"]
        user_school_years = ["First", "Second", "Third", "Fourth"]
        user_majors = ["Data Science", "CS", "ChemE", "CS"]

        # Add users to database, store objects
        user_objects = {}
        for i in range(len(user_names)):
            user_objects[user_names[i]] = crud.add_user(
                user_names[i],
                user_emails[i],
                datetime.now(),
                user_phones[i],
                user_descriptions[i],
                user_school_years[i],
                user_majors[i],
                self.session)

        # Create single and multiple user queries
        single_user_query = crud.read_criteria(
            User, {"major": "ChemE", "school_year": "Third"}, self.session)
        all_criteria_user_query = crud.read_criteria(User, {"name": "cris", "email": "*****@*****.**",
                                                            "phone": "858-2867-3567", "description": "cultured man", "major": "Data Science",
                                                            "school_year": "First"}, self.session)
        multiple_user_query = crud.read_criteria(
            User, {"major": "CS"}, self.session, "m")
        all_user_query = crud.read_criteria(User, {}, self.session, "m")

        # Check if queries match expected values
        self.assertEqual(user_objects['mohit'] == single_user_query, True)
        self.assertEqual(user_objects['cris'] == all_criteria_user_query, True)
        self.assertEqual(any([x == user_objects['keenan']
                         for x in multiple_user_query]), True)
        self.assertEqual(any([x == user_objects['sarthak']
                         for x in multiple_user_query]), True)
        self.assertEqual(len(all_user_query) == len(user_objects), True)
Esempio n. 13
0
def create_user():
    session = current_app.config['DB_CONNECTION']
    if request.method == 'OPTIONS':
        return generateResponse()
    requested_json = request.json
    if get_row_if_exists(User, session, **{'email': requested_json['email']}):
        message, status = 'Already Created', 200
        return generateResponse(elem=message, status=status)

    user = add_user(requested_json['name'],
                    requested_json['email'],
                    datetime.now(),
                    requested_json['phone'],
                    requested_json["description"],
                    requested_json["schoolYear"],
                    requested_json["major"],
                    session)
    login_session["user_id"] = user.id
    icon_path = './assets/profile_default_icons/'
    selected_icon = random.choice(
        os.listdir(icon_path))
    path_name = "/".join(["user"+str(user.id),
                          'profile', "headshot.jpg"])
    upload_file_wname(icon_path+selected_icon, 'houseit', path_name)

    json_response = {'name': requested_json['name'],
                     'email': requested_json['email'],
                     'access_token': login_session["access_token"],
                     'message': 'Successfully created room.',
                     'description': user.description,
                     'phone': user.phone,
                     'schoolYear': user.school_year,
                     'major': user.major,
                     'profile_photo': path_name
                     }
    response = generateResponse(json_response, 201)
    response.set_cookie('access_token', login_session["access_token"])

    return response
Esempio n. 14
0
    def test_write_attribute(self):
        # create an user
        user_name = "cris"
        user_email = "*****@*****.**"
        created_time = datetime.now()
        user_phone = "858-2867-3567"
        user_description = "cultured man"
        user_school_year = "Third"
        user_major = "Data Science"
        user_object = crud.add_user(
            user_name, 
            user_email,
            created_time, 
            user_phone,
            user_description, 
            user_school_year,
            user_major, 
            self.session)

        # create a move in
        early_date = datetime(2018, 6, 1)
        late_date = datetime(2018, 6, 12)
        move_in_object = crud.add_move_in(
            early_date, 
            late_date, 
            self.session)

        # create a stay period
        from_month = datetime(2018, 6, 1)
        to_month = datetime(2018, 7, 1)
        stay_period_object = crud.add_stay_period(
            from_month, 
            to_month, 
            self.session)

        # create an address
        address = "75 Big Rock Cove St.Middletown, NY 10940"
        distance = "20 mins"
        address_object = crud.add_address(
            distance, 
            address, 
            self.session)

        # create a room
        date_created = datetime.now()
        room_type = room_types[0]
        price = 500
        negotiable = True
        description = "dream house in a life time"
        no_rooms = 2
        no_bathrooms = 2
        room_object = crud.add_room(
            date_created, 
            room_type, 
            price,
            negotiable, 
            description,
            stay_period_object, 
            address_object,
            user_object, 
            move_in_object,
            no_rooms, 
            no_bathrooms,
            self.session)

        room_object = crud.add_room(
            date_created, 
            room_type, 
            price,
            negotiable, 
            description,
            stay_period_object, 
            address_object,
            user_object, 
            move_in_object,
            no_rooms, 
            no_bathrooms,
            self.session)

        crud.write_attribute(
            facilities[0:3], 
            'facilities', 
            room_object, 
            self.session)
        
        count = self.session.query(House_Attribute).count()
        self.assertEqual(count == 3, True)

        categories = self.session.query(Attribute.category).distinct().all()
        self.assertEqual(categories[0][0] == 'facilities', True)
        
        names = set([result[0] for result in self.session.query(Attribute.name).all()])
        self.assertEqual(names == set(facilities[0:3]), True)
Esempio n. 15
0
    def test_room_json(self):
        # create an user
        user_name = "cris"
        user_email = "*****@*****.**"
        created_time = datetime.now()
        user_phone = "858-2867-3567"
        user_description = "cultured man"
        user_school_year = "Third"
        user_major = "Data Science"
        user_object = crud.add_user(
            user_name, 
            user_email,
            created_time, 
            user_phone,
            user_description, 
            user_school_year,
            user_major, 
            self.session)

        # create a move in
        early_date = datetime(2018, 6, 1)
        late_date = datetime(2018, 6, 12)
        move_in_object = crud.add_move_in(
            early_date, 
            late_date, 
            self.session)

        # create a stay period
        from_month = datetime(2018, 6, 1)
        to_month = datetime(2018, 7, 1)
        stay_period_object = crud.add_stay_period(
            from_month, 
            to_month, 
            self.session)

        # create an address
        address = "75 Big Rock Cove St.Middletown, NY 10940"
        distance = "20 mins"
        address_object = crud.add_address(
            distance, 
            address, 
            self.session)

        # create a room
        date_created = datetime.now()
        room_type = room_types[0]
        price = 500
        negotiable = True
        description = "dream house in a life time"
        no_rooms = 2
        no_bathrooms = 2
        room_object = crud.add_room(
            date_created, 
            room_type, 
            price,
            negotiable, 
            description,
            stay_period_object, 
            address_object,
            user_object, 
            move_in_object,
            no_rooms, 
            no_bathrooms,
            self.session)

        result_json = crud.room_json(
            room_object, 
            self.session, 
            True)

        self.assertEqual(result_json["name"] ==
                         "75 Big Rock Cove St.Middletown", True)
        self.assertEqual(result_json["location"] == address, True)
        self.assertEqual(result_json["pricePerMonth"] == price, True)
        self.assertEqual(result_json["from_month"] == "June/18", True)
        self.assertEqual(result_json["to_month"] == "July/18", True)
        self.assertEqual(result_json["early"] == "06/01/18", True)
        self.assertEqual(result_json["late"] == "06/12/18", True)
        self.assertEqual(result_json["roomType"] == room_type, True)
        self.assertEqual(result_json["other"] == [], True)
        self.assertEqual(result_json["facilities"] == [], True)
        self.assertEqual(result_json["leaserName"] == user_name, True)
        self.assertEqual(result_json["leaserEmail"] == user_email, True)
        self.assertEqual(result_json["leaserPhone"] == user_phone, True)
        self.assertEqual(
            result_json["leaserSchoolYear"] == user_school_year, True)
        self.assertEqual(result_json["leaserMajor"] == user_major, True)
        self.assertEqual(result_json["photos"] == ["photo1", "photo2"], True)
        self.assertEqual(result_json["profilePhoto"] == "profile_photo", True)
        self.assertEqual(result_json["roomId"] == room_object.id, True)
        self.assertEqual(result_json["negotiable"] == negotiable, True)
        self.assertEqual(result_json["numBaths"] == no_rooms, True)
        self.assertEqual(result_json["numBeds"] == no_bathrooms, True)
        self.assertEqual(result_json["roomDescription"] == description, True)

        # add three attributes
        name, category = others[0], "other"

        # create an attribute
        attribute_object = crud.add_attribute(
            name, 
            category, 
            self.session)

        # connect room with the attribute
        house_attribute_object = crud.add_house_attribute(
            room_object, 
            attribute_object, 
            self.session)

        name, category = others[1], "other"

        # create an attribute
        attribute_object = crud.add_attribute(
            name, 
            category, 
            self.session)

        # connect room with the attribute
        house_attribute_object = crud.add_house_attribute(
            room_object, 
            attribute_object, 
            self.session)

        name, category = facilities[0], "facilities"

        # create an attribute
        attribute_object = crud.add_attribute(
            name, 
            category, 
            self.session)

        # connect room with the attribute
        house_attribute_object = crud.add_house_attribute(
            room_object, 
            attribute_object, 
            self.session)

        result_json = crud.room_json(
            room_object, 
            self.session, 
            True)

        self.assertEqual(result_json["other"] == [others[0], others[1]], True)
        self.assertEqual(result_json["facilities"] == [facilities[0]], True)
Esempio n. 16
0
    def test_read_rooms(self):
        # add room allows duplicates since one can have multiple rooms same time with same criteria
        # create an user
        user_name = "cris"
        user_email = "*****@*****.**"
        created_time = datetime.now()
        user_phone = "858-2867-3567"
        user_description = "cultured man"
        user_school_year = "Third"
        user_major = "Data Science"
        user_object = crud.add_user(
            user_name, 
            user_email,
            created_time, 
            user_phone,
            user_description, 
            user_school_year,
            user_major, 
            self.session)

        # create a move in
        early_date = datetime(2018, 6, 1)
        late_date = datetime(2018, 6, 12)
        move_in_object = crud.add_move_in(
            early_date, 
            late_date, 
            self.session)

        # create a stay period
        from_month = datetime(2018, 6, 1)
        to_month = datetime(2018, 7, 1)
        stay_period_object = crud.add_stay_period(
            from_month, 
            to_month, 
            self.session)

        # create an address
        address = "75 Big Rock Cove St.Middletown, NY 10940"
        distance = "20 mins"
        address_object = crud.add_address(
            distance, 
            address, 
            self.session)

        # create a room
        date_created = datetime.now()
        room_type = room_types[0]
        price = 500
        negotiable = True
        description = "dream house in a life time"
        no_rooms = 2
        no_bathrooms = 2
        room_object = crud.add_room(
            date_created, 
            room_type, 
            price,
            negotiable, 
            description,
            stay_period_object, 
            address_object,
            user_object, 
            move_in_object,
            no_rooms, 
            no_bathrooms,
            self.session)

        room_object = crud.add_room(
            date_created, 
            room_type, 
            price,
            negotiable, 
            description,
            stay_period_object, 
            address_object,
            user_object, 
            move_in_object,
            no_rooms, 
            no_bathrooms,
            self.session)

        room_object = crud.add_room(
            date_created, 
            room_type, 
            price,
            negotiable, 
            description,
            stay_period_object, 
            address_object,
            user_object, 
            move_in_object,
            no_rooms, 
            no_bathrooms,
            self.session)

        number_of_rows = len(crud.read_rooms(self.session))
        self.assertEqual(number_of_rows == 3, True)

        # create a different user
        user_name = "keenan"
        user_email = "*****@*****.**"
        created_time = datetime.now()
        user_phone = "858-2867-8888"
        user_description = "HK Dutch man"
        user_school_year = "Grad"
        user_major = "Computer Science"
        user_object = crud.add_user(
            user_name, 
            user_email,
            created_time, 
            user_phone,
            user_description, 
            user_school_year,
            user_major, 
            self.session)

        # create a move in
        early_date = datetime(2018, 8, 1)
        late_date = datetime(2018, 10, 12)
        move_in_object = crud.add_move_in(
            early_date, 
            late_date, 
            self.session)

        # create a stay period
        from_month = datetime(2018, 10, 1)
        to_month = datetime(2019, 10, 1)
        stay_period_object = crud.add_stay_period(
            from_month, 
            to_month, 
            self.session)

        # create an address
        address = "75 Big Rock Cove St.Middletown, NY 10940"
        distance = "20 mins"
        address_object = crud.add_address(
            distance, 
            address, 
            self.session)

        # create a room
        date_created = datetime.now()
        room_type = room_types[0]
        price = 500
        negotiable = True
        description = "smoking is bad for your health"
        no_rooms = 4
        no_bathrooms = 5
        room_object = crud.add_room(
            date_created, 
            room_type, 
            price,
            negotiable, 
            description,
            stay_period_object, 
            address_object,
            user_object, 
            move_in_object,
            no_rooms, 
            no_bathrooms,
            self.session)

        number_of_rows = len(crud.read_rooms(self.session))
        self.assertEqual(number_of_rows == 4, True)
Esempio n. 17
0
    def test_add_and_remove_bookmark(self):
        # create an user
        user_name = "cris"
        user_email = "*****@*****.**"
        created_time = datetime.now()
        user_phone = "858-2867-3567"
        user_description = "cultured man"
        user_school_year = "Third"
        user_major = "Data Science"
        user_object = crud.add_user(
            user_name,
            user_email,
            created_time,
            user_phone,
            user_description,
            user_school_year,
            user_major,
            self.session)

        # create a move in
        early_date = datetime(2018, 6, 1)
        late_date = datetime(2018, 6, 12)
        move_in_object = crud.add_move_in(
            early_date, 
            late_date, 
            self.session)

        # create a stay period
        from_month = datetime(2018, 6, 1)
        to_month = datetime(2018, 7, 1)
        stay_period_object = crud.add_stay_period(
            from_month, 
            to_month, 
            self.session)

        # create an address
        address = "75 Big Rock Cove St. Middletown, NY 10940"
        distance = "20 mins"
        address_object = crud.add_address(
            distance, 
            address, 
            self.session)

        # create a room
        date_created = datetime.now()
        room_type = room_types[0]
        price = 500
        negotiable = True
        description = "dream house in a life time"
        no_rooms = 2
        no_bathrooms = 2
        room_object = crud.add_room(
            date_created,
            room_type, 
            price,
            negotiable,
            description,
            stay_period_object,
            address_object,
            user_object,
            move_in_object,
            no_rooms,
            no_bathrooms,
            self.session)

        # connect bookmark with the room and user
        bookmark_object = crud.add_bookmark(
            room_object, 
            user_object, 
            self.session)

        # check if the return object has correct information
        self.assertEqual(bookmark_object.room_id, room_object.id)
        self.assertEqual(bookmark_object.user_id, user_object.id)

        # check duplicate handling
        bookmark_object = crud.add_bookmark(
            room_object, 
            user_object, 
            self.session)

        number_of_rows = self.session.query(Bookmark).count()
        self.assertEqual(number_of_rows == 1, True)

        # check delete
        crud.remove_bookmark(
            room_object, 
            user_object, 
            self.session)

        number_of_rows = self.session.query(Bookmark).count()
        self.assertEqual(number_of_rows == 0, True)

        crud.remove_bookmark(
            room_object, 
            user_object, 
            self.session)

        number_of_rows = self.session.query(Bookmark).count()
        self.assertEqual(number_of_rows == 0, True)
Esempio n. 18
0
    def test_add_house_attribute(self):
        name, category = others[0], "other"

        # create an attribute (Single Case)
        attribute_object = crud.add_attribute(
            name, 
            category, 
            self.session)

        # create a stay period
        from_month = datetime(2018, 6, 1)
        to_month = datetime(2018, 7, 1)
        stay_period_object = crud.add_stay_period(
            from_month, 
            to_month, 
            self.session)

        # create an address
        address = "75 Big Rock Cove St.Middletown, NY 10940"
        distance = "20 mins"
        address_object = crud.add_address(
            distance, 
            address, 
            self.session)

        # create an user
        user_name = "cris"
        user_email = "*****@*****.**"
        created_time = datetime.now()
        user_phone = "858-2867-3567"
        user_description = "cultured man"
        user_school_year = "Third"
        user_major = "Data Science"
        user_object = crud.add_user(
            user_name, 
            user_email,
            created_time, 
            user_phone,
            user_description, 
            user_school_year,
            user_major, 
            self.session)

        # create a move in
        early_date = datetime(2018, 6, 1)
        late_date = datetime(2018, 6, 12)
        move_in_object = crud.add_move_in(
            early_date, 
            late_date, 
            self.session)

        # create a room
        date_created = datetime.now()
        room_type = room_types[0]
        price = 500
        negotiable = True
        description = "dream house in a life time"
        no_rooms = 2
        no_bathrooms = 2
        room_object = crud.add_room(
            date_created,
            room_type, 
            price,
            negotiable,
            description,
            stay_period_object,
            address_object,
            user_object,
            move_in_object,
            no_rooms,
            no_bathrooms,
            self.session)

        # connect room with the attribute
        house_attribute_object = crud.add_house_attribute(
            room_object,
            attribute_object,
            self.session)

        # check if the return object has correct information
        self.assertEqual(house_attribute_object.room_id, room_object.id)
        self.assertEqual(house_attribute_object.attribute_name,
                         attribute_object.name)

        # one thing in the database
        number_of_rows = self.session.query(House_Attribute).count()
        self.assertEqual(number_of_rows == 1, True)

        # create two attributes (multiple Case)
        name, category = others[1], "other"

        # create a second attribute
        attribute_object = crud.add_attribute(
            name, 
            category, 
            self.session)

        house_attribute_object = crud.add_house_attribute(
            room_object, 
            attribute_object, 
            self.session)

        # check if the return object has correct information
        self.assertEqual(house_attribute_object.room_id, room_object.id)
        self.assertEqual(house_attribute_object.attribute_name,
                         attribute_object.name)

        # two things in the database
        number_of_rows = self.session.query(House_Attribute).count()
        self.assertEqual(number_of_rows == 2, True)

        # check duplicate handling
        house_attribute_object = crud.add_house_attribute(
            room_object, 
            attribute_object, 
            self.session)

        number_of_rows = self.session.query(House_Attribute).count()
        self.assertEqual(number_of_rows == 2, True)
Esempio n. 19
0
def create_user():
    """Create user function that is called when user is not in the database

    content_type: application/json

    example of valid json request format:

    "name": "CRISTIANO",
    "email": "*****@*****.**",
    "description": "YOU COULD NOT LIVE WITH YOUR OWN FAILURE, AND WHERE DID THAT BRING YOU? BACK TO ME",
    "phone": "858-777-2345",
    "schoolYear": "Grad",
    "major": "MARVEL SCIENCE"

    """
    # handle pre-flight for browsers CORS access
    if request.method == "OPTIONS":
        return generate_response()

    # part1: verify that the request is legit
    session = current_app.config["DB_CONNECTION"]
    # verify the token
    checked_and_verified, response = check_verify_token(request, login_session)
    if checked_and_verified == False:
        return response
    try:
        # if some existing users are techie, troll them
        user_id = login_session["user_id"]
        response = generate_message(MESSAGE_CREATE_USER_DUPLICATE_REQUEST, 405)
        return response
    except KeyError:
        # nice error. This means we can proceed to process their json
        checked_json, response, requested_json = check_json_form(
            request, MESSAGE_BAD_JSON, MESSAGE_CREATE_USER_NO_JSON)
        if checked_json == False:
            return response
        try:
            user_name = requested_json["name"]
            # user must complete account creation in the same session
            # no need to handle key error since til now the login_user_email should exist
            user_email = login_session["login_user_email"]
            user_phone = requested_json["phone"]
            user_description = requested_json["description"]
            user_school_year = requested_json["school_year"]
            user_major = requested_json["major"]
            # verify types
            correct_format, valid_update_pairs, response = process_request_json(
                User, {
                    "name": user_name,
                    "email": user_email,
                    "phone": user_phone,
                    "description": user_description,
                    "school_year": user_school_year,
                    "major": user_major
                })
            if correct_format == False:
                return response
            user = add_user(user_name, user_email, datetime.now(), user_phone,
                            user_description, user_school_year, user_major,
                            session)
            # update the user id in the session
            login_session["user_id"] = user.id
            #  upload the image to S3 endpoint if not offline testing
            if current_app.config["OFFLINE_TESTING"] != True:
                # cris's favorite part: create randome icons
                icon_path = "app/assets/profile_default_icons/"
                selected_icon = random.choice(os.listdir(icon_path))
                if current_app.config[
                        "TESTING"] == True:  # if online testing mode
                    user_prefix = "test_user"
                else:
                    user_prefix = "user"
                photo_path_name = "/".join(
                    [user_prefix + str(user.id), "profile", "headshot.jpg"])
                upload_file_wname(icon_path + selected_icon, "houseit",
                                  photo_path_name)
            # finally, send the sensitive data to be displayed on frontend/some techie user
            json_response = generate_user_login_data(
                user, current_app.config["TESTING"])
            json_response["message"] = "Welcome to be a new HOMIE! CONGRATS!"
            status_code = 201
            response = generate_response(json_response, status_code)
            return response
        except KeyError:
            response = generate_message(MESSAGE_CREATE_USER_INCOMPLETE_JSON,
                                        400)
            return response
Esempio n. 20
0
    def test_write_room(self):
        # create an user
        user_name = "cris"
        user_email = "*****@*****.**"
        created_time = datetime.now()
        user_phone = "858-2867-3567"
        user_description = "cultured man"
        user_school_year = "Third"
        user_major = "Data Science"
        user_object = crud.add_user(
            user_name,
            user_email,
            created_time,
            user_phone,
            user_description,
            user_school_year,
            user_major,
            self.session)

        # the input json should be the same as output json from room_json except for id
        test_json = {"name": "75 Big Rock Cove St. Middletown",
                     "address": "75 Big Rock Cove St. Middletown, NY 10940",
                     "distance": "20 mins", "pricePerMonth": 500,
                     "fromMonth": "June/18", "toMonth": "July/18",
                     "earlyDate": "06/01/18", "lateDate": "06/12/18",
                     "roomType": "Single", "other": [], "facilities": [],
                     "photos": ["photo1", "photo2"],
                     "profilePhoto": "profile_photo",
                     "negotiable": True,
                     "numBaths": 2.5,
                     "numBeds": 2,
                     "roomDescription": "dream house in a life time"}

        test_res_json = {"name": "75 Big Rock Cove St. Middletown",
                         "address": "75 Big Rock Cove St. Middletown, NY 10940",
                         "distance": "20 mins", "pricePerMonth": 500,
                         "fromMonth": "June/18", "toMonth": "July/18",
                         "earlyDate": "06/01/18", "lateDate": "06/12/18",
                         "roomType": "Single", "other": [], "facilities": [],
                         "photos": ["photo1", "photo2"],
                         "profilePhoto": "profile_photo",
                         "negotiable": True,
                         "numBaths": 2.5,
                         "numBeds": 2,
                         "roomDescription": "dream house in a life time",
                         "leaserName": user_name, "leaserEmail": user_email,
                         "leaserPhone": user_phone,
                         "leaserSchoolYear": user_school_year,
                         "leaserMajor": user_major, }

        crud.write_room(transform_json_underscore(test_json),
                        user_object.id, self.session, True)

        room_object = crud.get_row_if_exists(
            Room,
            self.session,
            **{"id": 1})

        self.assertEqual(room_object is not None, True)

        result_json = crud.room_json(
            room_object,
            self.session,
            True)

        test_res_json["roomId"] = 1

        self.assertEqual(result_json == test_res_json, True)