blob: 6fad6d79d7144330d17f5b4f2f26079479a43e56 [file] [log] [blame]
margaretha7568f782024-07-25 09:55:39 +02001package de.ids_mannheim.korap.web.controller.vc;
2
3import static org.junit.jupiter.api.Assertions.assertEquals;
4
5import org.junit.jupiter.api.Test;
6
7import com.fasterxml.jackson.databind.JsonNode;
8
margaretha2b533302024-07-31 13:49:15 +02009import de.ids_mannheim.korap.constant.PrivilegeType;
margaretha340d06a2024-07-25 12:14:42 +020010import de.ids_mannheim.korap.constant.ResourceType;
margaretha7568f782024-07-25 09:55:39 +020011import de.ids_mannheim.korap.constant.UserGroupStatus;
12import de.ids_mannheim.korap.exceptions.KustvaktException;
13import de.ids_mannheim.korap.exceptions.StatusCodes;
14import jakarta.ws.rs.ProcessingException;
margaretha340d06a2024-07-25 12:14:42 +020015import jakarta.ws.rs.core.Response;
16import jakarta.ws.rs.core.Response.Status;
margaretha7568f782024-07-25 09:55:39 +020017
18public class VirtualCorpusPublishedTest extends VirtualCorpusTestBase{
19
20 private String testUser = "vcPublishedTest";
21
22 @Test
23 public void testCreatePublishedVC () throws KustvaktException {
24 String vcName = "new-published-vc";
25 createPublishedVC(testUser, vcName);
26
27 // test list owner vc
28 JsonNode node = retrieveVCInfo(testUser, testUser, vcName);
29 assertEquals(vcName, node.get("name").asText());
30
31 node = getHiddenGroup(vcName);
32 assertEquals("system", node.at("/owner").asText());
33 assertEquals(UserGroupStatus.HIDDEN.name(),
34 node.at("/status").asText());
35
margaretha340d06a2024-07-25 12:14:42 +020036 testRetrievePublishedVC("gill", testUser, vcName);
margaretha7568f782024-07-25 09:55:39 +020037
margaretha340d06a2024-07-25 12:14:42 +020038 String groupName = node.at("/name").asText();
39 testDeletePublishedVCUnauthorized(testUser, vcName, "gill");
40 testDeletePublishedVC(testUser, vcName, testUser, groupName);
margaretha7568f782024-07-25 09:55:39 +020041 }
42
margaretha340d06a2024-07-25 12:14:42 +020043 private void testRetrievePublishedVC (String username, String vcCreator,
margaretha04836712024-08-16 13:03:56 +020044 String vcName) throws KustvaktException {
margaretha7568f782024-07-25 09:55:39 +020045 retrieveVCInfo(username, vcCreator, vcName);
46
47 JsonNode node = getHiddenGroup(vcName);
margaretha7568f782024-07-25 09:55:39 +020048 assertEquals("system", node.at("/owner").asText());
49 assertEquals(UserGroupStatus.HIDDEN.name(),
50 node.at("/status").asText());
51 assertEquals(username, node.at("/members/0/userId").asText());
margaretha2b533302024-07-31 13:49:15 +020052 assertEquals(1, node.at("/members/0/privileges").size());
53 assertEquals(PrivilegeType.READ_QUERY.name(),
54 node.at("/members/0/privileges/0").asText());
margaretha7568f782024-07-25 09:55:39 +020055 String groupName = node.at("/name").asText();
56
margaretha8fbf40e2024-07-30 09:21:41 +020057 node = listRolesByGroup("admin", groupName);
margaretha7568f782024-07-25 09:55:39 +020058 assertEquals(1, node.size());
59 assertEquals(vcName, node.at("/0/queryName").asText());
60 assertEquals(groupName, node.at("/0/userGroupName").asText());
61 assertEquals(1, node.at("/0/members").size());
62 }
63
margaretha340d06a2024-07-25 12:14:42 +020064 private void testDeletePublishedVC (String vcCreator, String vcName,
65 String deletedBy, String hiddenGroupName) throws KustvaktException {
66 deleteVC(vcName, vcCreator, deletedBy);
67
68 // EM: check if the hidden groups are deleted as well
69 JsonNode node = getHiddenGroup(vcName);
70 assertEquals(StatusCodes.NO_RESOURCE_FOUND,
71 node.at("/errors/0/0").asInt());
72 assertEquals("No hidden group for query " + vcName + " is found",
73 node.at("/errors/0/1").asText());
74
75 testHiddenGroupNotFound(hiddenGroupName);
76 }
77
78 private void testHiddenGroupNotFound (String hiddenGroupName)
79 throws KustvaktException {
margaretha8fbf40e2024-07-30 09:21:41 +020080 JsonNode node = listRolesByGroup("admin", hiddenGroupName);
margaretha340d06a2024-07-25 12:14:42 +020081 assertEquals(StatusCodes.NO_RESOURCE_FOUND,
82 node.at("/errors/0/0").asInt());
83 assertEquals("Group " + hiddenGroupName + " is not found",
84 node.at("/errors/0/1").asText());
85
86 }
87
88 private void testDeletePublishedVCUnauthorized (String vcCreator,
89 String vcName, String deletedBy)
90 throws KustvaktException {
91 Response response = deleteVC(vcName, vcCreator, deletedBy);
92 assertEquals(Status.UNAUTHORIZED.getStatusCode(), response.getStatus());
93 testResponseUnauthorized(response, deletedBy);
94 }
95
margaretha7568f782024-07-25 09:55:39 +020096 @Test
97 public void testMarlinPublishedVC () throws KustvaktException {
98
99 JsonNode node = testListOwnerVC("marlin");
100 assertEquals(2, node.size());
101 node = listVC("marlin");
102 assertEquals(3, node.size());
103
104 String vcName = "marlin-published-vc";
105 createPublishedVC("marlin", vcName);
106
107 node = testListOwnerVC("marlin");
108 assertEquals(3, node.size());
109 node = listVC("marlin");
110 assertEquals(4, node.size());
111
margaretha340d06a2024-07-25 12:14:42 +0200112 String groupName = testSharePublishedVC(vcName);
margaretha7568f782024-07-25 09:55:39 +0200113
margaretha340d06a2024-07-25 12:14:42 +0200114 // dory is a member
115 testDeletePublishedVCUnauthorized("marlin", vcName, "dory");
116 // add dory as group admin
117 addAdminRole(marlinGroupName, "dory", "marlin");
118 testDeletePublishedVCUnauthorized("marlin", vcName, "dory");
119
120 testDeletePublishedVC("marlin",vcName,"marlin", groupName);
margaretha7568f782024-07-25 09:55:39 +0200121
margaretha8fbf40e2024-07-30 09:21:41 +0200122 node = listRolesByGroup("admin", marlinGroupName);
margaretha7568f782024-07-25 09:55:39 +0200123 assertEquals(0, node.size());
124
125 deleteGroupByName(marlinGroupName, "marlin");
126 }
127
margaretha340d06a2024-07-25 12:14:42 +0200128 private String testSharePublishedVC (String vcName) throws KustvaktException {
margaretha7568f782024-07-25 09:55:39 +0200129 createMarlinGroup();
margaretha04836712024-08-16 13:03:56 +0200130 addMember(marlinGroupName, "dory", "marlin");
margaretha7568f782024-07-25 09:55:39 +0200131
132 JsonNode node = listVC("dory");
133 assertEquals(3, node.size());
134
135 shareVC("marlin", vcName, marlinGroupName, "marlin");
136
margaretha340d06a2024-07-25 12:14:42 +0200137 node = listVC("dory");
138 assertEquals(4, node.size());
139 node = listVC("marlin");
140 assertEquals(4, node.size());
141
margaretha7568f782024-07-25 09:55:39 +0200142 // check marlin-group access
margaretha8fbf40e2024-07-30 09:21:41 +0200143 node = listRolesByGroup("admin", marlinGroupName);
margaretha7568f782024-07-25 09:55:39 +0200144 assertEquals(1, node.size());
145 assertEquals(vcName, node.at("/0/queryName").asText());
146 assertEquals(marlinGroupName, node.at("/0/userGroupName").asText());
147 assertEquals(2, node.at("/0/members").size());
148
149 // check hidden group access
150 node = getHiddenGroup(vcName);
151 String hiddenGroupName = node.at("/name").asText();
margaretha8fbf40e2024-07-30 09:21:41 +0200152 node = listRolesByGroup("admin", hiddenGroupName);
margaretha7568f782024-07-25 09:55:39 +0200153 assertEquals(0, node.at("/0/members").size());
154
margaretha340d06a2024-07-25 12:14:42 +0200155 testAddMemberAfterSharingPublishedVC(hiddenGroupName);
156 testRetrievePublishedVC("dory", "marlin", vcName);
157 return hiddenGroupName;
margaretha7568f782024-07-25 09:55:39 +0200158 }
159
margaretha340d06a2024-07-25 12:14:42 +0200160 private void testAddMemberAfterSharingPublishedVC (String hiddenGroupName)
161 throws KustvaktException {
162 JsonNode node = listVC("nemo");
163 assertEquals(2, node.size());
164
margaretha04836712024-08-16 13:03:56 +0200165 addMember(marlinGroupName, "nemo", "marlin");
margaretha340d06a2024-07-25 12:14:42 +0200166
167 node = listVC("nemo");
168 assertEquals(3, node.size());
169
margaretha8fbf40e2024-07-30 09:21:41 +0200170 node = listRolesByGroup("admin", marlinGroupName);
margaretha340d06a2024-07-25 12:14:42 +0200171 assertEquals(3, node.at("/0/members").size());
172
margaretha8fbf40e2024-07-30 09:21:41 +0200173 node = listRolesByGroup("admin", hiddenGroupName);
margaretha340d06a2024-07-25 12:14:42 +0200174 assertEquals(0, node.at("/0/members").size());
175 }
176
177 @Test
178 public void testPublishProjectVC () throws KustvaktException {
179 String vcName = "group-vc";
180 JsonNode node = retrieveVCInfo("dory", "dory", vcName);
181 assertEquals(ResourceType.PROJECT.displayName(),
182 node.get("type").asText());
183
184 // edit PROJECT to PUBLISHED vc
185 String json = "{\"type\": \"PUBLISHED\"}";
186 editVC("dory", "dory", vcName, json);
187
188 // check VC type
189 node = testListOwnerVC("dory");
190 JsonNode n = node.get(1);
191 assertEquals(ResourceType.PUBLISHED.displayName(),
192 n.get("type").asText());
193
194 // check hidden group and roles
195 node = getHiddenGroup(vcName);
196 String hiddenGroupName = node.at("/name").asText();
margaretha8fbf40e2024-07-30 09:21:41 +0200197 node = listRolesByGroup("admin", hiddenGroupName);
margaretha340d06a2024-07-25 12:14:42 +0200198 assertEquals(1, node.size());
199 node = node.get(0);
200 assertEquals(vcName, node.at("/queryName").asText());
201 assertEquals(hiddenGroupName, node.at("/userGroupName").asText());
202
203 // change PUBLISHED to PROJECT
204 json = "{\"type\": \"PROJECT\"}";
205 editVC("dory", "dory", vcName, json);
206 node = testListOwnerVC("dory");
207 assertEquals(ResourceType.PROJECT.displayName(),
208 node.get(1).get("type").asText());
209
210 testHiddenGroupNotFound(hiddenGroupName);
211 }
margaretha7568f782024-07-25 09:55:39 +0200212}