def initial_data(self):
     self.team_owner = User.create(name='test_activity')
     self.team = Team.create(name='club_test_activity',
                             owner_id=self.team_owner.id)
     self.user = self.creator = User.create(name='activity_creator')
     self.activity = Activity.create(team=self.team,
                                     creator=self.creator,
                                     price='10',
                                     vip_price='8',
                                     leader=self.creator,
                                     title='just a test',
                                     description='description',
                                     need_nickname=True,
                                     join_end="3000-12-30 22:59:59",
                                     max_members=10,
                                     start_time='3000-01-01 00:00:01',
                                     end_time='3000-12-31 23:59:59')
     self.activity_2 = Activity.create(team=self.team,
                                       creator=self.creator,
                                       price='10',
                                       vip_price='8',
                                       leader=self.creator,
                                       title='just a test',
                                       description='description',
                                       need_nickname=True,
                                       join_end="3000-12-30 22:59:59",
                                       max_members=10,
                                       start_time='3000-01-01 00:00:01',
                                       end_time='3000-12-31 23:59:59')
     self.activity_member = ActivityMember.create(
         activity=self.activity,
         user=self.user,
         total_fee='0.01',
         nickname="leave activities",
         payment_method=TeamOrder.OrderPaymentMethod.WXPAY.value,
         payment_state=TeamOrder.OrderState.TRADE_BUYER_PAID,
     )
     TeamMemberService.new_order(team=self.team,
                                 activity_id=self.activity.id,
                                 user=self.user,
                                 order_type=TeamOrder.OrderType.ACTIVITY,
                                 payment_method='wxpay',
                                 total_fee=self.activity.price,
                                 payment_fee=self.activity.price,
                                 title='TestLeave')
     TeamOrder.update(state=TeamOrder.OrderState.TRADE_BUYER_PAID)\
         .where(TeamOrder.activity_id == self.activity.id,
                TeamOrder.user == self.user)\
         .execute()
예제 #2
0
    def initial_data(self):
        self.team_owner = User.create(name='test_activity')
        self.team = Team.create(name='club_test_activity',
                                owner_id=self.team_owner.id)
        self.user = self.creator = User.create(name='activity_creator')
        self.activity = Activity.create(team=self.team,
                                        creator=self.creator,
                                        price='10', vip_price='8',
                                        leader=self.creator,
                                        title='just a test',
                                        description='description',
                                        start_time='3000-01-01 00:00:01',
                                        end_time='3000-12-31 23:59:59')

        self.order = OrderService.new_order(10, self.team, self.user,
                                            TeamOrder.OrderType.ACTIVITY,
                                            TeamOrder.OrderPaymentMethod.WXPAY,
                                            self.activity.id,
                                            title="UserOrderTest"
                                            )

        self.activity.add_member(self.user.id,
                                 users_count=1,
                                 price=10,
                                 free_times=0,
                                 total_fee=10,
                                 order_id=self.order.id,
                                 order_no=self.order.order_no,
                                 payment_method=TeamOrder.OrderPaymentMethod.WXPAY,
                                 payment_state=TeamOrder.OrderState.TRADE_BUYER_PAID,
                                 state=TeamMember.TeamMemberState.normal)
예제 #3
0
    def post(self):
        form = self.validated_arguments
        team = Team.get(id=form.pop("team_id"))
        self.has_create_permission(team)

        fields = copy.copy(form)

        # 如果有地址信息, 获取 GPS 信息
        if "city" in form and "address" in form:
            logging.debug("有 `city` 和 `address` 开始调用远程接口获取 GPS 信息")
            geocode = yield self.get_geocode(city=form["city"],
                                             address=form["address"])
            logging.debug("获取到 geocode: {0}".format(geocode))
            if geocode.get("geocodes", []):
                location = geocode['geocodes'][0]['location'].split(",")
                fields["lat"] = location[1]
                fields["lng"] = location[0]
                fields["geohash "] = geohash.encode(float(location[1]),
                                                    float(location[0]))

        # TODO: 处理循环类型
        if "repeat_type" in form:
            if form["repeat_type"] == "week":
                fields["week_day"] = form["start_time"].weekday() + 1

            elif form["repeat_type"] == "month":
                fields["month_day"] = form["start_time"].day

        activity = Activity.create(team=team, creator=self.current_user,
                                   leader=self.current_user,
                                   **fields)
        self.set_status(201)
        self.write(ActivitySerializer(instance=activity).data)
    def test_over_left_count_activity(self):
        payment = Activity.PaymentType.ONLINE_PAY.value
        activity = Activity.create(team=self.team,
                                   creator=self.creator,
                                   leader=self.creator,
                                   price='10',
                                   vip_price='10',
                                   payment_type=payment,
                                   title='no online pay',
                                   description='on need online pay',
                                   state=Activity.ActivityState.opening.value,
                                   join_end="3000-12-30 22:59:59",
                                   allow_agents=10,
                                   start_time='3000-01-01 00:00:01',
                                   end_time='3000-12-31 23:59:59',
                                   members_count=2,
                                   max_members=10)

        body = {
            "payment": "wxpay",
            "nickname": "Nick name",
            "users_count": 11,
        }
        url = self.JOIN_ACTIVITY.format(activity_id=activity.id)
        self.auth_user = User.create(name='closed activity')
        response = self.fetch(url,
                              method="POST",
                              body=json.dumps(body),
                              params={'team_id': self.team.id},
                              headers={"Content-Type": "application/json"})

        self.assertEqual(400, response.code, response.body)
        result = json.loads(response.body.decode())
        error = result["error"]
        self.assertEqual("该活动只有 8 名额了", error, error)
    def test_stoped_activity(self):
        """活动已报名截止"""
        payment = Activity.PaymentType.ONLINE_PAY.value
        activity = Activity.create(
            team=self.team,
            creator=self.creator,
            leader=self.creator,
            price='10',
            vip_price='10',
            start_time='2000-01-01 00:00:01',
            end_time='3000-12-31 23:59:59',
            join_end="3000-12-30 22:59:59",
            payment_type=payment,
            title='no online pay',
            description='on need online pay',
            state=Activity.ActivityState.opening.value,
        )

        body = {"payment": "wxpay", "nickname": "Nick name"}
        url = self.JOIN_ACTIVITY.format(activity_id=activity.id)
        self.auth_user = User.create(name='closed activity')
        response = self.fetch(url,
                              method="POST",
                              body=json.dumps(body),
                              params={'team_id': self.team.id})

        self.assertEqual(400, response.code, response.body)
        result = json.loads(response.body.decode())
        error = result["error"]
        self.assertEqual("活动已报名截止", error, error)
예제 #6
0
 def initial_data(self):
     self.team_owner = User.create(name='test_activity')
     self.team = Team.create(name='club_test_activity',
                             owner_id=self.team_owner.id)
     self.user = self.creator = User.create(name='activity_creator')
     self.activity = Activity.create(team=self.team,
                                     creator=self.creator,
                                     price='10',
                                     vip_price='8',
                                     leader=self.creator,
                                     title='just a test',
                                     description='description')
 def initial_data(self):
     self.team_owner = User.create(name='test_activity')
     self.team = Team.create(name='club_test_activity',
                             owner_id=self.team_owner.id)
     self.user = self.creator = User.create(name='activity_creator')
     self.activity = Activity.create(team=self.team,
                                     creator=self.creator,
                                     price='10',
                                     vip_price='8',
                                     leader=self.creator,
                                     title='just a test',
                                     description='description',
                                     start_time='3000-01-01 00:00:01',
                                     end_time='3000-12-31 23:59:59',
                                     max_members=10)
    def create_free_activity(self, payment_type):
        """
        创建不同支付类型的免费活动
        """
        activity = Activity.create(team=self.team,
                                   creator=self.creator,
                                   price='0',
                                   vip_price='0',
                                   leader=self.creator,
                                   payment_type=payment_type,
                                   title='no online pay',
                                   description='on need online pay',
                                   start_time='3000-01-01 00:00:01',
                                   end_time='3016-12-31 23:59:59',
                                   join_end="3016-12-30 22:59:59",
                                   max_members=100)

        return activity
    def test_cash_pay(self):
        activity = Activity.create(team=self.team,
                                   creator=self.creator,
                                   price='10',
                                   vip_price='8',
                                   leader=self.creator,
                                   payment_type=Activity.PaymentType.CASH_PAY,
                                   title='no online pay',
                                   description='on need online pay',
                                   start_time='3000-01-01 00:00:01',
                                   end_time='3000-12-31 23:59:59',
                                   join_end="4000-01-01 22:59:59",
                                   max_members=10)

        url = self.JOIN_ACTIVITY.format(activity_id=activity.id)
        body = {
            "payment": TeamOrder.OrderPaymentMethod.WXPAY.value,
            "nickname": "Nick name"
        }
        self.auth_user = User.create(name='no need online pay')
        response = self.fetch(url,
                              method='POST',
                              body=json.dumps(body),
                              params={'team_id': self.team.id})
        result = json.loads(response.body.decode())
        expect = {
            "status": "ok",
            "state": ActivityMember.ActivityMemberState.confirmed.value,
            "payment_state": TeamOrder.OrderState.WAIT_BUYER_PAY.value,
            "order_no": ""
        }
        self.assertDictEqual(expect, result, result)

        self.assertEqual(200, response.code, response.body)
        with self.assertRaises(TeamOrder.DoesNotExist):
            TeamOrder.get(
                user=self.auth_user,
                activity_id=activity.id,
            )
        member = ActivityMember.get(activity=activity, user=self.auth_user)

        # 现在支付, 直接确认
        self.assertEqual(ActivityMember.ActivityMemberState.confirmed.value,
                         member.state, member.state)
예제 #10
0
    def initial_data(self):
        self.leader = User.create(name="imleader")
        self.team = Team.create(name="test_finish_activity",
                                owner_id=self.leader.id)
        self.activity = Activity.create(
            team=self.team,
            creator=self.leader,
            leader=self.leader,
            title="test_finish_activity",
            description="test_stoped_activity",
            price=Decimal(15),
            max_members=30,
            start_time=datetime.datetime.now() - datetime.timedelta(hours=2),
            end_time=datetime.datetime.now() - datetime.timedelta(hours=1),
            payment_type=0,
            repeat_type="weekly",
            state=Activity.ActivityState.opening)

        self.online_paid_amount = 0

        for i in range(0, 5):
            user = User.create(name="test_%s" % i)
            order = TeamOrder.create(
                team=self.team,
                user=user,
                order_type=0,
                activity_id=self.activity.id,
                title="test_finish",
                order_no=TeamOrder.get_new_order_no(),
                credit_fee=0,
                total_fee=self.activity.price,
                payment_fee=self.activity.price,
                payment_method="wxpay",
                state=TeamOrder.OrderState.TRADE_BUYER_PAID,
                paid=self.activity.start_time,
                created=self.activity.start_time,
                finished=self.activity.start_time)
            ActivityMember.create(
                team=self.team,
                activity=self.activity,
                user=user,
                price=self.activity.price,
                users_count=1,
                total_fee=self.activity.price,
                payment_state=order.state,
                payment_method="wxpay",
                order_id=order.id,
                order_no=order.order_no,
                state=ActivityMember.ActivityMemberState.confirmed,
                free_times=0,
            )

            self.online_paid_amount += self.activity.price

        for i in range(0, 3):
            user = User.create(name="test2_%s" % i)
            order = TeamOrder.create(team=self.team,
                                     user=user,
                                     order_type=0,
                                     activity_id=self.activity.id,
                                     title="test_finish",
                                     order_no=TeamOrder.get_new_order_no(),
                                     credit_fee=0,
                                     total_fee=self.activity.price,
                                     payment_fee=self.activity.price,
                                     payment_method="wxpay",
                                     state=TeamOrder.OrderState.WAIT_BUYER_PAY,
                                     created=self.activity.start_time,
                                     finished=self.activity.start_time)
            ActivityMember.create(
                team=self.team,
                activity=self.activity,
                user=user,
                price=self.activity.price,
                users_count=1,
                total_fee=self.activity.price,
                payment_state=order.state,
                payment_method="wxpay",
                order_id=order.id,
                order_no=order.order_no,
                state=ActivityMember.ActivityMemberState.wait_confirm,
                free_times=0,
            )