Exemple #1
0
def test_login_redirect(monkeypatch):
    app = BetterTestApp(server.app)
    from chatty.util import fb
    mocktokencheck = MagicMock(return_value=({
        "app_id": "dummy",
        "user_id": 123456
    }, "tokentoken"))
    monkeypatch.setattr(fb, "login_redirect_token_check", mocktokencheck)
    monkeypatch.setattr(
        fb, "profile_detail",
        MagicMock(return_value={'age_range': {
            "min": 18,
            "max": 21
        }}))
    uidenc = uidcrypt.encryptuid("1878285869108664")
    s = Session()
    s.add(User(1878285869108664))
    s.commit()
    s.close()
    tok = tokener.gen_token("1878285869108664", tokener.NS_LOGIN)
    r = app.get("/bot/fb/signin_redirect?uid={}&state={}#tototoken".format(
        uidenc, tok))

    assert r.status_int == 200
    u = User.get("1878285869108664")
    assert u.id == "1878285869108664"
    assert u.fb_id == "123456"
    assert u.age_min == 18
    assert u.age_max == 21
    assert u.signup_date is not None
Exemple #2
0
def test_payments_invalid_menu(monkeypatch):
    app = BetterTestApp(server.app)
    from chatty.libs import slack
    import stripe
    slackpost = MagicMock()
    mock_customer_create = MagicMock(return_value=MagicMock(id="customerid"))
    mock_charge_create = MagicMock(return_value=MagicMock(id="chargeid"))
    monkeypatch.setattr(slack, "post", slackpost)
    monkeypatch.setattr(stripe.Customer, "create", mock_customer_create)
    monkeypatch.setattr(stripe.Charge, "create", mock_charge_create)
    User.create("1878285869108664", fb_id="testfbid")
    uidenc = uidcrypt.encryptuid("1878285869108664")
    tok = tokener.gen_token("1878285869108664", tokener.NS_PAYMENT_SECOND)
    r = app.post_json("/" + uidenc + "/payments?access_token=" + tok,
                      {"token": "stripetoken",
                       "points": 500, "price": 5, "currency": "USD"},
                      status=400)
    assert slackpost.call_count == 0
    assert mock_customer_create.call_count == 0
    assert mock_charge_create.call_count == 0
    assert User.get("1878285869108664").points == 20

    assert PaymentSource.get("testfbid") is None
    assert len(Payment.get("testfbid")) == 0
    assert r.status == "400 Bad Request"
    assert "expiration" in r.json['text']
Exemple #3
0
 def do_action(self, message, event=action.NO_SIGN_UP_IDLE_ACTION):
     uidc = uidcrypt.encryptuid(self.user.id)
     url = fb.FB_LOGIN_URL.format(
         state=tokener.gen_token(self.user.id, tokener.NS_LOGIN),
         uid=uidc)
     buttons = [
         fb.web_button(self._("LOG IN WITH FACEBOOK"), url, url, "compact")]
     self.send_btn(
         self._(
             "Please sign in with Facebook. We don't post anything to Facebook."
         ),
         buttons, event)
     self.user.version = "2.0"
Exemple #4
0
def settings(uidenc):
    uid = uidcrypt.decryptuid(uidenc)
    settings = bot.get_settings(uid)
    languages = [Lang(code=k, name=v, checked=(k in settings['languages']))
                 for k, v in
                 filter(lambda (k1, v1): k1 in config.ENABLED_LANGUAGES,
                        bot.get_language())]
    languages.sort(key=lambda x: x.name)
    userc = UserContext.get(uid)
    return dict(settings=settings,
                languages=languages,
                buy_points_url=fb.PAYMENT_LOGIN_URL.format(
                    uid=uidenc,
                    state=tokener.gen_token(uid, tokener.NS_PAYMENT)),
                userc=userc)
Exemple #5
0
def test_payments_invalid_token(monkeypatch):
    app = BetterTestApp(server.app)
    User.create("1878285869108664", fb_id="testfbid")
    uidenc = uidcrypt.encryptuid("1878285869108664")
    tok = tokener.gen_token("1878285869108664", tokener.NS_PAYMENT_SECOND)
    r = app.post_json(
        "/" + uidenc + "/payments?access_token=" + "invalidtoken",
        {"token": "stripetoken",
         "points": 500, "price": 5, "currency": "USD"},
        status=400)
    assert User.get("1878285869108664").points == 20

    assert PaymentSource.get("testfbid") is None
    assert len(Payment.get("testfbid")) == 0
    assert r.status == "400 Bad Request"
    assert "expiration of token" in r.json['text']
Exemple #6
0
 def purchase_points_button(self):
     url = fb.PAYMENT_LOGIN_URL.format(
         state=tokener.gen_token(self.user.id,
                                 tokener.NS_PAYMENT),
         uid=uidcrypt.encryptuid(self.user.id))
     return fb.web_button(self._("Purchase Points"), url, url, "full")