import logging import unittest import grpc import jwt import e2e_base import protos.user.user_pb2 as user_pb2 import protos.user.user_pb2_grpc as user_pb2_grpc from settings import settings logger = logging.getLogger(__name__) class UserServiceEnd2EndTest(e2e_base.End2EndTestBase): def setUp(self): super().setUp() self.stub = user_pb2_grpc.UserStub(self.channel) def test_register_user_and_login(self): response = self.stub.Register(user_pb2.RegisterReq( username="me", password="pass", email="example@example.com")) response = self.stub.Login(user_pb2.LoginReq( username="me", password="pass")) decoded_payload = jwt.decode( response.jwt_token, settings.JWT_PUBLIC_KEY, algorithms=["RS256"]) assert "sub" in decoded_payload assert "exp" in decoded_payload def test_login_not_registered_user(self): with self.assertRaises(grpc.RpcError) as cm: self.stub.Login(user_pb2.LoginReq(username="you", password="pass")) self.assertEqual(cm.exception.code(), grpc.StatusCode.UNAUTHENTICATED) def test_register_user_wrong_email(self): with self.assertRaises(grpc.RpcError) as cm: self.stub.Register(user_pb2.RegisterReq( username="John", password="pass", email="wrong_email")) self.assertEqual(cm.exception.code(), grpc.StatusCode.INVALID_ARGUMENT)