| margaretha | 318fec3 | 2017-10-24 12:11:58 +0200 | [diff] [blame] | 1 | package de.ids_mannheim.korap.dao; |
| margaretha | 1f106f6 | 2017-10-18 22:27:30 +0200 | [diff] [blame] | 2 | |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame^] | 3 | import static org.junit.jupiter.api.Assertions.assertEquals; |
| 4 | import static org.junit.jupiter.api.Assertions.assertThrows; |
| margaretha | 1f106f6 | 2017-10-18 22:27:30 +0200 | [diff] [blame] | 5 | |
| margaretha | f6d5a82 | 2017-10-19 19:51:20 +0200 | [diff] [blame] | 6 | import java.util.Iterator; |
| margaretha | 1f106f6 | 2017-10-18 22:27:30 +0200 | [diff] [blame] | 7 | import java.util.List; |
| 8 | |
| margaretha | f7abb36 | 2018-09-18 20:09:37 +0200 | [diff] [blame] | 9 | import javax.persistence.PersistenceException; |
| 10 | |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame^] | 11 | import org.junit.jupiter.api.Test; |
| margaretha | 1f106f6 | 2017-10-18 22:27:30 +0200 | [diff] [blame] | 12 | import org.springframework.beans.factory.annotation.Autowired; |
| 13 | |
| margaretha | 85273f1 | 2019-02-04 18:13:17 +0100 | [diff] [blame] | 14 | import de.ids_mannheim.korap.config.SpringJerseyTest; |
| Akron | da08015 | 2020-12-03 13:53:29 +0100 | [diff] [blame] | 15 | import de.ids_mannheim.korap.constant.QueryType; |
| 16 | import de.ids_mannheim.korap.constant.ResourceType; |
| margaretha | b097fb0 | 2021-02-22 19:28:33 +0100 | [diff] [blame] | 17 | import de.ids_mannheim.korap.entity.QueryDO; |
| margaretha | 1f106f6 | 2017-10-18 22:27:30 +0200 | [diff] [blame] | 18 | import de.ids_mannheim.korap.exceptions.KustvaktException; |
| margaretha | 9f2cff0 | 2022-01-03 15:42:45 +0100 | [diff] [blame] | 19 | import de.ids_mannheim.korap.exceptions.StatusCodes; |
| margaretha | 61966dd | 2017-10-26 19:32:21 +0200 | [diff] [blame] | 20 | import de.ids_mannheim.korap.user.User; |
| margaretha | 1f106f6 | 2017-10-18 22:27:30 +0200 | [diff] [blame] | 21 | |
| margaretha | 652c4dc | 2021-02-12 17:07:44 +0100 | [diff] [blame] | 22 | public class VirtualCorpusDaoTest extends SpringJerseyTest { |
| margaretha | 1f106f6 | 2017-10-18 22:27:30 +0200 | [diff] [blame] | 23 | |
| 24 | @Autowired |
| margaretha | b097fb0 | 2021-02-22 19:28:33 +0100 | [diff] [blame] | 25 | private QueryDao dao; |
| margaretha | f6d5a82 | 2017-10-19 19:51:20 +0200 | [diff] [blame] | 26 | |
| margaretha | 45dde68 | 2018-01-04 21:33:46 +0100 | [diff] [blame] | 27 | @Test |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame^] | 28 | public void testListVCByType() throws KustvaktException { |
| 29 | List<QueryDO> vcList = dao.retrieveQueryByType(ResourceType.PUBLISHED, null, QueryType.VIRTUAL_CORPUS); |
| margaretha | 45dde68 | 2018-01-04 21:33:46 +0100 | [diff] [blame] | 30 | assertEquals(1, vcList.size()); |
| margaretha | b097fb0 | 2021-02-22 19:28:33 +0100 | [diff] [blame] | 31 | QueryDO vc = vcList.get(0); |
| margaretha | 45dde68 | 2018-01-04 21:33:46 +0100 | [diff] [blame] | 32 | assertEquals(4, vc.getId()); |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame^] | 33 | assertEquals(vc.getName(), "published-vc"); |
| 34 | assertEquals(vc.getCreatedBy(), "marlin"); |
| margaretha | 45dde68 | 2018-01-04 21:33:46 +0100 | [diff] [blame] | 35 | } |
| margaretha | 1f106f6 | 2017-10-18 22:27:30 +0200 | [diff] [blame] | 36 | |
| 37 | @Test |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame^] | 38 | public void testSystemVC() throws KustvaktException { |
| margaretha | f6d5a82 | 2017-10-19 19:51:20 +0200 | [diff] [blame] | 39 | // insert vc |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame^] | 40 | int id = dao.createQuery("system-vc", ResourceType.SYSTEM, QueryType.VIRTUAL_CORPUS, User.CorpusAccess.FREE, "corpusSigle=GOE", "definition", "description", "experimental", false, "test class", null, null); |
| margaretha | f6d5a82 | 2017-10-19 19:51:20 +0200 | [diff] [blame] | 41 | // select vc |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame^] | 42 | List<QueryDO> vcList = dao.retrieveQueryByType(ResourceType.SYSTEM, null, QueryType.VIRTUAL_CORPUS); |
| margaretha | f6d5a82 | 2017-10-19 19:51:20 +0200 | [diff] [blame] | 43 | assertEquals(2, vcList.size()); |
| margaretha | b097fb0 | 2021-02-22 19:28:33 +0100 | [diff] [blame] | 44 | QueryDO vc = dao.retrieveQueryById(id); |
| margaretha | f6d5a82 | 2017-10-19 19:51:20 +0200 | [diff] [blame] | 45 | // delete vc |
| margaretha | b097fb0 | 2021-02-22 19:28:33 +0100 | [diff] [blame] | 46 | dao.deleteQuery(vc); |
| margaretha | f6d5a82 | 2017-10-19 19:51:20 +0200 | [diff] [blame] | 47 | // check if vc has been deleted |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame^] | 48 | KustvaktException exception = assertThrows(KustvaktException.class, () -> { |
| 49 | dao.retrieveQueryById(id); |
| 50 | }); |
| 51 | assertEquals(StatusCodes.NO_RESOURCE_FOUND, exception.getStatusCode().intValue()); |
| margaretha | 1f106f6 | 2017-10-18 22:27:30 +0200 | [diff] [blame] | 52 | } |
| 53 | |
| margaretha | f7abb36 | 2018-09-18 20:09:37 +0200 | [diff] [blame] | 54 | @Test |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame^] | 55 | public void testNonUniqueVC() throws KustvaktException { |
| 56 | PersistenceException exception = assertThrows(PersistenceException.class, () -> { |
| 57 | dao.createQuery("system-vc", ResourceType.SYSTEM, QueryType.VIRTUAL_CORPUS, User.CorpusAccess.FREE, "corpusSigle=GOE", "definition", "description", "experimental", false, "system", null, null); |
| 58 | }); |
| 59 | assertEquals(exception.getMessage(), "org.hibernate.exception.GenericJDBCException: could not execute statement"); |
| margaretha | f7abb36 | 2018-09-18 20:09:37 +0200 | [diff] [blame] | 60 | } |
| margaretha | 1f106f6 | 2017-10-18 22:27:30 +0200 | [diff] [blame] | 61 | |
| 62 | @Test |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame^] | 63 | public void retrieveSystemVC() throws KustvaktException { |
| 64 | List<QueryDO> vc = dao.retrieveQueryByType(ResourceType.SYSTEM, null, QueryType.VIRTUAL_CORPUS); |
| margaretha | f6d5a82 | 2017-10-19 19:51:20 +0200 | [diff] [blame] | 65 | assertEquals(1, vc.size()); |
| margaretha | 1f106f6 | 2017-10-18 22:27:30 +0200 | [diff] [blame] | 66 | } |
| 67 | |
| margaretha | f7abb36 | 2018-09-18 20:09:37 +0200 | [diff] [blame] | 68 | /** |
| 69 | * retrieve private and group VC |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame^] | 70 | * |
| margaretha | f6d5a82 | 2017-10-19 19:51:20 +0200 | [diff] [blame] | 71 | * @throws KustvaktException |
| 72 | */ |
| margaretha | 1f106f6 | 2017-10-18 22:27:30 +0200 | [diff] [blame] | 73 | @Test |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame^] | 74 | public void retrieveVCByUserDory() throws KustvaktException { |
| 75 | List<QueryDO> virtualCorpora = dao.retrieveQueryByUser("dory", QueryType.VIRTUAL_CORPUS); |
| margaretha | f7abb36 | 2018-09-18 20:09:37 +0200 | [diff] [blame] | 76 | // System.out.println(virtualCorpora); |
| margaretha | 71e6fca | 2018-01-18 18:11:48 +0100 | [diff] [blame] | 77 | assertEquals(4, virtualCorpora.size()); |
| margaretha | 98ec15b | 2018-01-22 17:14:02 +0100 | [diff] [blame] | 78 | // ordered by id |
| margaretha | b097fb0 | 2021-02-22 19:28:33 +0100 | [diff] [blame] | 79 | Iterator<QueryDO> i = virtualCorpora.iterator(); |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame^] | 80 | assertEquals(i.next().getName(), "dory-vc"); |
| 81 | assertEquals(i.next().getName(), "group-vc"); |
| 82 | assertEquals(i.next().getName(), "system-vc"); |
| 83 | assertEquals(i.next().getName(), "published-vc"); |
| margaretha | 1f106f6 | 2017-10-18 22:27:30 +0200 | [diff] [blame] | 84 | } |
| 85 | |
| margaretha | f7abb36 | 2018-09-18 20:09:37 +0200 | [diff] [blame] | 86 | /** |
| 87 | * retrieves group VC and |
| 88 | * excludes hidden published VC (user has never used it) |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame^] | 89 | * |
| margaretha | f6d5a82 | 2017-10-19 19:51:20 +0200 | [diff] [blame] | 90 | * @throws KustvaktException |
| 91 | */ |
| margaretha | 1f106f6 | 2017-10-18 22:27:30 +0200 | [diff] [blame] | 92 | @Test |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame^] | 93 | public void retrieveVCByUserNemo() throws KustvaktException { |
| 94 | List<QueryDO> virtualCorpora = dao.retrieveQueryByUser("nemo", QueryType.VIRTUAL_CORPUS); |
| margaretha | 98ec15b | 2018-01-22 17:14:02 +0100 | [diff] [blame] | 95 | assertEquals(3, virtualCorpora.size()); |
| margaretha | b097fb0 | 2021-02-22 19:28:33 +0100 | [diff] [blame] | 96 | Iterator<QueryDO> i = virtualCorpora.iterator(); |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame^] | 97 | assertEquals(i.next().getName(), "group-vc"); |
| 98 | assertEquals(i.next().getName(), "system-vc"); |
| 99 | assertEquals(i.next().getName(), "nemo-vc"); |
| margaretha | 1f106f6 | 2017-10-18 22:27:30 +0200 | [diff] [blame] | 100 | } |
| 101 | |
| margaretha | f7abb36 | 2018-09-18 20:09:37 +0200 | [diff] [blame] | 102 | /** |
| 103 | * retrieves published VC by the owner and |
| 104 | * excludes group vc when a user is a pending member |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame^] | 105 | * |
| margaretha | f6d5a82 | 2017-10-19 19:51:20 +0200 | [diff] [blame] | 106 | * @throws KustvaktException |
| 107 | */ |
| 108 | @Test |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame^] | 109 | public void retrieveVCByUserMarlin() throws KustvaktException { |
| 110 | List<QueryDO> virtualCorpora = dao.retrieveQueryByUser("marlin", QueryType.VIRTUAL_CORPUS); |
| margaretha | 98ec15b | 2018-01-22 17:14:02 +0100 | [diff] [blame] | 111 | assertEquals(3, virtualCorpora.size()); |
| margaretha | b097fb0 | 2021-02-22 19:28:33 +0100 | [diff] [blame] | 112 | Iterator<QueryDO> i = virtualCorpora.iterator(); |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame^] | 113 | assertEquals(i.next().getName(), "system-vc"); |
| 114 | assertEquals(i.next().getName(), "published-vc"); |
| 115 | assertEquals(i.next().getName(), "marlin-vc"); |
| margaretha | f6d5a82 | 2017-10-19 19:51:20 +0200 | [diff] [blame] | 116 | } |
| 117 | |
| margaretha | f7abb36 | 2018-09-18 20:09:37 +0200 | [diff] [blame] | 118 | /** |
| 119 | * retrieves published VC from an auto-generated hidden group and |
| 120 | * excludes group vc when a user is a deleted member |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame^] | 121 | * |
| margaretha | f6d5a82 | 2017-10-19 19:51:20 +0200 | [diff] [blame] | 122 | * @throws KustvaktException |
| 123 | */ |
| 124 | @Test |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame^] | 125 | public void retrieveVCByUserPearl() throws KustvaktException { |
| 126 | List<QueryDO> virtualCorpora = dao.retrieveQueryByUser("pearl", QueryType.VIRTUAL_CORPUS); |
| margaretha | f6d5a82 | 2017-10-19 19:51:20 +0200 | [diff] [blame] | 127 | assertEquals(2, virtualCorpora.size()); |
| margaretha | b097fb0 | 2021-02-22 19:28:33 +0100 | [diff] [blame] | 128 | Iterator<QueryDO> i = virtualCorpora.iterator(); |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame^] | 129 | assertEquals(i.next().getName(), "system-vc"); |
| 130 | assertEquals(i.next().getName(), "published-vc"); |
| margaretha | 1f106f6 | 2017-10-18 22:27:30 +0200 | [diff] [blame] | 131 | } |
| margaretha | 1f106f6 | 2017-10-18 22:27:30 +0200 | [diff] [blame] | 132 | } |