diff --git a/component/core/src/main/java/org/exoplatform/social/core/storage/IdentityStorage.java b/component/core/src/main/java/org/exoplatform/social/core/storage/IdentityStorage.java index 0c97dffd4c..61d5bb2963 100644 --- a/component/core/src/main/java/org/exoplatform/social/core/storage/IdentityStorage.java +++ b/component/core/src/main/java/org/exoplatform/social/core/storage/IdentityStorage.java @@ -423,11 +423,12 @@ public List getIdentitiesByProfileFilter(String identityProvider, Prof .like("jcr:path", profileHomeNode.getPath() + "[%]/%"); for (String namePart : nameParts) { - if (namePart != "") { + if (!"".equals(namePart)) { queryBuilder.or().like(queryBuilder.lower(Profile.FIRST_NAME), namePart.toLowerCase() + "%"); queryBuilder.or().like(queryBuilder.lower(Profile.LAST_NAME), namePart.toLowerCase() + "%"); } } + if (position.length() != 0) { queryBuilder.and().contains(Profile.POSITION, position); diff --git a/component/core/src/test/java/org/exoplatform/social/core/storage/IdentityStorageTest.java b/component/core/src/test/java/org/exoplatform/social/core/storage/IdentityStorageTest.java index f1fe66e2b1..eb6567c1b9 100644 --- a/component/core/src/test/java/org/exoplatform/social/core/storage/IdentityStorageTest.java +++ b/component/core/src/test/java/org/exoplatform/social/core/storage/IdentityStorageTest.java @@ -320,6 +320,76 @@ public void testFindIdentityByProfileFilter() throws Exception { final List result = identityStorage.getIdentitiesFilterByAlphaBet(providerId, filter, 0, 1); assertEquals(1, result.size()); } + + /** + * Unit Test for SOC-2658 fix: find profile by gender, position, skill + * @throws Exception + */ + + public void testGetIdentityByProfileFilterWithoutName() throws Exception { + String providerId = "organization"; + String remoteId = "username"; + + Identity identity = new Identity(providerId, remoteId); + identityStorage.saveIdentity(identity); + + Profile profile = new Profile(identity); + profile.setProperty(Profile.FIRST_NAME, "FirstName"); + profile.setProperty("position", "developer"); + profile.setProperty("skills", "java"); + profile.setProperty("gender", "male"); + + identityStorage.saveProfile(profile); + + + ProfileFilter filter1 = new ProfileFilter(); + //find by position and gender + filter1.setName(""); + filter1.setPosition("developer"); + filter1.setGender("male"); + filter1.setSkills(""); + List result1 = identityStorage.getIdentitiesByProfileFilter(providerId, filter1, 0, 1); + assertEquals(1, result1.size()); + + ProfileFilter filter2 = new ProfileFilter(); + //find by position + filter2.setName(""); + filter2.setPosition("developer"); + filter2.setSkills(""); + filter2.setGender(""); + + List result2 = identityStorage.getIdentitiesByProfileFilter(providerId, filter2, 0, 1); + assertEquals(1, result2.size()); + } + + /** + * Unit Test for getIdentitiesByProfileFilter with only name field in ProfileFilter + * @throws Exception + */ + public void testGetIdentitiesFilterByName() throws Exception { + String providerId = "organization"; + String remoteId = "username"; + + Identity identity = new Identity(providerId, remoteId); + identityStorage.saveIdentity(identity); + + Profile profile = new Profile(identity); + profile.setProperty(Profile.FIRST_NAME, "FirstName"); + profile.setProperty("position", "developer"); + profile.setProperty("skills", "java"); + profile.setProperty("gender", "male"); + + identityStorage.saveProfile(profile); + + ProfileFilter filter1 = new ProfileFilter(); + //find by name + filter1.setName("First"); + filter1.setPosition(""); + filter1.setGender(""); + filter1.setSkills(""); + List result1 = identityStorage.getIdentitiesByProfileFilter(providerId, filter1, 0, 1); + assertEquals(1, result1.size()); + } public void testFindManyIdentitiesByProfileFilter() throws Exception { String providerId = "organization"; diff --git a/component/webui/src/main/java/org/exoplatform/social/webui/profile/UIProfileUserSearch.java b/component/webui/src/main/java/org/exoplatform/social/webui/profile/UIProfileUserSearch.java index 97f883b064..303c158a8d 100644 --- a/component/webui/src/main/java/org/exoplatform/social/webui/profile/UIProfileUserSearch.java +++ b/component/webui/src/main/java/org/exoplatform/social/webui/profile/UIProfileUserSearch.java @@ -365,13 +365,16 @@ public void execute(Event event) throws Exception { if (!isValidInput(filter)) { // is invalid condition input uiSearch.setIdentityList(new ArrayList()); } else { + if ((filter.getName() == null) || defaultNameVal.equals(filter.getName())) { + filter.setName(""); + } if ((filter.getPosition() == null) || filter.getPosition().equals(defaultPosVal)) { filter.setPosition(""); } if ((filter.getSkills() == null) || filter.getSkills().equals(defaultSkillsVal)) { filter.setSkills(""); } - if (filter.getGender().equals(defaultGenderVal)) { + if ((filter.getGender() == null) || filter.getGender().equals(defaultGenderVal)) { filter.setGender(""); }