コード例 #1
0
ファイル: test_users.py プロジェクト: shairez/asgard-api
    async def test_update_user_update_all_fields(self):
        expected_new_name = "Novo Nome"
        expected_new_email = "*****@*****.**"

        new_user = User(**USER_WITH_MULTIPLE_ACCOUNTS_DICT)
        new_user.name = expected_new_name
        new_user.email = expected_new_email

        resp = await self.client.patch(
            f"/users/{USER_WITH_MULTIPLE_ACCOUNTS_ID}",
            headers={
                "Authorization":
                f"Token {USER_WITH_MULTIPLE_ACCOUNTS_AUTH_KEY}"
            },
            json=new_user.dict(),
        )
        self.assertEqual(HTTPStatus.ACCEPTED, resp.status)
        user_data = await resp.json()

        self.assertEqual(UserResource(user=new_user).dict(), user_data)

        resp = await self.client.get(
            f"/users/{USER_WITH_MULTIPLE_ACCOUNTS_ID}",
            headers={
                "Authorization":
                f"Token {USER_WITH_MULTIPLE_ACCOUNTS_AUTH_KEY}"
            },
        )
        updated_user_data = await resp.json()
        self.assertEqual(UserResource(user=new_user).dict(), updated_user_data)
コード例 #2
0
ファイル: test_jwt.py プロジェクト: shairez/asgard-api
    async def test_encode_new_token(self):
        """
        Dado um objeto User e um Account, retorna um novo
        token JWT contendo as informações necessárias
        """

        user = User(**USER_WITH_ONE_ACCOUNT_DICT)
        account = Account(**ACCOUNT_DEV_DICT)
        token = jwt_encode(user, account)

        decoded_token = jwt.decode(token, key=SECRET_KEY)
        self.assertDictEqual(user.dict(), decoded_token["user"])
        self.assertDictEqual(account.dict(), decoded_token["current_account"])
コード例 #3
0
    async def test_create_user_all_OK(self):
        user = User(name="New User", email="*****@*****.**")
        resp = await self.client.post(
            f"/users",
            headers={
                "Authorization": f"Token {USER_WITH_MULTIPLE_ACCOUNTS_AUTH_KEY}"
            },
            json=user.dict(),
        )
        self.assertEqual(201, resp.status)
        user_data = await resp.json()

        expected_result = UserResource(user=user).dict()
        expected_result["user"]["id"] = ANY
        self.assertEqual(expected_result, user_data)
コード例 #4
0
ファイル: test_users.py プロジェクト: shairez/asgard-api
    async def test_update_user_cant_update_another_user(self):
        """
        Dado um request 
          PATCH /users/42
          {"id": 50, "name": "Nome", "email": "email"}

        Não podemos, no final das contas ter atualizado o user id=50. Temos que atualizar o user id=42
        """
        expected_new_name = "Novo Nome"
        expected_new_email = "*****@*****.**"

        new_user = User(**USER_WITH_MULTIPLE_ACCOUNTS_DICT)
        new_user.name = expected_new_name
        new_user.email = expected_new_email
        new_user.id = USER_WITH_NO_ACCOUNTS_ID

        resp = await self.client.patch(
            f"/users/{USER_WITH_MULTIPLE_ACCOUNTS_ID}",
            headers={
                "Authorization":
                f"Token {USER_WITH_MULTIPLE_ACCOUNTS_AUTH_KEY}"
            },
            json=new_user.dict(),
        )
        self.assertEqual(HTTPStatus.ACCEPTED, resp.status)
        user_data = await resp.json()

        expected_returned_user = User(**USER_WITH_MULTIPLE_ACCOUNTS_DICT)
        expected_returned_user.name = expected_new_name
        expected_returned_user.email = expected_new_email
        self.assertEqual(
            UserResource(user=expected_returned_user).dict(), user_data)

        resp = await self.client.get(
            f"/users/{USER_WITH_NO_ACCOUNTS_ID}",
            headers={
                "Authorization":
                f"Token {USER_WITH_MULTIPLE_ACCOUNTS_AUTH_KEY}"
            },
        )
        updated_user_data = await resp.json()
        self.assertEqual(
            UserResource(user=User(**USER_WITH_NO_ACCOUNTS_DICT)).dict(),
            updated_user_data,
        )
コード例 #5
0
ファイル: test_users.py プロジェクト: shairez/asgard-api
 async def test_create_user_duplicate_email(self):
     user = User(name="New User", email=USER_WITH_MULTIPLE_ACCOUNTS_EMAIL)
     resp = await self.client.post(
         f"/users",
         headers={
             "Authorization":
             f"Token {USER_WITH_MULTIPLE_ACCOUNTS_AUTH_KEY}"
         },
         json=user.dict(),
     )
     self.assertEqual(422, resp.status)
     resp_data = await resp.json()
     expected_error_message = """ERROR:  duplicate key value violates unique constraint "user_tx_email_key"\nDETAIL:  Key (tx_email)=([email protected]) already exists.\n"""
     self.assertEqual(
         ErrorResource(errors=[ErrorDetail(
             msg=expected_error_message)]).dict(),
         resp_data,
     )
コード例 #6
0
def jwt_encode(user: User, account: Account) -> bytes:
    """
    Encodes a new JWT Token
    https://tools.ietf.org/html/rfc7519#section-4.1.5
    """
    issued_at = datetime.utcnow()
    expiration_time = issued_at + timedelta(days=7)
    not_before = issued_at + timedelta(seconds=0)
    return jwt.encode(
        {
            "exp": expiration_time,
            "iat": issued_at,
            "nbf": not_before,
            "user": user.dict(),
            "current_account": account.dict(),
        },
        SECRET_KEY,
    )