Exemplo n.º 1
0
 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']
    }
Exemplo n.º 6
0
    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)
Exemplo n.º 8
0
    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'])
Exemplo n.º 9
0
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
Exemplo n.º 10
0
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