def setUp(self): self.user_application_service = UserApplicationService()
class UserApplicationServiceTestCase(TestCase): def setUp(self): self.user_application_service = UserApplicationService() def test_register_when_no_vehicle_then_create_user_without_vehicle(self): EMAIL = '*****@*****.**' PASSWORD = 1234 USER_TYPE = "rider" CAR_TYPE = 'benz' PLATE_NO = None result = self.user_application_service.register(email=EMAIL, password=PASSWORD, user_type=USER_TYPE, car_type=CAR_TYPE, plate_no=PLATE_NO) self.assertEqual(result['email'], EMAIL) self.assertEqual(result['vehicle'], None) def test_register_when_vehicle_provided_then_create_with_vehicle(self): EMAIL = '*****@*****.**' PASSWORD = 1234 CAR_TYPE = 'benz' USER_TYPE = "driver" PLATE_NO = '1234가' result = self.user_application_service.register(email=EMAIL, password=PASSWORD, user_type=USER_TYPE, car_type=CAR_TYPE, plate_no=PLATE_NO) self.assertEqual(result['email'], EMAIL) self.assertEqual(result['vehicle']['car_type'], CAR_TYPE) self.assertEqual(result['vehicle']['plate_no'], PLATE_NO) def test_login(self): EMAIL = '*****@*****.**' PASSWORD = 1234 CAR_TYPE = 'benz' USER_TYPE = "driver" PLATE_NO = '1234가' user1 = self.user_application_service.register(email=EMAIL, password=PASSWORD, user_type=USER_TYPE, car_type=CAR_TYPE, plate_no=PLATE_NO) self.user_application_service.login(user_id=user1['id']) EMAIL = '*****@*****.**' PASSWORD = 12345 USER_TYPE = "rider" user2 = self.user_application_service.register(email=EMAIL, password=PASSWORD, user_type=USER_TYPE, car_type=None, plate_no=None) self.user_application_service.login(user_id=user2['id']) with self.assertRaises(ValueError): EMAIL = '*****@*****.**' PASSWORD = 12345 USER_TYPE = "wrong type" self.user_application_service.register(email=EMAIL, password=PASSWORD, user_type=USER_TYPE, car_type=None, plate_no=None) def test_login_correct(self): EMAIL = "*****@*****.**" PASSWORD = 1234 USER_TYPE = "rider" user1 = self.user_application_service.register(email=EMAIL, password=PASSWORD, user_type=USER_TYPE, car_type='', plate_no='') result = self.user_application_service.login(user_id=user1['id']) self.assertEqual(result['status'], 'IDLE') self.assertEqual(result['group'], None) self.assertEqual(result['user']['id'], user1['id']) self.assertEqual(result['user']['email'], EMAIL) self.assertEqual(result['user']['user_type'], USER_TYPE) EMAIL = "*****@*****.**" PASSWORD = 1234 USER_TYPE = "driver" CAR_TYPE = "BMW" PLATE_NO = "02로 7608" user2 = self.user_application_service.register(email=EMAIL, password=PASSWORD, user_type=USER_TYPE, car_type=CAR_TYPE, plate_no=PLATE_NO) result = self.user_application_service.login(user_id=user2['id']) self.assertEqual(result['status'], 'IDLE') self.assertEqual(result['group'], None) self.assertEqual(result['user']['id'], user2['id']) self.assertEqual(result['user']['email'], EMAIL) self.assertEqual(result['user']['user_type'], USER_TYPE) self.assertEqual(result['user']['vehicle']['car_type'], CAR_TYPE) self.assertEqual(result['user']['vehicle']['plate_no'], PLATE_NO) def test_logout(self): EMAIL = '*****@*****.**' PASSWORD = 1234 CAR_TYPE = 'benz' USER_TYPE = "driver" PLATE_NO = '1234가' user = self.user_application_service.register(email=EMAIL, password=PASSWORD, user_type=USER_TYPE, car_type=CAR_TYPE, plate_no=PLATE_NO) self.user_application_service.login(user_id=user['id']) self.user_application_service.logout(user_id=user['id']) def test_create_rider_if_not_exist_when_rider_exist(self): user = get_user_model().objects.create_user( id=123, email='*****@*****.**', password='******', user_type='rider') rider = Rider.objects.create(user_id=user.id, status="IDLE") result = self.user_application_service._create_rider_if_not_exist( user.id) self.assertEqual(result['user']['id'], user.id) self.assertEqual(result['id'], rider.id) def test_create_rider_or_driver_if_not_exist_when_user_type_is_rider(self): user = get_user_model().objects.create_user( id=123, email='*****@*****.**', password='******', user_type='rider') result = self.user_application_service._create_rider_or_driver_if_not_exist( user_type='rider', user_id=user.id) self.assertEqual(result['user']['id'], user.id) def test_create_rider_or_driver_if_not_exist_when_user_type_is_driver( self): user = get_user_model().objects.create_user( id=123, email='*****@*****.**', password='******', user_type='driver') result = self.user_application_service._create_rider_or_driver_if_not_exist( user_type='driver', user_id=user.id) self.assertEqual(result['user']['id'], user.id) def test_create_rider_or_driver_if_not_exist_return_value_error(self): result = self.user_application_service._create_rider_or_driver_if_not_exist( user_type='something_wrong', user_id=1) self.assertTrue(type(result) is ValueError)
class UserApplicationServiceTestCase(TestCase): def setUp(self): self.user_application_service = UserApplicationService() def test_register_when_no_vehicle_then_create_user_without_vehicle(self): EMAIL = '*****@*****.**' PASSWORD = 1234 USER_TYPE = "RIDER" CAR_TYPE = 'benz' PLATE = None result = self.user_application_service.register(email=EMAIL, password=PASSWORD, user_type=USER_TYPE, car_type=CAR_TYPE, plate=PLATE) self.assertEqual(result.email, EMAIL) self.assertEqual(result.vehicle, None) def test_register_when_vehicle_provided_then_create_with_vehicle(self): EMAIL = '*****@*****.**' PASSWORD = 1234 CAR_TYPE = 'benz' USER_TYPE = "DRIVER" PLATE = '1234가' result = self.user_application_service.register(email=EMAIL, password=PASSWORD, user_type=USER_TYPE, car_type=CAR_TYPE, plate=PLATE) self.assertEqual(result.email, EMAIL) self.assertEqual(result.vehicle.car_type, CAR_TYPE) self.assertEqual(result.vehicle.plate, PLATE) def test_login(self): EMAIL = '*****@*****.**' PASSWORD = 1234 CAR_TYPE = 'benz' USER_TYPE = "DRIVER" PLATE = '1234가' self.user_application_service.register(email=EMAIL, password=PASSWORD, user_type=USER_TYPE, car_type=CAR_TYPE, plate=PLATE) self.user_application_service.login(user_id=1) EMAIL = '*****@*****.**' PASSWORD = 12345 USER_TYPE = "RIDER" self.user_application_service.register(email=EMAIL, password=PASSWORD, user_type=USER_TYPE, car_type=None, plate=None) self.user_application_service.login(user_id=2) EMAIL = '*****@*****.**' PASSWORD = 12345 USER_TYPE = "wrong type" self.user_application_service.register(email=EMAIL, password=PASSWORD, user_type=USER_TYPE, car_type=None, plate=None) result = self.user_application_service.login(user_id=3) self.assertEqual(result, ValueError) def test_logout(self): EMAIL = '*****@*****.**' PASSWORD = 1234 CAR_TYPE = 'benz' USER_TYPE = "DRIVER" PLATE = '1234가' self.user_application_service.register(email=EMAIL, password=PASSWORD, user_type=USER_TYPE, car_type=CAR_TYPE, plate=PLATE) self.user_application_service.login(user_id=1) self.user_application_service.logout(user_id=1)
class Command(BaseCommand): user_application_service = UserApplicationService() user_point_update_command_handler = UserPointUpdateCommandHandler( user_application_service=user_application_service) user_create_command_handler = UserCreateCommandHandler( user_application_service=user_application_service) user_login_event_handler = UserLoginEventHandler( user_application_service=user_application_service) user_logout_event_handler = UserLogoutEventHandler( user_application_service=user_application_service) subscriber = RedisMessageSubscriber() rpc_server = RedisRpcServer() def handle(self, *args, **options): loop = asyncio.get_event_loop() register_signal_handler(loop, shutdown_process) async def main(): """ create subscription tasks """ user_create_subscription_task = asyncio.create_task( self.subscriber.subscribe_message( topic=USER_CREATE_COMMAND, message_handler=self.user_create_command_handler)) user_create_rpc_task = asyncio.create_task( self.rpc_server.register_handler( topic=USER_CREATE_COMMAND, request_handler=self.user_create_command_handler)) user_point_update_subscription_task = asyncio.create_task( self.subscriber.subscribe_message( topic=USER_POINT_UPDATE_COMMAND, message_handler=self.user_point_update_command_handler)) user_point_update_rpc_task = asyncio.create_task( self.rpc_server.register_handler( topic=USER_POINT_UPDATE_COMMAND, request_handler=self.user_point_update_command_handler)) user_login_subscription_task = asyncio.create_task( self.subscriber.subscribe_message( topic=USER_LOGIN_EVENT, message_handler=self.user_login_event_handler)) user_login_rpc_task = asyncio.create_task( self.rpc_server.register_handler( topic=USER_LOGIN_EVENT, request_handler=self.user_login_event_handler)) user_logout_subscription_task = asyncio.create_task( self.subscriber.subscribe_message( topic=USER_LOGOUT_EVENT, message_handler=self.user_logout_event_handler)) user_logout_rpc_task = asyncio.create_task( self.rpc_server.register_handler( topic=USER_LOGOUT_EVENT, request_handler=self.user_logout_event_handler)) """ wait until application stop """ await asyncio.gather( user_create_subscription_task, user_create_rpc_task, user_point_update_subscription_task, user_point_update_rpc_task, user_login_subscription_task, user_login_rpc_task, user_logout_subscription_task, user_logout_rpc_task, ) loop.create_task(main()) loop.run_forever()