Beispiel #1
0
    def test_user_has_deleted_activity_ticket(self):
        user_open_id = '921E1460FD86481C9087C7E2A9B7C6322967F79BDFC34ED2873EFC8106EDC38A'
        user_student_id = '2016012345'
        Ticket.create_ticket(student_id=user_student_id,
                             activity=self.activity_map['7e'])
        Ticket.create_ticket(  # others' ticket
            student_id='2018000000',
            activity=self.activity_map['7e'])
        Ticket.create_ticket(student_id=user_student_id,
                             activity=self.activity_map['8d'])
        Ticket.create_ticket(student_id=user_student_id,
                             activity=self.activity_map['21'])

        resp = self.wechat_server.send_click(
            CustomWeChatView.event_keys['get_ticket'], user_open_id)
        news = self.wechat_server.get_news(resp)
        self.assertEqual(
            len(news), 1,
            'deleted or saved activities\' tickets would not be included')
        self.assertEqual(
            news[0]['Title'],
            get_template('messages/ticket_title.html').render(
                {'activity': self.activity_map['7e']}))

        # restore
        Ticket.objects.all().delete()
Beispiel #2
0
    def handle(self):
        try:
            activity = self.get_activity()
            if activity.status != Activity.STATUS_PUBLISHED:
                raise LogicError('activity not published')
        except LogicError:
            return self.reply_text(self.get_message('activity_not_found'))

        if self.user.student_id == '':  # not bind yet
            return self.reply_text(self.get_message('id_not_bind'))

        old_ticket = Ticket.objects.filter(student_id=self.user.student_id,
                                           activity=activity,
                                           status=Ticket.STATUS_VALID).first()
        if old_ticket is not None:  # in fact, it is not snap up ticket, it is withdraw ticket
            return self.reply_single_news({
                'Title':
                self.get_message('withdraw_ticket_title'),
                'Description':
                self.get_message('withdraw_ticket_detail', activity=activity),
                'Url':
                self.url_ticket_detail(old_ticket),
                'PicUrl':
                activity.pic_url,
            })

        if self.get_current_time() < activity.book_start.timestamp(
        ):  # not start yet
            return self.reply_text(self.get_message('book_not_start'))

        if self.get_current_time() > activity.book_end.timestamp(
        ):  # end already
            return self.reply_text(self.get_message('book_end_already'))

        result = Activity.decrease_ticket_exclusive(activity.id)
        if not result:
            return self.reply_text(self.get_message('sold_out'))

        ticket = Ticket.create_ticket(student_id=self.user.student_id,
                                      activity=activity)
        return self.reply_single_news({
            'Title':
            self.get_message('book_ticket_success_title'),
            'Description':
            self.get_message('book_ticket_success_detail', activity=activity),
            'Url':
            self.url_ticket_detail(ticket),
            'PicUrl':
            activity.pic_url,
        })