From 1d1cc060ac1c1314adb227520135618599a57af4 Mon Sep 17 00:00:00 2001
From: srosse <stephane.rosse@frentix.com>
Date: Fri, 3 Jan 2020 09:16:09 +0100
Subject: [PATCH] OO-4428: make sure all sort key works in question pool table

---
 .../qpool/manager/QItemQueriesDAO.java        |  1 +
 .../qpool/ui/AbstractItemListController.java  |  2 +-
 .../qpool/ui/QuestionItemDataModel.java       |  6 ++--
 .../qpool/manager/QItemQueriesDAOTest.java    | 31 +++++++++++++++++++
 4 files changed, 36 insertions(+), 4 deletions(-)

diff --git a/src/main/java/org/olat/modules/qpool/manager/QItemQueriesDAO.java b/src/main/java/org/olat/modules/qpool/manager/QItemQueriesDAO.java
index e909b55ed3c..01070bbd402 100644
--- a/src/main/java/org/olat/modules/qpool/manager/QItemQueriesDAO.java
+++ b/src/main/java/org/olat/modules/qpool/manager/QItemQueriesDAO.java
@@ -498,6 +498,7 @@ public class QItemQueriesDAO {
 					sb.append(itemDbRef).append(".type.type ");
 					appendAsc(sb, asc);
 					break;
+				case "mark":
 				case "marks":
 					sb.append("marks");
 					appendAsc(sb, asc);
diff --git a/src/main/java/org/olat/modules/qpool/ui/AbstractItemListController.java b/src/main/java/org/olat/modules/qpool/ui/AbstractItemListController.java
index dacf1d0100b..9aa36b2a0b1 100644
--- a/src/main/java/org/olat/modules/qpool/ui/AbstractItemListController.java
+++ b/src/main/java/org/olat/modules/qpool/ui/AbstractItemListController.java
@@ -188,7 +188,7 @@ public abstract class AbstractItemListController extends FormBasicController
 		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, Cols.lastModified));
 		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, Cols.keywords));
 		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, Cols.coverage));
-		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, Cols.additionalInfos));
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, Cols.additionalInformations));
 		if (getSecurityCallback().canUseTaxonomy()) {
 			columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.taxonomyLevel));
 			columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.taxonomyPath));
diff --git a/src/main/java/org/olat/modules/qpool/ui/QuestionItemDataModel.java b/src/main/java/org/olat/modules/qpool/ui/QuestionItemDataModel.java
index 7f3943518f5..d35e2c50d24 100644
--- a/src/main/java/org/olat/modules/qpool/ui/QuestionItemDataModel.java
+++ b/src/main/java/org/olat/modules/qpool/ui/QuestionItemDataModel.java
@@ -85,7 +85,7 @@ public class QuestionItemDataModel extends DefaultFlexiTableDataSourceModel<Item
 			case topic: return item.getTopic();
 			case keywords: return item.getKeywords();
 			case coverage: return item.getCoverage();
-			case additionalInfos: return item.getAdditionalInformations();
+			case additionalInformations: return item.getAdditionalInformations();
 			case creationDate: return item.getCreationDate();
 			case lastModified: return item.getLastModified();
 			case taxonomyLevel: return item.getTaxonomyLevelName();
@@ -130,7 +130,7 @@ public class QuestionItemDataModel extends DefaultFlexiTableDataSourceModel<Item
 		topic("general.topic"),
 		keywords("general.keywords"),
 		coverage("general.coverage"),
-		additionalInfos("general.additional.informations"),
+		additionalInformations("general.additional.informations"),
 		creationDate("technical.creation"),
 		lastModified("technical.lastModified"),
 		taxonomyLevel("classification.taxonomy.level"),
@@ -164,7 +164,7 @@ public class QuestionItemDataModel extends DefaultFlexiTableDataSourceModel<Item
 
 		@Override
 		public boolean sortable() {
-			return true;
+			return this != editable;
 		}
 
 		@Override
diff --git a/src/test/java/org/olat/modules/qpool/manager/QItemQueriesDAOTest.java b/src/test/java/org/olat/modules/qpool/manager/QItemQueriesDAOTest.java
index 565b59674d5..d546edd606a 100644
--- a/src/test/java/org/olat/modules/qpool/manager/QItemQueriesDAOTest.java
+++ b/src/test/java/org/olat/modules/qpool/manager/QItemQueriesDAOTest.java
@@ -55,6 +55,7 @@ import org.olat.modules.qpool.QuestionType;
 import org.olat.modules.qpool.model.QItemType;
 import org.olat.modules.qpool.model.QuestionItemImpl;
 import org.olat.modules.qpool.model.SearchQuestionItemParams;
+import org.olat.modules.qpool.ui.QuestionItemDataModel;
 import org.olat.modules.taxonomy.Taxonomy;
 import org.olat.modules.taxonomy.TaxonomyCompetenceTypes;
 import org.olat.modules.taxonomy.TaxonomyLevel;
@@ -234,6 +235,36 @@ public class QItemQueriesDAOTest extends OlatTestCase  {
 		}
 	}
 	
+	/**
+	 * Check if all the queries works with the order by used
+	 * by the main table in question pool.
+	 */
+	@Test
+	public void getItemsOfCollection_orderByColumns() {
+		//create a collection with 2 items
+		Identity id = JunitTestHelper.createAndPersistIdentityAsUser("Coll-Onwer-3c-" + UUID.randomUUID().toString());
+		QuestionItemCollection coll = collectionDao.createCollection("NGC collection 3c", id);
+		QuestionItem item = questionDao.createAndPersist(null, "NGC 92", QTIConstants.QTI_12_FORMAT, Locale.GERMAN.getLanguage(), null, null, null, qItemType);
+		collectionDao.addItemToCollection(item, singletonList(coll));
+		dbInstance.commit();//check if it's alright
+		
+		SearchQuestionItemParams params = new SearchQuestionItemParams(id, null, Locale.ENGLISH);
+		params.setCollection(coll);
+		
+		//test order by
+		for(QuestionItemDataModel.Cols order: QuestionItemDataModel.Cols.values()) {
+			if(order.sortable()) {
+				SortKey sortAsc = new SortKey(order.name(), true);
+				List<QuestionItemView> ascOrderedItems = qItemQueriesDao.getItems(params, 0, -1, sortAsc);
+				Assert.assertNotNull(ascOrderedItems);
+				
+				SortKey sortDesc = new SortKey(order.name(), false);
+				List<QuestionItemView> descOrderedItems = qItemQueriesDao.getItems(params, 0, -1, sortDesc);
+				Assert.assertNotNull(descOrderedItems);
+			}
+		}
+	}
+	
 	@Test
 	public void getItemsByAuthor() {
 		//create an author with 2 items
-- 
GitLab