/** * Creates a copy of {@code acl}. * * @param acl The acl to copy. */ public ParseACL(ParseACL acl) { for (String id : acl.permissionsById.keySet()) { permissionsById.put(id, new Permissions(acl.permissionsById.get(id))); } unresolvedUser = acl.unresolvedUser; if (unresolvedUser != null) { unresolvedUser.registerSaveListener(new UserResolutionListener(this)); } }
private void prepareUnresolvedUser(ParseUser user) { // Registers a listener for the user so that when it is saved, the // unresolved ACL will be resolved. if (!isUnresolvedUser(user)) { permissionsById.remove(UNRESOLVED_KEY); unresolvedUser = user; unresolvedUser.registerSaveListener(new UserResolutionListener(this)); } }
/* package */ ParseACL(Parcel source, ParseParcelDecoder decoder) { shared = source.readByte() == 1; int size = source.readInt(); for (int i = 0; i < size; i++) { String key = source.readString(); Permissions permissions = Permissions.createPermissionsFromParcel(source); permissionsById.put(key, permissions); } if (source.readByte() == 1) { unresolvedUser = (ParseUser) decoder.decode(source); unresolvedUser.registerSaveListener(new UserResolutionListener(this)); } }
@Test public void testSetUserReadAccessWithLazyUser() { ParseUser unresolvedUser = mock(ParseUser.class); when(unresolvedUser.isLazy()).thenReturn(true); ParseACL acl = new ParseACL(); acl.setReadAccess(unresolvedUser, true); assertSame(unresolvedUser, acl.getUnresolvedUser()); verify(unresolvedUser, times(1)).registerSaveListener(any(GetCallback.class)); assertTrue(acl.getPermissionsById().containsKey(UNRESOLVED_KEY)); assertTrue(acl.getReadAccess(unresolvedUser)); assertEquals(1, acl.getPermissionsById().size()); }
@Test public void testSetUserWriteAccessWithLazyUser() { ParseUser user = mock(ParseUser.class); when(user.isLazy()).thenReturn(true); ParseACL acl = new ParseACL(); acl.setWriteAccess(user, true); assertSame(user, acl.getUnresolvedUser()); verify(user, times(1)).registerSaveListener(any(GetCallback.class)); assertTrue(acl.getPermissionsById().containsKey(UNRESOLVED_KEY)); assertTrue(acl.getWriteAccess(user)); assertEquals(1, acl.getPermissionsById().size()); } //endregion
verify(unresolvedUser, times(1)).registerSaveListener(callbackCaptor.capture());
@Test public void testCopy() { ParseACL acl = new ParseACL(); final ParseUser unresolvedUser = mock(ParseUser.class); when(unresolvedUser.isLazy()).thenReturn(true); // This will set unresolvedUser and permissionsById acl.setReadAccess(unresolvedUser, true); acl.setWriteAccess(unresolvedUser, true); // We need to reset unresolvedUser since registerSaveListener will be triggered once in // setReadAccess() reset(unresolvedUser); ParseACL copiedACL = new ParseACL(acl); assertEquals(1, copiedACL.getPermissionsById().size()); assertTrue(copiedACL.getPermissionsById().containsKey(UNRESOLVED_KEY)); assertTrue(copiedACL.getReadAccess(unresolvedUser)); assertTrue(copiedACL.getWriteAccess(unresolvedUser)); assertFalse(copiedACL.isShared()); assertSame(unresolvedUser, copiedACL.getUnresolvedUser()); verify(unresolvedUser, times(1)).registerSaveListener(any(GetCallback.class)); }