Ejemplo n.º 1
0
    def test_register_twice(self):
        user = PostUser('NewUser', 'S3Cr3T')

        r = self._send_post_request('http://localhost:8000/user/register', payload=user.to_dict(), response_code=201)
        r = self._send_post_request('http://localhost:8000/user/register', payload=user.to_dict(), response_code=409)
        payload = r.json()

        self.assertEqual(payload["message"], "User '{}' already exists".format(user.nick))
Ejemplo n.º 2
0
    def test_create_user(self):
        user = PostUser('NewUser', 'S3Cr3T')

        r = self._send_post_request('http://localhost:8000/user/register', payload=user.to_dict(), response_code=201)

        self.cur.execute(""" SELECT COUNT(*) FROM users WHERE nick='NewUser' AND password='******' """)
        count = self.cur.fetchall()[0][0]
        self.assertEqual(count, 1)

        payload = r.json()
        self.assertEqual(payload["message"], "user registered successfuly")
        user = GetUser.from_dict(payload["user"])
Ejemplo n.º 3
0
    def test_quiz_taken(self):
        user = PostUser('NewUser', 'S3Cr3T')
        r = self._send_post_request('http://localhost:8000/user/register', payload=user.to_dict(), response_code=201)

        r = self._send_get_request('http://localhost:8000/user/{}/quiz_taken/1'.format(user.nick))

        payload = r.json()
        self.assertFalse(payload["taken"])

        r = self._send_post_request('http://localhost:8000/user/quiz_taken/1', payload=user.to_dict(), response_code=201)
        
        r = self._send_get_request('http://localhost:8000/user/{}/quiz_taken/1'.format(user.nick))

        payload = r.json()
        self.assertTrue(payload["taken"])
Ejemplo n.º 4
0
async def create_user(payload):
    user = PostUser.from_dict(payload)
    user_id = await insert_model_to_db(user)

    created_user = await select_model_from_db(GetUser, user_id)
    return json(body={
        "message": "user registered successfuly",
        "user": created_user.to_dict()
    },
                status=201)
Ejemplo n.º 5
0
async def logout_user(payload):
    user = PostUser.from_dict(payload)
    result = await DB.get_pool().fetchrow(
        """ SELECT 1 FROM users WHERE nick=$1 AND password=$2 """, user.nick,
        user.password)

    if result:
        return json(body={"message": "successful operation"}, status=200)
    return json(body={"message": "Invalid username/password supplied"},
                status=400)
Ejemplo n.º 6
0
    def test_insert_answers_for_quiz(self):
        user = PostUser('NewUser', 'S3Cr3T')
        r = self._send_post_request('http://localhost:8000/user/register', payload=user.to_dict(), response_code=201)

        # user_answers = UserAnswers({
            
        # })
        user_answers = {
            "key": "ultra-secret",
            1: {
                "answer_id": None, 
                "value": "yes"
            },
            2: {
                "answer_id": 2,
                "value": None
            }
        } 
        r = self._send_post_request('http://localhost:8000/quiz/1/answers', payload=user_answers, response_code=201)
Ejemplo n.º 7
0
    def test_logout_user(self):
        user = PostUser('NewUser', 'S3Cr3T')

        r = self._send_post_request('http://localhost:8000/user/register', payload=user.to_dict(), response_code=201)

        r = self._send_post_request('http://localhost:8000/user/logout', payload=user.to_dict(), response_code=200)

        not_existent_user = PostUser('IDontExist', 'Meneither')
        r = self._send_post_request('http://localhost:8000/user/logout', payload=not_existent_user.to_dict(), response_code=400)
Ejemplo n.º 8
0
async def insert_quiz_taken(payload, id: int):
    user = PostUser.from_dict(payload)
    result = await DB.get_pool().fetchrow(
        """ SELECT 1 FROM users WHERE nick=$1 AND password=$2 """, user.nick,
        user.password)

    if not result:
        return json(body={"message": "Invalid username/password supplied"},
                    status=400)

    await insert_user_quiz_taken(user, id)
    return json(body={"message": "quiz taken sucessfuly"}, status=201)
Ejemplo n.º 9
0
async def get_all_answers(payload, id):
    user = PostUser.from_dict(payload)
    result = await DB.get_pool().fetchrow(
        """ SELECT user_id, is_admin FROM users WHERE nick=$1 AND password=$2 """,
        user.nick, user.password)

    if not result:
        # created_user = await select_model_from_db(GetUser, result["user_id"])
        return json(body={"message": "Invalid username/password supplied"},
                    status=400)

    result = await DB.get_pool().fetchrow(
        """ SELECT quiz_id FROM quiz WHERE quiz_id=$1 """, id)
    if not result:
        # created_user = await select_model_from_db(GetUser, result["user_id"])
        return json(body={"message": "Invalid quiz_id supplied"}, status=404)

    user_ids = await DB.get_pool().fetch(
        """ SELECT user_id from user_quiz_taken WHERE quiz_id=$1""", id)
    user_ids = [row["user_id"] for row in user_ids]

    user_ids = random.sample(user_ids, len(user_ids))

    answers = await DB.get_pool().fetch(
        """ SELECT a.value, a.question_id,  qa.answer, qu.question FROM quiz_user_answers a left outer join quiz_answer qa on a.answer_id=qa.answer_id JOIN quiz_question qu on a.question_id=qu.question_id WHERE quiz_id=$1""",
        id)

    questions = {}
    for answer in answers:
        question_id = answer["question_id"]
        if question_id not in questions:
            questions[question_id] = {
                "question": answer["question"],
                "answers": [answer["answer"] or answer["value"]]
            }
        else:
            questions[question_id]["answers"].append(answer["answer"]
                                                     or answer["value"])

    for key in questions.keys():
        questions[key]["answers"] = random.sample(
            questions[key]["answers"], len(questions[key]["answers"]))

    return json(body={
        "message": "success",
        "user_ids": user_ids,
        "questions": questions
    },
                status=200)
Ejemplo n.º 10
0
async def login_user(payload):
    user = PostUser.from_dict(payload)
    result = await DB.get_pool().fetchrow(
        """ SELECT user_id, is_admin FROM users WHERE nick=$1 AND password=$2 """,
        user.nick, user.password)

    if result:
        # created_user = await select_model_from_db(GetUser, result["user_id"])
        return json(body={
            "message": "successful operation",
            "user": {
                "nick": user.nick,
                "user_id": result["user_id"],
                "is_admin": result["is_admin"]
            }
        },
                    status=200)
    return json(body={"message": "Invalid username/password supplied"},
                status=400)