@Test public void canAddNonExistentGroupThroughEvent() throws Exception { String[] externalAuthorities = new String[] {"extTest1", "extTest2", "extTest3"}; String[] userAuthorities = new String[] {"usrTest1", "usrTest2", "usrTest3"}; String origin = "testOrigin"; String email = "*****@*****.**"; String firstName = "FirstName"; String lastName = "LastName"; String password = ""; String externalId = null; String userId = new RandomValueStringGenerator().generate(); String username = new RandomValueStringGenerator().generate(); UaaUser user = getUaaUser( userAuthorities, origin, email, firstName, lastName, password, externalId, userId, username); ScimUserBootstrap bootstrap = new ScimUserBootstrap(db, gdb, mdb, Arrays.asList(user)); bootstrap.afterPropertiesSet(); List<ScimUser> users = db.query("userName eq \"" + username + "\" and origin eq \"" + origin + "\""); assertEquals(1, users.size()); userId = users.get(0).getId(); user = getUaaUser( userAuthorities, origin, email, firstName, lastName, password, externalId, userId, username); bootstrap.onApplicationEvent( new ExternalGroupAuthorizationEvent(user, getAuthorities(externalAuthorities))); users = db.query("userName eq \"" + username + "\" and origin eq \"" + origin + "\""); assertEquals(1, users.size()); ScimUser created = users.get(0); Set<ScimGroup> groups = mdb.getGroupsWithMember(created.getId(), true); String[] expected = merge(externalAuthorities, userAuthorities); String[] actual = getGroupNames(groups); assertThat(actual, IsArrayContainingInAnyOrder.arrayContainingInAnyOrder(expected)); }