Пример #1
0
def step_impl(context, error_message):
    assert context.response_download_json["detail"] == error_message
    metadata_sess = MongoSessionRegular(collection="school_supplies_metadata")
    data_sess = MongoSessionRegular(collection="school_supplies")
    metadata_sess.delete_json({"email": context.login['username']})
    user_sess = MongoSessionRegular(collection='users')
    user_sess.delete_json({"email": "*****@*****.**"})
Пример #2
0
def step_impl(context):
    # rando = random.randint(1, 50000000)
    context.mongo_sesh = MongoSessionRegular(collection='users')
    context.email = "*****@*****.**"

    context.password = "******"
    if context.mongo_sesh.find_json({"email": context.email}) is not None:
        context.mongo_sesh.delete_json({"email": context.email})
    context.client = TestClient(main.app)
    # add user in case not existing
    context.reg_response = context.client.post("/register",
                                               json={
                                                   "email": context.email,
                                                   "password": context.password
                                               })

    context.login_response = context.client.post("/login",
                                                 data={
                                                     "username": context.email,
                                                     "password":
                                                     context.password
                                                 })

    context.user = context.mongo_sesh.find_json({"email": context.email})
    # assert user["is_active"]

    assert context.user is not None
Пример #3
0
def run_around_tests():
    pytest.login_info = {"username": "******", "password": "******"}
    pytest.supply_ids = []
    yield
    # Tear Down
    # Remove supply list data and metadata
    metadata_sess = MongoSessionRegular(collection="school_supplies_metadata")
    data_sess = MongoSessionRegular(collection="school_supplies")

    for id in pytest.supply_ids:
        metadata_sess.remove_supply_list_metadata(
            pytest.login_info["username"], UUID(id)
        )
        data_sess.remove_supply_list(
            UUID(id)
        )
    metadata_sess.delete_json({"email": pytest.login_info["username"]})
Пример #4
0
def step_impl(context, email, password):
    context.mongo_sesh = MongoSessionRegular(collection='users')
    context.register = {"email": email, "password": password}
    context.test_client = TestClient(main.app)
    context.response_register = context.test_client.post("/register",
                                                         json=context.register)
    print(context.response_register.json())
    context.user = email
    context.password = password
Пример #5
0
def step_impl(context):
    response_json = context.response.json()
    assert response_json['Message'] == 'Success'
    metadata_sess = MongoSessionRegular(collection="school_supplies_metadata")
    data_sess = MongoSessionRegular(collection="school_supplies")
    response_json = context.response.json()
    metadata_sess.delete_json({"email": context.login_info['username']})
    delete_result = data_sess.remove_supply_list(
        UUID(response_json['school_supply_id']))
Пример #6
0
def step_impl(context):
    context.mongo_sesh = MongoSessionRegular(collection='users')
    # rando = random.randint(1, 50000000)
    context.email = "*****@*****.**"
    context.password = "******"
    if context.mongo_sesh.find_json({"email": context.email}) is not None:
        context.mongo_sesh.delete_json({"email": context.email})
    context.client = TestClient(main.app)
    # add user in case not existing
    context.reg_response = context.client.post("/register",
                                               json={
                                                   "email": context.email,
                                                   "password": context.password
                                               })

    context.user = None
    context.login_response = None
    assert context.reg_response.status_code == 201
Пример #7
0
def test_valid_created_checklist():

    # Login
    login_response = test_client.post("/login", data=pytest.login_info)
    headers = {"Authorization": "Bearer " + login_response.json()["access_token"]}

    # Upload file
    image_file = open("features/test_files/morris_supply.png", "rb")
    file_obj = {"file": ("morris_supply.png", image_file, "image/png")}
    upload_response = test_client.post("/upload", files=file_obj, headers=headers)
    upload_response_json = upload_response.json()

    # Add supply list UUID in class variable to get it deleted
    pytest.supply_ids.append(upload_response_json["school_supply_id"])

    # Check if there is a list of booleans that matches number of items
    metadata_sess = MongoSessionRegular(collection="school_supplies_metadata")
    data_sess = MongoSessionRegular(collection="school_supplies")
    supply_metadata = metadata_sess.find_json({"email": pytest.login_info["username"]})
    supply_data = data_sess.find_json({"id": supply_metadata["school_supply_ids"][0]})
    assert len(supply_metadata["school_supply_checklist"][0]) == len(supply_data["list_of_supplies"])
Пример #8
0
def step_impl(context, error_message):
    print(context.response_download_json["detail"])
    assert context.response_download_json["detail"] == error_message
    user_sess = MongoSessionRegular(collection='users')
    user_sess.delete_json({"email": "*****@*****.**"})
Пример #9
0
def step_impl(context):
    for supply_list in context.response_download_json["supply_lists"]:
        for item in supply_list["list_of_supplies"]:
            assert len(item) == 2
        # print(item)
    metadata_sess = MongoSessionRegular(collection="school_supplies_metadata")
    data_sess = MongoSessionRegular(collection="school_supplies")
    metadata_sess.delete_json({"email": context.login['username']})
    data_sess.remove_supply_list(UUID(context.school_supply_id))
    user_sess = MongoSessionRegular(collection='users')
    user_sess.delete_json({"email": "*****@*****.**"})
Пример #10
0
def step_impl(context):
    context.mongo_sesh = MongoSessionRegular(collection='users')
    user = context.mongo_sesh.find_json(
        {"email": "*****@*****.**"})

    assert user is not None
Пример #11
0
def step_impl(context):
    assert context.response_edit_json["Message"] == "Success"
    metadata_sess = MongoSessionRegular(collection="school_supplies_metadata")
    data_sess = MongoSessionRegular(collection="school_supplies")
    metadata_sess.delete_json({"email": context.login['username']})
    data_sess.remove_supply_list(UUID(context.response_edit_json['school_supply_id']))
Пример #12
0
def step_impl(context, error_message):
    assert context.response_edit_error_json["detail"][0]["msg"] == error_message
    # Delete user
    user_sess = MongoSessionRegular(collection='users')
    user_sess.delete_json({"email": context.login["username"]})
Пример #13
0
def step_impl(context):
    assert context.response_edit_json["Message"] == "Success"
    assert context.response_edit_json["Email"] == context.login["username"]
    # Delete user
    user_sess = MongoSessionRegular(collection='users')
    user_sess.delete_json({"email": context.login["username"]})
Пример #14
0
from fastapi.testclient import TestClient
from db.mongo import MongoSessionRegular

import random
import json
from api.main import app

client = TestClient(app)
mongo_sesh = MongoSessionRegular(collection='users')


# test registering a new user, loggin them in, and then loggiing out the account PERMANENTLY. also
# Confirms account can no longer log in and db contains is_active=false
def test_logout_user():
    # rando = random.randint(1, 50000000)
    email = "*****@*****.**"
    password = "******"
    if mongo_sesh.find_json({"email": email}) is not None:
        mongo_sesh.delete_json({"email": email})
    # add user in case not existing
    response = client.post("/register",
                           json={
                               "email": email,
                               "password": password
                           })

    # validate user email input
    assert response.json() != {
        "detail": [{
            "loc": ["body", "email"],
            "msg": "value is not a valid email address",
Пример #15
0
from db.mongo import MongoSession, MongoSessionRegular
from fastapi import APIRouter, Depends, File, HTTPException, UploadFile
from model.supply_list import SupplyList
from model.user import User
from model.supply_list import SupplyListPrivilege
from pdf2image import convert_from_bytes
from PIL import Image
from pydantic import BaseModel

import uuid
from api.auth import fastapi_users

router = APIRouter()

# Database for school supply list
supplies_metadata_db = MongoSessionRegular(
    collection="school_supplies_metadata")
mongo_db_supplies = MongoSessionRegular(collection="school_supplies")
mongo_db_users = MongoSessionRegular(collection="users")


@router.post("/upload")
async def create_uploaded_file(
        user: User = Depends(fastapi_users.get_current_active_user),
        file: UploadFile = File(...),
):
    # Retrieve school supplies
    if file.content_type == "image/jpeg" or file.content_type == "image/png":
        supply_str = pytesseract.image_to_string(Image.open(file.file))
        supply_arr = supply_str.splitlines()
    elif file.content_type == "application/pdf":  # Will need Poppler
        image_obj = convert_from_bytes(file.file.read())
Пример #16
0
from db.mongo import MongoSession, MongoSessionRegular
from fastapi_users import FastAPIUsers
from fastapi_users.db import MongoDBUserDatabase
from fastapi_users.password import get_password_hash
from model.user import User, UserCreate, UserDB, UserUpdate
from fastapi import APIRouter, Depends, HTTPException
from api.config import jwt_authentication
from model.user import User

router2 = APIRouter()

# Database for users
mongo_db_users = MongoSession(collection="users")
mongo_db_users_reg = MongoSessionRegular(collection="users")
user_db = MongoDBUserDatabase(UserDB, mongo_db_users.collection)

# User Management
fastapi_users = FastAPIUsers(
    user_db,
    [jwt_authentication],
    User,
    UserCreate,
    UserUpdate,
    UserDB,
)


@router2.post("/logout")
async def logout_user(user: User = Depends(fastapi_users.get_current_active_user)):
    result = mongo_db_users_reg.logout_active_user(user)
    return result
Пример #17
0
from fastapi.testclient import TestClient
from db.mongo import MongoSessionRegular

import random
import json
from api.main import app
import uuid
client = TestClient(app)
mongo_sesh = MongoSessionRegular(collection='users')
metadata_sess = MongoSessionRegular(collection="school_supplies_metadata")
data_sess = MongoSessionRegular(collection="school_supplies")
# tests the functionality of the delete
def test_delete_list_in_user():
    #this is the relevant creation of the id, and attempt to remove it after
    uuid_temp = uuid.uuid4()
    metadata_sess.upsert_supply_list_metadata_email("*****@*****.**", uuid_temp)
    # stringer = str(uuid_temp)
    #trying to remove uuid
    # delete_list_response = client.delete("/List", data={"supply_list_id" : uuid_temp, "email": "*****@*****.**"})
    delete_list_response = client.delete("/List?supply_list_id=" + str(uuid_temp) + "&email=myemail%40gmail.com")
    assert json.loads(delete_list_response.content)["Message"] == "Success, id has been removed"
    assert delete_list_response.status_code == 200
    print('done')



# def test_logout_non-existing_user():