diff --git a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/UserPhotoTest.java b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/UserPhotoTest.java index 6d6b4692c04..b4e0e875852 100644 --- a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/UserPhotoTest.java +++ b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/UserPhotoTest.java @@ -54,6 +54,10 @@ public class UserPhotoTest extends BaseSQLRepoTest { private static final File T002_REMOVE_PHOTO = new File(TEST_DIR, "t002-remove-photo.xml"); private static final File T003_RE_ADD_PHOTO = new File(TEST_DIR, "t003-re-add-photo.xml"); private static final File T004_CHANGE_PHOTO = new File(TEST_DIR, "t004-change-photo.xml"); + private static final File T005_ADD_PHOTO_BY_ADD = new File(TEST_DIR, "t005-add-photo-by-add.xml"); + private static final File T006_ADD_PHOTO_BY_ADD_OTHER = new File(TEST_DIR, "t006-add-photo-by-add-other.xml"); + private static final File T007_REMOVE_PHOTO_BY_DELETE = new File(TEST_DIR, "t007-remove-photo-by-delete.xml"); + private static final File T008_REMOVE_OTHER_PHOTO_BY_DELETE = new File(TEST_DIR, "t008-remove-other-photo-by-delete.xml"); private String userOid; @@ -65,8 +69,8 @@ public void beforeClass() throws Exception { } @Test - public void test010Add() throws Exception { - OperationResult result = new OperationResult(UserPhotoTest.class.getName() + ".test010Add"); + public void test010AddUser() throws Exception { + OperationResult result = new OperationResult(UserPhotoTest.class.getName() + ".test010AddUser"); PrismObject user = PrismTestUtil.parseObject(USER_FILE); userOid = repositoryService.addObject(user, null, result); @@ -86,8 +90,8 @@ public void test020ModifyUser() throws Exception { } @Test - public void test030RemovePhoto() throws Exception { - OperationResult result = new OperationResult(UserPhotoTest.class.getName() + ".test030RemovePhoto"); + public void test030RemovePhotoByReplace() throws Exception { + OperationResult result = new OperationResult(UserPhotoTest.class.getName() + ".test030RemovePhotoByReplace"); ObjectDelta delta1 = parseDelta(userOid, T001_ADD_EMPLOYEE_TYPE); ObjectDelta delta2 = parseDelta(userOid, T002_REMOVE_PHOTO); @@ -138,6 +142,67 @@ public void test099DeleteUser() throws Exception { checkObject(userOid, user, true, result); // there should be no photo there } + @Test + public void test100AddPhotoByAdd() throws Exception { + OperationResult result = new OperationResult(UserPhotoTest.class.getName() + ".test100AddPhotoByAdd"); + + ObjectDelta delta = parseDelta(userOid, T005_ADD_PHOTO_BY_ADD); + repositoryService.modifyObject(UserType.class, userOid, delta.getModifications(), result); + + checkObject(userOid, USER_FILE, result); // no need to mention delta here, because object now should be equal to USER_FILE + checkObjectNoPhoto(userOid, USER_FILE, result); + } + + @Test + public void test110DuplicatePhotoAddSame() throws Exception { + OperationResult result = new OperationResult(UserPhotoTest.class.getName() + ".test110DuplicatePhotoAddSame"); + + ObjectDelta delta = parseDelta(userOid, T005_ADD_PHOTO_BY_ADD); // adding the same value again + repositoryService.modifyObject(UserType.class, userOid, delta.getModifications(), result); + + checkObject(userOid, USER_FILE, result); // no need to mention delta here, because object now should be equal to USER_FILE + checkObjectNoPhoto(userOid, USER_FILE, result); + } + + @Test + public void test120DuplicatePhotoAddOther() throws Exception { + OperationResult result = new OperationResult(UserPhotoTest.class.getName() + ".test120DuplicatePhotoAddOther"); + + // because photo is single-value, the ADD operation will simply replace the old value + ObjectDelta delta = parseDelta(userOid, T006_ADD_PHOTO_BY_ADD_OTHER); + repositoryService.modifyObject(UserType.class, userOid, delta.getModifications(), result); + + checkObject(userOid, USER_FILE, result, delta); + } + + @Test + public void test130RemoveNonExistingPhotoByDelete() throws Exception { + OperationResult result = new OperationResult(UserPhotoTest.class.getName() + ".test130RemoveNonExistingPhotoByDelete"); + + ObjectDelta delta1 = parseDelta(userOid, T006_ADD_PHOTO_BY_ADD_OTHER); + ObjectDelta delta2 = parseDelta(userOid, T007_REMOVE_PHOTO_BY_DELETE); + repositoryService.modifyObject(UserType.class, userOid, delta2.getModifications(), result); // should not remove the photo because the value is different + + checkObject(userOid, USER_FILE, result, delta1); + checkObject(userOid, USER_FILE, result, delta1, delta2); // should be equivalent + } + + @Test + public void test140RemoveExistingPhotoByDelete() throws Exception { + OperationResult result = new OperationResult(UserPhotoTest.class.getName() + ".test140RemoveExistingPhotoByDelete"); + + ObjectDelta delta1 = parseDelta(userOid, T006_ADD_PHOTO_BY_ADD_OTHER); + ObjectDelta delta2 = parseDelta(userOid, T007_REMOVE_PHOTO_BY_DELETE); + ObjectDelta delta3 = parseDelta(userOid, T008_REMOVE_OTHER_PHOTO_BY_DELETE); + repositoryService.modifyObject(UserType.class, userOid, delta3.getModifications(), result); // this one should remove the photo + + checkObject(userOid, USER_FILE, result, delta1, delta2, delta3); + + // just to be 100% sure ;) + ObjectDelta deltaRemoveByReplace = parseDelta(userOid, T002_REMOVE_PHOTO); // this deletes photo by setting jpegPhoto:=null + checkObject(userOid, USER_FILE, result, deltaRemoveByReplace); + } + protected ObjectDelta parseDelta(String oid, File file) throws SchemaException, IOException { ObjectModificationType modification = PrismTestUtil.parseAtomicValue(file, ObjectModificationType.COMPLEX_TYPE); ObjectDelta delta = DeltaConvertor.createObjectDelta(modification, UserType.class, prismContext); diff --git a/repo/repo-sql-impl-test/src/test/resources/photo/t005-add-photo-by-add.xml b/repo/repo-sql-impl-test/src/test/resources/photo/t005-add-photo-by-add.xml new file mode 100644 index 00000000000..aba8e30515d --- /dev/null +++ b/repo/repo-sql-impl-test/src/test/resources/photo/t005-add-photo-by-add.xml @@ -0,0 +1,29 @@ + + + + + + 48174916-4137-9830-4442-654354808381 + + add + jpegPhoto + /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAAgACADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9/KKKKACiiigAooooAKKKKAP/2Q== + + diff --git a/repo/repo-sql-impl-test/src/test/resources/photo/t006-add-photo-by-add-other.xml b/repo/repo-sql-impl-test/src/test/resources/photo/t006-add-photo-by-add-other.xml new file mode 100644 index 00000000000..486c5df13c3 --- /dev/null +++ b/repo/repo-sql-impl-test/src/test/resources/photo/t006-add-photo-by-add-other.xml @@ -0,0 +1,29 @@ + + + + + + 48174916-4137-9830-4442-654354808381 + + add + jpegPhoto + /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAAEAAQDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9/KKKKAP/2Q== + + diff --git a/repo/repo-sql-impl-test/src/test/resources/photo/t007-remove-photo-by-delete.xml b/repo/repo-sql-impl-test/src/test/resources/photo/t007-remove-photo-by-delete.xml new file mode 100644 index 00000000000..09fe87328e4 --- /dev/null +++ b/repo/repo-sql-impl-test/src/test/resources/photo/t007-remove-photo-by-delete.xml @@ -0,0 +1,29 @@ + + + + + + 48174916-4137-9830-4442-654354808381 + + delete + jpegPhoto + /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAAgACADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9/KKKKACiiigAooooAKKKKAP/2Q== + + diff --git a/repo/repo-sql-impl-test/src/test/resources/photo/t008-remove-other-photo-by-delete.xml b/repo/repo-sql-impl-test/src/test/resources/photo/t008-remove-other-photo-by-delete.xml new file mode 100644 index 00000000000..e37bf5ea50a --- /dev/null +++ b/repo/repo-sql-impl-test/src/test/resources/photo/t008-remove-other-photo-by-delete.xml @@ -0,0 +1,29 @@ + + + + + + 48174916-4137-9830-4442-654354808381 + + delete + jpegPhoto + /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAAEAAQDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9/KKKKAP/2Q== + +