diff --git a/database/schema.py b/database/schema.py
index c4df8d23e128d89c7e6a1946d5957bfd1e688e32..35e97623a58fae5c3e76af35bf65ca57c182463b 100644
--- a/database/schema.py
+++ b/database/schema.py
@@ -86,6 +86,22 @@ class AddRoleToUser(graphene.Mutation):
         return AddRoleToUser(user=user,role=role)
 
 
+class AddApplicationToUser(graphene.Mutation):
+    class Arguments:
+        username = graphene.String(required=True)
+        application = graphene.String(required=True)
+
+    user = graphene.Field(User)
+    application = graphene.Field(Application)
+
+    def mutate(self, info, username, application):
+        user = user_datastore.db.session().query(UserModel).filter_by(username=username).first()
+        application = user_datastore.db.session().query(ApplicationModel).filter_by(name=application).first()
+        user.applications.append(application)
+        user_datastore.commit()
+        return AddApplicationToUser(user=user,application=application)
+
+
 class Query(graphene.ObjectType):
     node = relay.Node.Field()
     all_users = SQLAlchemyConnectionField(User)
@@ -101,6 +117,7 @@ class Mutation(graphene.ObjectType):
     create_role = CreateRole.Field()
     create_application = CreateApplication.Field()
     add_role_to_user = AddRoleToUser.Field()
+    add_application_to_user = AddApplicationToUser.Field()
 
 
 schema = graphene.Schema(query=Query, types=[User, Role, Application], mutation=Mutation)
diff --git a/test/test_graphql.py b/test/test_graphql.py
index c847f6ee04671b9707ce837299222aba8c7d5a27..715df308b68ef19f97bad67fde906a075fe39d49 100644
--- a/test/test_graphql.py
+++ b/test/test_graphql.py
@@ -18,7 +18,7 @@ class GraphQlTests(LiveServerTestCase):
 
     def tearDown(self):
         # clean up tables
-        for username in ["graphqluser", "graphqluser2"]:
+        for username in ["graphqluser", "graphqluser2", "graphqluser3"]:
             user = db_session.query(User).filter_by(username=username).first()
             if user is not None:
                 user.roles = []
@@ -145,7 +145,7 @@ class GraphQlTests(LiveServerTestCase):
         '''.format(name, description).strip()
         return loads(self.client.execute(querystring))
 
-    def test_create_application(self):
+    def test_create_and_assign_application(self):
         application_name = "testapp"
         result = self._create_application(application_name)
         self.assertIn("data", result)
@@ -153,6 +153,51 @@ class GraphQlTests(LiveServerTestCase):
         self.assertIn("application", result["data"]["createApplication"])
         application = result["data"]["createApplication"]["application"]
         self.assertEqual(application["name"], application_name)
+        username = "graphqluser3"
+        password = "randompassword"
+        email = "user3@example.com"
+        self._create_user(username, password, email)
+        querystring = '''
+        mutation{{
+          addApplicationToUser(
+            username: "{0}",
+            application: "{1}"){{
+              user{{
+                username,
+                applications{{
+                  edges{{
+                    node{{
+                      name
+                    }}
+                  }}
+                }}
+              }}
+              application{{
+                name,
+                users{{
+                  edges{{
+                    node{{
+                      username
+                    }}
+                  }}
+                }}
+              }}
+           }}
+        }}
+        '''.format(username, application_name).strip()
+        result = loads(self.client.execute(querystring))
+        self.assertIn("data", result)
+        self.assertIn("addApplicationToUser", result["data"])
+        user = result["data"]["addApplicationToUser"]["user"]
+        self.assertEqual(username, user["username"])
+        self.assertIn("edges", user["applications"])
+        applications = user["applications"]["edges"]
+        self.assertEqual(application_name, applications[0]["node"]["name"])
+        application = result["data"]["addApplicationToUser"]["application"]
+        self.assertEqual(application_name, application["name"])
+        self.assertIn("edges", application["users"])
+        users = application["users"]["edges"]
+        self.assertEqual(username, users[0]["node"]["username"])
 
     def _create_application(self, name):
         querystring = '''