reconstructedUtilMap = Arrays.stream(x.toString().split(","))
+ .map(s -> s.split(":"))
+ .collect(Collectors.toMap(s -> s[0], s -> s[1]));
+ if(null != reconstructedUtilMap.get("\"rma_recordCategoryIdentifier\"")) {
+ recordCategoryIdentifier.set(true);
+ }
+ });
+ assertFalse("Record Category Identifier displayed for " + TEST_PREFIX + ".", recordCategoryIdentifier.get());
+ }
+
+ /**
+ * User with RM User role can see the records he has permission over and all in Unfiled Records
+ *
+ * Given that I am a RM User
+ * I can see only the records in File Plan I have permission over and all in Unfiled Records
+ */
+ @Test (priority = 2)
+ public void nonRMUserSearchResults() {
+ try {
+ Utility.sleep(1000, 40000, () -> {
+ List stringList = (searchAPI
+ .searchForDocumentsAsUser(nonRmSiteUser.get().getUsername(),
+ nonRmSiteUser.get().getPassword(),
+ ELECTRONIC_RECORD));
+ assertFalse("The file with search term " + ELECTRONIC_RECORD + " was found using RM Not Site User "+ nonRmSiteUser.get().getUsername(),getResult(ELECTRONIC_RECORD,stringList));
+ });
+ }
+ catch (InterruptedException e) {
+ fail("InterruptedException received while waiting for results.");
+ }
+
+ try {
+ Utility.sleep(1000, 40000, () -> {
+ List stringList = (searchAPI
+ .searchForDocumentsAsUser(nonRmSiteUser.get().getUsername(),
+ nonRmSiteUser.get().getPassword(),
+ UNFILED_ELECTRONIC_RECORD));
+ assertFalse("The file with search term " + UNFILED_ELECTRONIC_RECORD + " was not found using RM Not Site User "+ nonRmSiteUser.get().getUsername(),getResult(UNFILED_ELECTRONIC_RECORD,stringList));
+ });
+ }
+ catch (InterruptedException e) {
+ fail("InterruptedException received while waiting for results.");
+ }
+
+ try {
+ Utility.sleep(1000, 40000, () -> {
+ List stringList = (searchAPI
+ .searchForDocumentsAsUser(nonRmSiteUser.get().getUsername(),
+ nonRmSiteUser.get().getPassword(),
+ NON_ELECTRONIC_RECORD));
+ assertFalse("The file with search term " + NON_ELECTRONIC_RECORD + " was not found using RM Not Site User "+ nonRmSiteUser.get().getUsername(),getResult(NON_ELECTRONIC_RECORD,stringList));
+ });
+ }
+ catch (InterruptedException e) {
+ fail("InterruptedException received while waiting for results.");
+ }
+
+ try {
+ Utility.sleep(1000, 40000, () -> {
+ List stringList = searchAPI
+ .searchForDocumentsAsUser(nonRmSiteUser.get().getUsername(),
+ nonRmSiteUser.get().getPassword(),
+ ADMIN_ELECTRONIC_RECORD);
+ assertFalse("The file with search term " + ADMIN_ELECTRONIC_RECORD + " was not found using RM Not Site User "+ nonRmSiteUser.get().getUsername(),getResult(ADMIN_ELECTRONIC_RECORD,stringList));
+ });
+ }
+ catch (InterruptedException e) {
+ fail("InterruptedException received while waiting for results.");
+ }
+ }
+
+ /**
+ * User with RM User role can see the records he has permission over and all in Unfiled Records
+ *
+ * Given that I am a RM User
+ * I can see only the records in File Plan I have permission over and all in Unfiled Records
+ */
+ @Test (priority = 3)
+ public void rmUserSearchResults() {
+ getRestAPIFactory().getRMUserAPI().addUserPermission(categoryAll.getId(), rm_user_search.get(), PERMISSION_READ_RECORDS);
+ getRestAPIFactory().getRMUserAPI().addUserPermission(categoryAll.getId(), rm_user_search.get(), PERMISSION_FILE_RECORDS);
+
+ try {
+ Utility.sleep(1000, 40000, () -> {
+ List stringList = (searchAPI
+ .searchForDocumentsAsUser(rm_user_search.get().getUsername(),
+ rm_user_search.get().getPassword(),
+ ELECTRONIC_RECORD));
+ assertTrue(getResult(ELECTRONIC_RECORD,stringList),"The file with search term" + ELECTRONIC_RECORD + " was not found using RM User "+ rm_user_search.get().getUsername());
+ });
+ }
+ catch (InterruptedException e) {
+ fail("InterruptedException received while waiting for results.");
+ }
+
+ try {
+ Utility.sleep(1000, 40000, () -> {
+ List stringList = (searchAPI
+ .searchForDocumentsAsUser(rm_user_search.get().getUsername(),
+ rm_user_search.get().getPassword(),
+ UNFILED_ELECTRONIC_RECORD));
+ assertTrue(getResult(UNFILED_ELECTRONIC_RECORD,stringList),"The file with search term" + UNFILED_ELECTRONIC_RECORD + " was not found using RM User "+ rm_user_search.get().getUsername());
+ });
+ }
+ catch (InterruptedException e) {
+ fail("InterruptedException received while waiting for results.");
+ }
+
+ try {
+ Utility.sleep(1000, 40000, () -> {
+ List stringList = (searchAPI
+ .searchForDocumentsAsUser(rm_user_search.get().getUsername(),
+ rm_user_search.get().getPassword(),
+ NON_ELECTRONIC_RECORD));
+ assertTrue(getResult(NON_ELECTRONIC_RECORD,stringList),"The file with search term" + NON_ELECTRONIC_RECORD + " was not found using RM User "+ rm_user_search.get().getUsername());
+ });
+ }
+ catch (InterruptedException e) {
+ fail("InterruptedException received while waiting for results.");
+ }
+
+ try {
+ Utility.sleep(1000, 40000, () -> {
+ List stringList = searchAPI
+ .searchForDocumentsAsUser(rm_user_search.get().getUsername(),
+ rm_user_search.get().getPassword(),
+ ADMIN_ELECTRONIC_RECORD);
+ assertFalse("The file with search term" + ADMIN_ELECTRONIC_RECORD + " was not found using RM User "+ rm_user_search.get().getUsername(),getResult(ADMIN_ELECTRONIC_RECORD,stringList));
+ });
+ }
+ catch (InterruptedException e) {
+ fail("InterruptedException received while waiting for results.");
+ }
+ }
+
+ /**
+ * User with RM Manager role can see the records he has permission over and all in Unfiled Records
+ *
+ * Given that I am a RM Manager
+ * I can see only the records in File Plan I have permission over and all in Unfiled Records
+ */
+ @Test (priority = 4)
+ public void rmManagerSearchResults() {
+ getRestAPIFactory().getRMUserAPI().addUserPermission(categoryAll.getId(), rm_manager.get(), PERMISSION_READ_RECORDS);
+
+ try {
+ Utility.sleep(1000, 40000, () -> {
+ List stringList = (searchAPI
+ .searchForDocumentsAsUser(rm_manager.get().getUsername(),
+ rm_manager.get().getPassword(),
+ ELECTRONIC_RECORD));
+ assertTrue(getResult(ELECTRONIC_RECORD,stringList),"The file with search term " + ELECTRONIC_RECORD + " was not found using RM manager User "+ rm_manager.get().getUsername());
+ });
+ }
+ catch (InterruptedException e) {
+ fail("InterruptedException received while waiting for results.");
+ }
+
+ try {
+ Utility.sleep(1000, 40000, () -> {
+ List stringList = (searchAPI
+ .searchForDocumentsAsUser(rm_manager.get().getUsername(),
+ rm_manager.get().getPassword(),
+ UNFILED_ELECTRONIC_RECORD));
+ assertTrue(getResult(UNFILED_ELECTRONIC_RECORD,stringList),"The file with search term " + UNFILED_ELECTRONIC_RECORD + " was not found using RM manager User "+ rm_manager.get().getUsername());
+ });
+ }
+ catch (InterruptedException e) {
+ fail("InterruptedException received while waiting for results.");
+ }
+
+ try {
+ Utility.sleep(1000, 40000, () -> {
+ List stringList = (searchAPI
+ .searchForDocumentsAsUser(rm_manager.get().getUsername(),
+ rm_manager.get().getPassword(),
+ NON_ELECTRONIC_RECORD));
+ assertTrue(getResult(NON_ELECTRONIC_RECORD,stringList),"The file with search term " + NON_ELECTRONIC_RECORD + " was not found using RM manager User "+ rm_manager.get().getUsername());
+ });
+ }
+ catch (InterruptedException e) {
+ fail("InterruptedException received while waiting for results.");
+ }
+
+ try {
+ Utility.sleep(1000, 40000, () -> {
+ List stringList = searchAPI
+ .searchForDocumentsAsUser(rm_manager.get().getUsername(),
+ rm_manager.get().getPassword(),
+ ADMIN_ELECTRONIC_RECORD);
+ assertFalse("The file with search term" + ADMIN_ELECTRONIC_RECORD + " was found using RM manager User "+ rm_manager.get().getUsername(),getResult(ADMIN_ELECTRONIC_RECORD,stringList));
+ });
+ }
+ catch (InterruptedException e) {
+ fail("InterruptedException received while waiting for results.");
+ }
+ }
+
+ /**
+ * User with RM Administrator role can see all the records
+ *
+ * Given that I am a RM Administrator
+ * I can see all the records in File Plan and Unfiled Records through RM Search and Advanced Search
+ */
+ @Test(priority = 5)
+ public void rmAdminSearchResults() {
+ try {
+ Utility.sleep(1000, 40000, () -> {
+ List stringList = (searchAPI
+ .searchForDocumentsAsUser(rm_admin_search.get().getUsername(),
+ rm_admin_search.get().getPassword(),
+ ELECTRONIC_RECORD));
+ assertTrue(getResult(ELECTRONIC_RECORD,stringList),"The file with search term " + ELECTRONIC_RECORD + " was not found using RM Admin User "+ rm_admin_search.get().getUsername());
+ });
+ }
+ catch (InterruptedException e) {
+ fail("InterruptedException received while waiting for results.");
+ }
+
+ try {
+ Utility.sleep(1000, 40000, () -> {
+ List stringList = (searchAPI
+ .searchForDocumentsAsUser(rm_admin_search.get().getUsername(),
+ rm_admin_search.get().getPassword(),
+ UNFILED_ELECTRONIC_RECORD));
+ assertTrue(getResult(UNFILED_ELECTRONIC_RECORD,stringList),"The file with search term " + UNFILED_ELECTRONIC_RECORD + " was not found using RM Admin User "+ rm_admin_search.get().getUsername());
+ });
+ }
+ catch (InterruptedException e) {
+ fail("InterruptedException received while waiting for results.");
+ }
+
+ try {
+ Utility.sleep(1000, 40000, () -> {
+ List stringList = (searchAPI
+ .searchForDocumentsAsUser(rm_admin_search.get().getUsername(),
+ rm_admin_search.get().getPassword(),
+ NON_ELECTRONIC_RECORD));
+ assertTrue(getResult(NON_ELECTRONIC_RECORD,stringList),"The file with search term " + NON_ELECTRONIC_RECORD + " was not found using RM Admin User "+ rm_admin_search.get().getUsername());
+ });
+ }
+ catch (InterruptedException e) {
+ fail("InterruptedException received while waiting for results.");
+ }
+ }
+
+ private void createRMManager() {
+ // create RM manager
+ rm_manager = Optional.ofNullable(getDataUser().createRandomTestUser());
+ rmRolesAndActionsAPI.assignRoleToUser(
+ getDataUser().usingAdmin().getAdminUser().getUsername(),
+ getDataUser().usingAdmin().getAdminUser().getPassword(),
+ rm_manager.get().getUsername(),
+ ROLE_RM_MANAGER
+ );
+ }
+
+ private void createRMUser() {
+ // create RM manager
+ rm_user_search = Optional.ofNullable(getDataUser().createRandomTestUser());
+ rmRolesAndActionsAPI.assignRoleToUser(
+ getDataUser().usingAdmin().getAdminUser().getUsername(),
+ getDataUser().usingAdmin().getAdminUser().getPassword(),
+ rm_user_search.get().getUsername(),
+ ROLE_RM_USER
+ );
+ }
+
+ private void createRMAdmin() {
+ // create RM Admin
+ rm_admin_search = Optional.ofNullable(getDataUser().createRandomTestUser());
+ rmRolesAndActionsAPI.assignRoleToUser(
+ getDataUser().usingAdmin().getAdminUser().getUsername(),
+ getDataUser().usingAdmin().getAdminUser().getPassword(),
+ rm_admin_search.get().getUsername(),
+ ADMIN
+ );
+ }
+
+ private RecordCategory createCategoryIfDoesNotExist(String CATEGORY_ALL) {
+ return createRootCategory(getDataUser().usingAdmin().getAdminUser(), CATEGORY_ALL);
+ }
+
+ private RecordCategoryChild createRecordFolderInCategory(String FOLDER_SEARCH, RecordCategory recordCategory) {
+ return createFolder(getDataUser().usingAdmin().getAdminUser(), recordCategory.getId(), FOLDER_SEARCH);
+ }
+
+ private void uploadElectronicRecordInContainer(String electronic_record, String folder_search) {
+ recordsAPI.uploadElectronicRecord(getDataUser().usingAdmin().getAdminUser().getUsername(),
+ getDataUser().usingAdmin().getAdminUser().getPassword(),
+ getDefaultElectronicRecordProperties(electronic_record), folder_search, CMISUtil.DocumentType.TEXT_PLAIN);
+ }
+
+
+ protected HttpResponse createNonElectronicRecordInContainer(String name, String categoryName, String folderName) {
+ Map defaultProperties = new HashMap<>();
+ defaultProperties.put(BaseAPI.RMProperty.NAME, name);
+ defaultProperties.put(BaseAPI.RMProperty.TITLE, TITLE);
+ defaultProperties.put(BaseAPI.RMProperty.DESCRIPTION, DESCRIPTION);
+
+ return recordsAPI.createNonElectronicRecord(getDataUser().usingAdmin().getAdminUser().getUsername(),
+ getDataUser().usingAdmin().getAdminUser().getPassword(), defaultProperties, categoryName, folderName);
+ }
+
+ public Map getDefaultElectronicRecordProperties(String recordName) {
+ Map defaultProperties = new HashMap<>();
+ defaultProperties.put(BaseAPI.RMProperty.NAME, recordName);
+ defaultProperties.put(BaseAPI.RMProperty.TITLE, TITLE);
+ defaultProperties.put(BaseAPI.RMProperty.DESCRIPTION, DESCRIPTION);
+ defaultProperties.put(BaseAPI.RMProperty.CONTENT, TEST_CONTENT);
+ return defaultProperties;
+ }
+
+ @AfterClass(alwaysRun = true)
+ public void standardSearchTeardown() {
+ // delete categories
+ deleteRecordCategory(categoryAll.getId());
+ deleteRecordCategory(category_Admin_Only.getId());
+
+ // delete users
+ Optional.of(nonRmSiteUser).ifPresent(x -> getDataUser().deleteUser(x.get()));
+ Optional.of(rm_user_search).ifPresent(x -> getDataUser().deleteUser(x.get()));
+ Optional.of(rm_manager).ifPresent(x -> getDataUser().deleteUser(x.get()));
+ Optional.of(rm_admin_search).ifPresent(x -> getDataUser().deleteUser(x.get()));
+ }
+
+ private boolean getResult(String partialRecordName, List searchResults) {
+ if(null != searchResults) {
+ for (String searchResult : searchResults) {
+ if (searchResult.startsWith(partialRecordName)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private Object[][] getRecordsFromUnfiledRecordsContainer(UnfiledContainerChild electronicRecord)
+ {
+ UnfiledContainerAPI unfiledContainersAPI = getRestAPIFactory().getUnfiledContainersAPI();
+ return new String[][] {
+ { unfiledContainersAPI.uploadRecord(electronicRecord, UNFILED_RECORDS_CONTAINER_ALIAS,
+ createTempFile(ELECTRONIC_RECORD_NAME, ELECTRONIC_RECORD_NAME)).getId()}
+ };
+ }
+}