From 4bf9a49f713eb77d61640ee28cec83504a1f5d79 Mon Sep 17 00:00:00 2001
From: Mark <mark@openappstack.net>
Date: Tue, 10 Sep 2019 17:25:36 +0200
Subject: [PATCH] Add create application API function

---
 database/schema.py   | 14 ++++++++++++++
 test/test_graphql.py | 27 +++++++++++++++++++++++++--
 2 files changed, 39 insertions(+), 2 deletions(-)

diff --git a/database/schema.py b/database/schema.py
index 5b27140..c4df8d2 100644
--- a/database/schema.py
+++ b/database/schema.py
@@ -37,6 +37,19 @@ class Application(SQLAlchemyObjectType):
         interfaces = (relay.Node, )
 
 
+class CreateApplication(graphene.Mutation):
+    class Arguments:
+        name = graphene.String(required=True)
+
+    application = graphene.Field(Application)
+
+    def mutate(self, info, name):
+        application = ApplicationModel(name=name)
+        user_datastore.db.session().add(application)
+        user_datastore.commit()
+        return CreateApplication(application=application)
+
+
 class Role(SQLAlchemyObjectType):
     class Meta:
         model = RoleModel
@@ -86,6 +99,7 @@ class Query(graphene.ObjectType):
 class Mutation(graphene.ObjectType):
     create_user = UserMutation.Field()
     create_role = CreateRole.Field()
+    create_application = CreateApplication.Field()
     add_role_to_user = AddRoleToUser.Field()
 
 
diff --git a/test/test_graphql.py b/test/test_graphql.py
index f402dda..c847f6e 100644
--- a/test/test_graphql.py
+++ b/test/test_graphql.py
@@ -5,7 +5,7 @@ from app import app
 from flask_testing import LiveServerTestCase
 from json import loads
 from database.database import db_session
-from database.models import User, Role
+from database.models import User, Role, Application
 
 class GraphQlTests(LiveServerTestCase):
 
@@ -30,7 +30,11 @@ class GraphQlTests(LiveServerTestCase):
             role.users = []
             db_session.delete(role)
             db_session.commit()
-
+        application = db_session.query(Application).filter_by(name="testapp").first()
+        if application is not None:
+            application.users = []
+            db_session.delete(application)
+            db_session.commit()
 
     def test_query_create_and_get_user(self):
         username = "graphqluser"
@@ -140,3 +144,22 @@ class GraphQlTests(LiveServerTestCase):
                 description}}}}}}
         '''.format(name, description).strip()
         return loads(self.client.execute(querystring))
+
+    def test_create_application(self):
+        application_name = "testapp"
+        result = self._create_application(application_name)
+        self.assertIn("data", result)
+        self.assertIn("createApplication", result["data"])
+        self.assertIn("application", result["data"]["createApplication"])
+        application = result["data"]["createApplication"]["application"]
+        self.assertEqual(application["name"], application_name)
+
+    def _create_application(self, name):
+        querystring = '''
+        mutation{{
+          createApplication(
+            name: "{0}"){{
+              application{{
+                name}}}}}}
+        '''.format(name).strip()
+        return loads(self.client.execute(querystring))
-- 
GitLab