diff --git a/database/schema.py b/database/schema.py index 5b27140e7cfbc20d66b2cb3e0251f8a49623ab2d..c4df8d23e128d89c7e6a1946d5957bfd1e688e32 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 f402dda156a036e66684e49ed45fbe3248e1e3b4..c847f6ee04671b9707ce837299222aba8c7d5a27 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))