| 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 | 6e79684 | 2023-08-17 15:10:45 +0200 | [diff] [blame] | 9 | import jakarta.persistence.PersistenceException; |
| margaretha | f7abb36 | 2018-09-18 20:09:37 +0200 | [diff] [blame] | 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 |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 28 | public void testListVCByType () throws KustvaktException { |
| 29 | List<QueryDO> vcList = dao.retrieveQueryByType(ResourceType.PUBLISHED, |
| 30 | null, QueryType.VIRTUAL_CORPUS); |
| margaretha | 45dde68 | 2018-01-04 21:33:46 +0100 | [diff] [blame] | 31 | assertEquals(1, vcList.size()); |
| margaretha | b097fb0 | 2021-02-22 19:28:33 +0100 | [diff] [blame] | 32 | QueryDO vc = vcList.get(0); |
| margaretha | 45dde68 | 2018-01-04 21:33:46 +0100 | [diff] [blame] | 33 | assertEquals(4, vc.getId()); |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame] | 34 | assertEquals(vc.getName(), "published-vc"); |
| 35 | assertEquals(vc.getCreatedBy(), "marlin"); |
| margaretha | 45dde68 | 2018-01-04 21:33:46 +0100 | [diff] [blame] | 36 | } |
| margaretha | 1f106f6 | 2017-10-18 22:27:30 +0200 | [diff] [blame] | 37 | |
| 38 | @Test |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 39 | public void testSystemVC () throws KustvaktException { |
| margaretha | f6d5a82 | 2017-10-19 19:51:20 +0200 | [diff] [blame] | 40 | // insert vc |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 41 | int id = dao.createQuery("system-vc", ResourceType.SYSTEM, |
| 42 | QueryType.VIRTUAL_CORPUS, User.CorpusAccess.FREE, |
| 43 | "corpusSigle=GOE", "definition", "description", "experimental", |
| 44 | false, "test class", null, null); |
| margaretha | f6d5a82 | 2017-10-19 19:51:20 +0200 | [diff] [blame] | 45 | // select vc |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 46 | List<QueryDO> vcList = dao.retrieveQueryByType(ResourceType.SYSTEM, |
| 47 | null, QueryType.VIRTUAL_CORPUS); |
| margaretha | f6d5a82 | 2017-10-19 19:51:20 +0200 | [diff] [blame] | 48 | assertEquals(2, vcList.size()); |
| margaretha | b097fb0 | 2021-02-22 19:28:33 +0100 | [diff] [blame] | 49 | QueryDO vc = dao.retrieveQueryById(id); |
| margaretha | f6d5a82 | 2017-10-19 19:51:20 +0200 | [diff] [blame] | 50 | // delete vc |
| margaretha | b097fb0 | 2021-02-22 19:28:33 +0100 | [diff] [blame] | 51 | dao.deleteQuery(vc); |
| margaretha | f6d5a82 | 2017-10-19 19:51:20 +0200 | [diff] [blame] | 52 | // check if vc has been deleted |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 53 | KustvaktException exception = assertThrows(KustvaktException.class, |
| 54 | () -> { |
| 55 | dao.retrieveQueryById(id); |
| 56 | }); |
| 57 | assertEquals(StatusCodes.NO_RESOURCE_FOUND, |
| 58 | exception.getStatusCode().intValue()); |
| margaretha | 1f106f6 | 2017-10-18 22:27:30 +0200 | [diff] [blame] | 59 | } |
| 60 | |
| margaretha | f7abb36 | 2018-09-18 20:09:37 +0200 | [diff] [blame] | 61 | @Test |
| 62 | public void testNonUniqueVC () throws KustvaktException { |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 63 | |
| 64 | PersistenceException exception = assertThrows( |
| 65 | PersistenceException.class, () -> { |
| 66 | dao.createQuery("system-vc", ResourceType.SYSTEM, |
| 67 | QueryType.VIRTUAL_CORPUS, User.CorpusAccess.FREE, |
| 68 | "corpusSigle=GOE", "definition", "description", |
| 69 | "experimental", false, "system", null, null); |
| 70 | }); |
| 71 | |
| margaretha | 93bfbea | 2023-11-06 21:09:21 +0100 | [diff] [blame] | 72 | assertEquals(exception.getMessage(), |
| 73 | "Converting `org.hibernate.exception.GenericJDBCException` " |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 74 | + "to JPA `PersistenceException` : could not execute statement"); |
| margaretha | f7abb36 | 2018-09-18 20:09:37 +0200 | [diff] [blame] | 75 | } |
| margaretha | 1f106f6 | 2017-10-18 22:27:30 +0200 | [diff] [blame] | 76 | |
| 77 | @Test |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 78 | public void retrieveSystemVC () throws KustvaktException { |
| 79 | List<QueryDO> vc = dao.retrieveQueryByType(ResourceType.SYSTEM, null, |
| 80 | QueryType.VIRTUAL_CORPUS); |
| margaretha | f6d5a82 | 2017-10-19 19:51:20 +0200 | [diff] [blame] | 81 | assertEquals(1, vc.size()); |
| margaretha | 1f106f6 | 2017-10-18 22:27:30 +0200 | [diff] [blame] | 82 | } |
| 83 | |
| margaretha | f7abb36 | 2018-09-18 20:09:37 +0200 | [diff] [blame] | 84 | /** |
| 85 | * retrieve private and group VC |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame] | 86 | * |
| margaretha | f6d5a82 | 2017-10-19 19:51:20 +0200 | [diff] [blame] | 87 | * @throws KustvaktException |
| 88 | */ |
| margaretha | 1f106f6 | 2017-10-18 22:27:30 +0200 | [diff] [blame] | 89 | @Test |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 90 | public void retrieveVCByUserDory () throws KustvaktException { |
| 91 | List<QueryDO> virtualCorpora = dao.retrieveQueryByUser("dory", |
| 92 | QueryType.VIRTUAL_CORPUS); |
| margaretha | 340d06a | 2024-07-25 12:14:42 +0200 | [diff] [blame^] | 93 | assertEquals(3, virtualCorpora.size()); |
| margaretha | 98ec15b | 2018-01-22 17:14:02 +0100 | [diff] [blame] | 94 | // ordered by id |
| margaretha | b097fb0 | 2021-02-22 19:28:33 +0100 | [diff] [blame] | 95 | Iterator<QueryDO> i = virtualCorpora.iterator(); |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame] | 96 | assertEquals(i.next().getName(), "dory-vc"); |
| 97 | assertEquals(i.next().getName(), "group-vc"); |
| 98 | assertEquals(i.next().getName(), "system-vc"); |
| margaretha | 1f106f6 | 2017-10-18 22:27:30 +0200 | [diff] [blame] | 99 | } |
| 100 | |
| margaretha | f7abb36 | 2018-09-18 20:09:37 +0200 | [diff] [blame] | 101 | /** |
| 102 | * retrieves group VC and |
| 103 | * excludes hidden published VC (user has never used it) |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame] | 104 | * |
| margaretha | f6d5a82 | 2017-10-19 19:51:20 +0200 | [diff] [blame] | 105 | * @throws KustvaktException |
| 106 | */ |
| margaretha | 1f106f6 | 2017-10-18 22:27:30 +0200 | [diff] [blame] | 107 | @Test |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 108 | public void retrieveVCByUserNemo () throws KustvaktException { |
| 109 | List<QueryDO> virtualCorpora = dao.retrieveQueryByUser("nemo", |
| 110 | QueryType.VIRTUAL_CORPUS); |
| margaretha | 340d06a | 2024-07-25 12:14:42 +0200 | [diff] [blame^] | 111 | assertEquals(2, 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(), "nemo-vc"); |
| margaretha | 1f106f6 | 2017-10-18 22:27:30 +0200 | [diff] [blame] | 115 | } |
| 116 | |
| margaretha | f7abb36 | 2018-09-18 20:09:37 +0200 | [diff] [blame] | 117 | /** |
| 118 | * retrieves published VC by the owner and |
| 119 | * excludes group vc when a user is a pending member |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame] | 120 | * |
| margaretha | f6d5a82 | 2017-10-19 19:51:20 +0200 | [diff] [blame] | 121 | * @throws KustvaktException |
| 122 | */ |
| 123 | @Test |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 124 | public void retrieveVCByUserMarlin () throws KustvaktException { |
| 125 | List<QueryDO> virtualCorpora = dao.retrieveQueryByUser("marlin", |
| 126 | QueryType.VIRTUAL_CORPUS); |
| margaretha | 98ec15b | 2018-01-22 17:14:02 +0100 | [diff] [blame] | 127 | assertEquals(3, 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"); |
| 131 | assertEquals(i.next().getName(), "marlin-vc"); |
| margaretha | f6d5a82 | 2017-10-19 19:51:20 +0200 | [diff] [blame] | 132 | } |
| 133 | |
| margaretha | f7abb36 | 2018-09-18 20:09:37 +0200 | [diff] [blame] | 134 | /** |
| 135 | * retrieves published VC from an auto-generated hidden group and |
| 136 | * excludes group vc when a user is a deleted member |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame] | 137 | * |
| margaretha | f6d5a82 | 2017-10-19 19:51:20 +0200 | [diff] [blame] | 138 | * @throws KustvaktException |
| 139 | */ |
| 140 | @Test |
| margaretha | 35e1ca2 | 2023-11-16 22:00:01 +0100 | [diff] [blame] | 141 | public void retrieveVCByUserPearl () throws KustvaktException { |
| 142 | List<QueryDO> virtualCorpora = dao.retrieveQueryByUser("pearl", |
| 143 | QueryType.VIRTUAL_CORPUS); |
| margaretha | 340d06a | 2024-07-25 12:14:42 +0200 | [diff] [blame^] | 144 | assertEquals(1, virtualCorpora.size()); |
| margaretha | b097fb0 | 2021-02-22 19:28:33 +0100 | [diff] [blame] | 145 | Iterator<QueryDO> i = virtualCorpora.iterator(); |
| Marc Kupietz | d43a98d | 2023-09-22 17:11:46 +0200 | [diff] [blame] | 146 | assertEquals(i.next().getName(), "system-vc"); |
| margaretha | 1f106f6 | 2017-10-18 22:27:30 +0200 | [diff] [blame] | 147 | } |
| margaretha | 1f106f6 | 2017-10-18 22:27:30 +0200 | [diff] [blame] | 148 | } |