def test_is_first_launch_today(self): """ ? last_launch_date == '' is True ? last_launch_date is not today ? else """ yesterday = (datetime.date.today() - datetime.timedelta(days=1)).isoformat() for _user in [ User(alexa_user_id='', attr={'last_launch_date': ''}), User(alexa_user_id='', attr={'last_launch_date': yesterday}) ]: with self.subTest(_user.is_first_launch_today): self.assertTrue(_user.is_first_launch_today, msg=f'{_user.last_launch_date}')
def has_chronus_ticket(user: User): amount: int = user.get_item('chronus_ticket') if not amount: return False if amount <= 0: return False return True
def lambda_handler(event, context): turn_times = event.get('turn_times') user = User(event['alexa_user_id'], event['dynamo_attr']) total_ticket_amount = event.get('total_ticket_amount', 0) node_key = event.get('node', 'launch') not_enough_gem = event.get('not_enough_gem') intent = event.get('intent') if intent == 'AMAZON.NoIntent': turn_times = 0 valid_intents = [ 'AMAZON.YesIntent', 'AMAZON.NoIntent', 'TurnIntent', 'TurnTimesIntent' ] if node_key in ['welcome', 'recommend_gatcha']: if intent not in valid_intents: return re_ask(node_key, turn_times) if node_key in ['result', 'gatcha']: if intent not in valid_intents: node_key = 'result' response = main(turn_times, node_key, user, total_ticket_amount, intent, not_enough_gem) return response
def lambda_handler(event, context): user = User(event['alexa_user_id'], event['dynamo_attr']) intent = event.get('intent') if intent not in [ 'AMAZON.YesIntent', 'AMAZON.NoIntent', 'BuyIntent', 'WhatHaveIGotIntent' ]: node = event.get('node') return nodes.re_ask(node) response = main(user) return response
def use_ticket(user: User, intent): if intent == 'AMAZON.NoIntent': return { 'type': 'end', 'set_should_end_session': True, 'original_texts': [{ 'text': 'TICKET_NOT_USED' }] } if not use_util.has_chronus_ticket(user): return { 'type': 'ganesha', 'node': 'launch', 'original_texts': [{ 'text': 'RECOMMEND_CHRONUS_TICKET' }] } use_util.use_ticket(user) # 昨日の活動報告を聞く action_parts = hero.action_report(user.destination, user.content) # 信者を獲得 user.increase_follower() # 昨日のお告げによって目的地へは行って帰ってきたのでクリア user.clear_destination() # 今日の目的地ガチャ user.set_event() destinations_choice = util.get_destinations_choice() return { 'type': 'oracle', 'user_attr': user.attr, 'original_texts': [{ 'text': 'EARTH_TIME_PASSED' }, { 'text': 'AUDIO_TIME_PASS' }, hero.message(), action_parts['original_texts'], hero.increase_follower(user.follower_increase), hero.total_followers(user.follower_total_amount), hero.ask_oracle(destinations_choice)], 'destinations_choice': destinations_choice, 'image_url': action_parts['image_url'], 'bg_image_url': action_parts['bg_image_url'] }
def test_attr(self): """ - user instance の 変数と idが違う - last_launch_dateが今日である - 全てのattributesが返却される """ _user = User(alexa_user_id='dummy_id', attr={}) self.assertEqual( _user.attr, { 'alexa_user_id': 'dummy_id', 'follower_total_amount': 0, 'last_launch_date': datetime.date.today().isoformat(), 'follower_increase': 0, 'destination': '', 'possible_events': '', 'paid_gem': 0, 'free_gem': 0, 'item_storage': {} }) self.assertNotEqual(_user.__dict__, _user.attr)
def use_ticket(user: User, use_amount=1): amount: int = user.get_item('chronus_ticket') if not amount: raise KeyError('chronus_ticket が user.item_storage に存在しません。') user.set_item('chronus_ticket', amount - use_amount)
def test_pay_gem(self): tests = [ { 'free_gem': 200, 'paid_gem': 0, 'payment_amount': 100, 'expected_result': (True, 0), 'remaining_free_gem': 100, 'remaining_paid_gem': 0 }, { 'free_gem': 200, 'paid_gem': 200, 'payment_amount': 100, 'expected_result': (True, 0), 'remaining_free_gem': 100, 'remaining_paid_gem': 200 }, { 'free_gem': 200, 'paid_gem': 200, 'payment_amount': 300, 'expected_result': (True, 0), 'remaining_free_gem': 0, 'remaining_paid_gem': 100 }, { 'free_gem': 200, 'paid_gem': 0, 'payment_amount': 300, 'expected_result': (False, 100), 'remaining_free_gem': 200, 'remaining_paid_gem': 0 }, { 'free_gem': 200, 'paid_gem': 200, 'payment_amount': 500, 'expected_result': (False, 100), 'remaining_free_gem': 200, 'remaining_paid_gem': 200 }, { 'free_gem': 0, 'paid_gem': 0, 'payment_amount': 100, 'expected_result': (False, 100), 'remaining_free_gem': 0, 'remaining_paid_gem': 0 }, { 'free_gem': 0, 'paid_gem': 200, 'payment_amount': 100, 'expected_result': (True, 0), 'remaining_free_gem': 0, 'remaining_paid_gem': 100 }, { 'free_gem': 0, 'paid_gem': 200, 'payment_amount': 30, 'expected_result': (False, 100), 'remaining_free_gem': 0, 'remaining_paid_gem': 200 }, { 'free_gem': 0, 'paid_gem': 200, 'payment_amount': 200, 'expected_result': (True, 0), 'remaining_free_gem': 0, 'remaining_paid_gem': 0 }, { 'free_gem': 200, 'paid_gem': 0, 'payment_amount': 200, 'expected_result': (True, 0), 'remaining_free_gem': 0, 'remaining_paid_gem': 0 }, ] for test in tests: _user = User(alexa_user_id='', attr=test) with self.subTest(test): self.assertEqual(_user.pay_gem(test['payment_amount']), test['expected_result']) self.assertEqual(_user.free_gem, test['remaining_free_gem']) self.assertEqual(_user.paid_gem, test['remaining_paid_gem'])
def lambda_handler(event, context): node = event.get('node', 'launch') user = User(event['alexa_user_id'], event['dynamo_attr']) intent = event.get('intent') response = main(node, user, intent) return response
def lambda_handler(event, context): user = User(event['alexa_user_id'], event['dynamo_attr']) node = event.get('node') intent = event.get('intent') response = main(user, node, intent) return response