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))
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"])
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"])
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)
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)
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)
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)
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)
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)
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)