gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] [taler-backoffice] 02/02: test GET "/" is 200 OK


From: gnunet
Subject: [GNUnet-SVN] [taler-backoffice] 02/02: test GET "/" is 200 OK
Date: Fri, 05 Jan 2018 11:30:46 +0100

This is an automated email from the git hooks/post-receive script.

marcello pushed a commit to branch master
in repository backoffice.

commit b10a0524ec4248229608aed5891908e85f691864
Author: Marcello Stanisci <address@hidden>
AuthorDate: Fri Jan 5 11:30:27 2018 +0100

    test GET "/" is 200 OK
---
 Makefile.in                              |   4 +
 talerbackoffice/backoffice/backoffice.py | 161 +------------------------------
 talerbackoffice/tests.py                 |  46 ++-------
 3 files changed, 18 insertions(+), 193 deletions(-)

diff --git a/Makefile.in b/Makefile.in
index b0562d1..f71c2a5 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -50,3 +50,7 @@ install: $(templates) install-data
 check:
        @export address@hidden@/talerbackoffice/tests.conf; \
         python3 setup.py test
+
+.PHONY: pyliny
+pylint:
+       @pylint talerbackoffice/
diff --git a/talerbackoffice/backoffice/backoffice.py 
b/talerbackoffice/backoffice/backoffice.py
index 8a48883..f62c78b 100644
--- a/talerbackoffice/backoffice/backoffice.py
+++ b/talerbackoffice/backoffice/backoffice.py
@@ -20,18 +20,15 @@
 Implement URL handlers and payment logic for the blog merchant.
 """
 
-from urllib.parse import urljoin, quote, parse_qsl
+from urllib.parse import urljoin, parse_qsl
 import logging
 import os
 import base64
 import requests
 import flask
 from talerblog.talerconfig import TalerConfig
-from ..helpers import (make_url, \
-    expect_parameter, join_urlparts, \
+from ..helpers import (join_urlparts, \
     get_query_string, backend_error)
-from ..blog.content import (ARTICLES, \
-    get_article_file, get_image_file)
 
 LOGGER = logging.getLogger(__name__)
 
@@ -43,15 +40,12 @@ app.secret_key = 
base64.b64encode(os.urandom(64)).decode('utf-8')
 
 TC = TalerConfig.from_env()
 
-BACKEND_URL = TC["frontends"]["backend"].value_string(required=True)
+BACKEND_URL = os.environ.get("BACKOFFICE_MERCHANT_BACKEND")
+INSTANCES = os.environ.get("BACKOFFICE_INSTANCES") # colon-separated list
 CURRENCY = TC["taler"]["currency"].value_string(required=True)
-INSTANCE = TC["blog"]["instance"].value_string(required=True)
-
-ARTICLE_AMOUNT = dict(value=0, fraction=50000000, currency=CURRENCY)
 
 app.config.from_object(__name__)
 
-
 @app.context_processor
 def utility_processor():
     def url(my_url):
@@ -63,158 +57,13 @@ def utility_processor():
 
 @app.route("/")
 def index():
-    return flask.render_template("templates/index.html",
-                                 merchant_currency=CURRENCY,
-                                 articles=ARTICLES.values())
+    return flask.render_template("templates/backoffice.html")
 
 
 @app.route("/javascript")
 def javascript_licensing():
     return flask.render_template("templates/javascript.html")
 
-# Triggers the refund by serving /refund/test?order_id=XY.
-# Will be triggered by a "refund button".
address@hidden("/refund", methods=["GET", "POST"])
-def refund():
-    if flask.request.method == "POST":
-        payed_articles = flask.session["payed_articles"] = 
flask.session.get("payed_articles", {})
-        article_name = flask.request.form.get("article_name")
-        if not article_name:
-            return flask.jsonify(dict(error="No article_name found in form")), 
400
-        LOGGER.info("Looking for %s to refund" % article_name)
-        order_id = payed_articles.get(article_name)
-        if not order_id:
-            return flask.jsonify(dict(error="Aborting refund: article not 
payed")), 401
-        resp = requests.post(urljoin(BACKEND_URL, "refund"),
-                             json=dict(order_id=order_id,
-                                       refund=ARTICLE_AMOUNT,
-                                       reason="Demo reimbursement",
-                                       instance=INSTANCE))
-        if resp.status_code != 200:
-            return backend_error(resp)
-        payed_articles[article_name] = "__refunded"
-        response = flask.make_response()
-        response.headers["X-Taler-Refund-Url"] = make_url("/refund", 
("order_id", order_id))
-        return response, 402
-
-    else:
-        order_id = expect_parameter("order_id", False)
-        if not order_id:
-            LOGGER.error("Missing parameter 'order_id'")
-            return flask.jsonify(dict(error="Missing parameter 'order_id'")), 
400
-        resp = requests.get(urljoin(BACKEND_URL, "refund"),
-                            params=dict(order_id=order_id, instance=INSTANCE))
-        if resp.status_code != 200:
-            return backend_error(resp)
-        return flask.jsonify(resp.json()), resp.status_code
-
-
address@hidden("/generate-contract", methods=["GET"])
-def generate_contract():
-    article_name = expect_parameter("article_name")
-    pretty_name = article_name.replace("_", " ")
-    order = dict(
-        summary=pretty_name,
-        nonce=flask.request.args.get("nonce"),
-        amount=ARTICLE_AMOUNT,
-        max_fee=dict(value=1, fraction=0, currency=CURRENCY),
-        products=[
-            dict(
-                description="Essay: " + pretty_name,
-                quantity=1,
-                product_id=0,
-                price=ARTICLE_AMOUNT,
-            ),
-        ],
-        fulfillment_url=make_url("/essay/" + quote(article_name)),
-        pay_url=make_url("/pay"),
-        merchant=dict(
-            instance=INSTANCE,
-            address="nowhere",
-            name="Kudos Inc.",
-            jurisdiction="none",
-        ),
-        extra=dict(article_name=article_name),
-    )
-    resp = requests.post(urljoin(BACKEND_URL, "proposal"),
-                         json=dict(order=order))
-    if resp.status_code != 200:
-        return backend_error(resp)
-    proposal_resp = resp.json()
-    return flask.jsonify(**proposal_resp)
-
-
address@hidden("/cc-payment/<name>")
-def cc_payment(name):
-    return flask.render_template("templates/cc-payment.html",
-                                 article_name=name)
-
-
address@hidden("/essay/<name>")
address@hidden("/essay/<name>/data/<data>")
-def article(name, data=None):
-    LOGGER.info("processing %s" % name)
-    payed_articles = flask.session.get("payed_articles", {})
-
-    if payed_articles.get(name, "") == "__refunded":
-        return flask.render_template("templates/article_refunded.html", 
article_name=name)
-
-    if name in payed_articles:
-        articleInfo = ARTICLES[name]
-        if articleInfo is None:
-            flask.abort(500)
-        if data is not None:
-            if data in articleInfo.extra_files:
-                return flask.send_file(get_image_file(data))
-            return "permission denied", 400
-        return flask.render_template("templates/article_frame.html",
-                                     
article_file=get_article_file(articleInfo),
-                                     article_name=name)
-
-    contract_url = make_url("/generate-contract",
-                            ("article_name", name))
-    response = flask.make_response(
-        flask.render_template("templates/fallback.html"), 402)
-    response.headers["X-Taler-Contract-Url"] = contract_url
-    response.headers["X-Taler-Contract-Query"] = "fulfillment_url"
-    # Useless (?) header, as X-Taler-Contract-Url takes always (?) precedence
-    # over X-Offer-Url.  This one might only be useful if the contract 
retrieval
-    # goes wrong.
-    response.headers["X-Taler-Offer-Url"] = make_url("/essay/" + quote(name))
-    return response
-
-
address@hidden("/pay", methods=["POST"])
-def pay():
-    deposit_permission = flask.request.get_json()
-    if deposit_permission is None:
-        return flask.jsonify(error="no json in body"), 400
-    resp = requests.post(urljoin(BACKEND_URL, "pay"),
-                         json=deposit_permission)
-    if resp.status_code != 200:
-        return backend_error(resp)
-    proposal_data = resp.json()["contract_terms"]
-    article_name = proposal_data["extra"]["article_name"]
-    payed_articles = flask.session["payed_articles"] = 
flask.session.get("payed_articles", {})
-
-    try:
-        resp.json()["refund_permissions"].pop()
-        # we had some refunds on the article purchase already!
-        LOGGER.info("Article %s was refunded, before /pay" % article_name)
-        payed_articles[article_name] = "__refunded"
-        return flask.jsonify(resp.json()), 200
-    except IndexError:
-        pass
-
-    if not deposit_permission["order_id"]:
-        LOGGER.error("order_id missing from deposit_permission!")
-        return flask.jsonify(dict(error="internal error: ask for refund!")), 
500
-    if article_name not in payed_articles:
-        LOGGER.info("Article %s goes in state" % article_name)
-        payed_articles[article_name] = deposit_permission["order_id"]
-    return flask.jsonify(resp.json()), 200
-
-
 @app.route("/history")
 def history():
     qs = get_query_string().decode("utf-8")
diff --git a/talerbackoffice/tests.py b/talerbackoffice/tests.py
index 050d852..6fa15cb 100644
--- a/talerbackoffice/tests.py
+++ b/talerbackoffice/tests.py
@@ -2,48 +2,20 @@
 
 import unittest
 from mock import patch, MagicMock
-from talerblog.blog import blog
-from talerblog.talerconfig import TalerConfig
+from talerbackoffice.backoffice import backoffice
+from talerbackoffice.talerconfig import TalerConfig
 
 TC = TalerConfig.from_env()
 CURRENCY = TC["taler"]["currency"].value_string(required=True)
 
-class BlogTestCase(unittest.TestCase):
+class BackofficeTestCase(unittest.TestCase):
     def setUp(self):
-        blog.app.testing = True
-        self.app = blog.app.test_client()
-
-    @patch("requests.post")
-    def test_proposal_creation(self, mocked_post):
-        ret_post = MagicMock()
-        ret_post.status_code = 200
-        ret_post.json.return_value = {}
-        mocked_post.return_value = ret_post
-        self.app.get("/generate-contract?nonce=55&article_name=Check_Me")
-        mocked_post.assert_called_with(
-            "http://backend.test.taler.net/proposal";,
-            json={
-                "order": {
-                    "summary": "Check Me",
-                    "nonce": "55",
-                    "amount": blog.ARTICLE_AMOUNT,
-                    "max_fee": {
-                        "value": 1,
-                        "fraction": 0,
-                        "currency": CURRENCY},
-                    "products": [{
-                        "description": "Essay: Check Me",
-                        "quantity": 1,
-                        "product_id": 0,
-                        "price": blog.ARTICLE_AMOUNT}],
-                    "fulfillment_url": "http://localhost/essay/Check_Me";,
-                    "pay_url": "http://localhost/pay";,
-                    "merchant": {
-                        "instance": 
TC["blog"]["instance"].value_string(required=True),
-                        "address": "nowhere",
-                        "name": "Kudos Inc.",
-                        "jurisdiction": "none"},
-                    "extra": {"article_name": "Check_Me"}}})
+        backoffice.app.testing = True
+        self.app = backoffice.app.test_client()
+    
+    def test_responsive(self):
+        response = self.app.get("/")
+        self.assertEqual(response.status_code, 200)
 
 if __name__ == "__main__":
     unittest.main()

-- 
To stop receiving notification emails like this one, please contact
address@hidden



reply via email to

[Prev in Thread] Current Thread [Next in Thread]