Skip to content
Snippets Groups Projects
test_graphql.py 2.86 KiB
Newer Older
Mark's avatar
Mark committed
from graphqlclient import GraphQLClient
Mark's avatar
Mark committed
import unittest
from os import environ
from app import app
Mark's avatar
Mark committed
from flask_testing import LiveServerTestCase
from json import loads
from database.database import db_session
from database.models import User

class GraphQlTests(LiveServerTestCase):
Mark's avatar
Mark committed
    def create_app(self):
        app.config["TESTING"] = True
        return app
Mark's avatar
Mark committed

    def setUp(self):
Mark's avatar
Mark committed
        self.client = GraphQLClient(self.get_server_url()+"/graphql")
Mark's avatar
Mark committed

    def tearDown(self):
Mark's avatar
Mark committed
        # clean up tables
        users = User.query.filter_by(username="graphqluser").delete()
        db_session.commit()
Mark's avatar
Mark committed

Mark's avatar
Mark committed
    def test_query_create_and_get_user(self):
Mark's avatar
Mark committed
        username = "graphqluser"
        password = "randompassword"
        email = "user@example.com"
Mark's avatar
Mark committed
        result = self._create_user(username, password, email)
Mark's avatar
Mark committed
        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)
Mark's avatar
Mark committed
        querystring = '''
        {{
          getUser(username: "{0}"){{
            username,
            email
         }}
        }}
        '''.format(username).strip()
        result = loads(self.client.execute(querystring))
        self.assertIn("data", result)
        self.assertIn("getUser", result["data"])
        user = result["data"]["getUser"]
        self.assertEqual(user["username"], username)
        self.assertEqual(user["email"], email)
Mark's avatar
Mark committed

    def _create_user(self, username, password, email):
        querystring = '''
        mutation{{
          createUser(
            username: "{0}",
              password: "{1}",
              email: "{2}"){{
              user{{
                username,
                email}}}}}}
        '''.format(username, password, email).strip()
        return loads(self.client.execute(querystring))
Mark's avatar
Mark committed

    def test_create_role(self):
        role_name = "testusers"
        role_description = "A role assigned to users during unittests"
        reulst = self._create_role(role_name, role_description)
        self.assertIn("data", result)
        self.assertIn("createRole", result["data"])
        self.assertIn("role", result["data"]["createRole"])
        role = result["data"]["createRole"]["role"]
        self.assertEqual(role["name"], role_name)
        self.assertEqual(role["description"], role_description)

    def _create_role(self, name, description):
        querystring = '''
        mutation{{
          createRole(
            name: "{0}",
            description: "{1}"){{
              role{{
                name,
                description}}}}}}
        '''.format(name, description).strip()
        return loads(self.client.execute(querystring))