From f6b5de825bd324b62d369c8297ae5f20b8c33d58 Mon Sep 17 00:00:00 2001
From: Mark <mark@openappstack.net>
Date: Tue, 10 Sep 2019 12:35:05 +0200
Subject: [PATCH] Add createUser API test

---
 requirements.txt     |  2 ++
 test/test_graphql.py | 44 ++++++++++++++++++++++++++++++++++++--------
 2 files changed, 38 insertions(+), 8 deletions(-)

diff --git a/requirements.txt b/requirements.txt
index c94686f..e39c4ac 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -2,6 +2,8 @@ sqlalchemy
 psycopg2
 flask-sqlalchemy
 flask-security
+flask-testing
 graphene_sqlalchemy
 Flask-GraphQL
 bcrypt
+graphqlclient
diff --git a/test/test_graphql.py b/test/test_graphql.py
index 98b9e2d..3de3f0b 100644
--- a/test/test_graphql.py
+++ b/test/test_graphql.py
@@ -1,17 +1,45 @@
-
+from graphqlclient import GraphQLClient
 import unittest
 from os import environ
 from app import app
+from flask_testing import LiveServerTestCase
+from json import loads
+from database.database import db_session
+from database.models import User
+
+class GraphQlTests(LiveServerTestCase):
 
-class GraphQlTests(unittest.TestCase):
+    def create_app(self):
+        app.config["TESTING"] = True
+        return app
 
     def setUp(self):
-        self.app = app.test_client()
-        self.app.testing = True
+        self.client = GraphQLClient(self.get_server_url()+"/graphql")
 
     def tearDown(self):
-        pass
+        # clean up tables
+        users = User.query.filter_by(username="graphqluser").delete()
+        db_session.commit()
 
-    def test_graphql_home(self):
-        result = self.app.get('/graphql')
-        self.assertEqual(result.status_code, 400)
+    def test_query_create_user(self):
+        username = "graphqluser"
+        password = "randompassword"
+        email = "user@example.com"
+        querystring = '''
+        mutation{{
+          createUser(
+            username: "{0}",
+              password: "{1}",
+              email: "{2}"){{
+              user{{
+                username,
+                email}}}}}}
+        '''.format(username, password, email).strip()
+        result = loads(self.client.execute(querystring))
+        self.assertNotIn("error", result, "Creating user failed due to an error")
+        self.assertIn("data", result)
+        self.assertIn("createUser", result["data"])
+        self.assertIn("user", result["data"]["createUser"])
+        user = result["data"]["createUser"]["user"]
+        self.assertEqual(user["username"], username)
+        self.assertEqual(user["email"], email)
-- 
GitLab