mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-07-24 17:32:48 +00:00
MNT-24637 Add include=aspectNames to favourites API.
This commit is contained in:
@@ -29,6 +29,7 @@ import org.alfresco.utility.testrail.annotation.TestRail;
|
|||||||
public class GetFavoritesTests extends RestTest
|
public class GetFavoritesTests extends RestTest
|
||||||
{
|
{
|
||||||
private static final String ALLOWABLE_OPERATIONS = "allowableOperations";
|
private static final String ALLOWABLE_OPERATIONS = "allowableOperations";
|
||||||
|
private static final String ASPECT_NAMES = "aspectNames";
|
||||||
private UserModel adminUserModel, userModel;
|
private UserModel adminUserModel, userModel;
|
||||||
private SiteModel firstSiteModel;
|
private SiteModel firstSiteModel;
|
||||||
private SiteModel secondSiteModel;
|
private SiteModel secondSiteModel;
|
||||||
@@ -589,4 +590,17 @@ public class GetFavoritesTests extends RestTest
|
|||||||
restClient.onResponse().assertThat().body("list.entries.entry[0].isFavorite", Matchers.notNullValue());
|
restClient.onResponse().assertThat().body("list.entries.entry[0].isFavorite", Matchers.notNullValue());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test(groups = {TestGroup.REST_API, TestGroup.FAVORITES, TestGroup.REGRESSION})
|
||||||
|
@TestRail(section = {TestGroup.REST_API, TestGroup.FAVORITES}, executionType = ExecutionType.REGRESSION,
|
||||||
|
description = "Verify if get favorites response returns aspectNames when requested")
|
||||||
|
public void checkResponsesForGetFavoritesWithAspectNames()
|
||||||
|
{
|
||||||
|
final RestPersonFavoritesModelsCollection adminFavorites = restClient.authenticateUser(adminUserModel).withCoreAPI().usingAuthUser().include(ASPECT_NAMES).getFavorites();
|
||||||
|
restClient.assertStatusCodeIs(HttpStatus.OK);
|
||||||
|
|
||||||
|
adminFavorites.getEntries().stream()
|
||||||
|
.map(RestPersonFavoritesModel::onModel)
|
||||||
|
.forEach(m -> m.assertThat().field(ASPECT_NAMES).isNotEmpty());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -26,6 +26,7 @@
|
|||||||
package org.alfresco.rest.api.impl;
|
package org.alfresco.rest.api.impl;
|
||||||
|
|
||||||
import static org.alfresco.rest.api.Nodes.PARAM_INCLUDE_ALLOWABLEOPERATIONS;
|
import static org.alfresco.rest.api.Nodes.PARAM_INCLUDE_ALLOWABLEOPERATIONS;
|
||||||
|
import static org.alfresco.rest.api.Nodes.PARAM_INCLUDE_ASPECTNAMES;
|
||||||
|
|
||||||
import java.util.AbstractList;
|
import java.util.AbstractList;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -92,7 +93,7 @@ public class FavouritesImpl implements Favourites
|
|||||||
{
|
{
|
||||||
private static final Log logger = LogFactory.getLog(FavouritesImpl.class);
|
private static final Log logger = LogFactory.getLog(FavouritesImpl.class);
|
||||||
|
|
||||||
private static final List<String> ALLOWED_INCLUDES = List.of(PARAM_INCLUDE_PROPERTIES, PARAM_INCLUDE_ALLOWABLEOPERATIONS);
|
private static final List<String> ALLOWED_INCLUDES = List.of(PARAM_INCLUDE_PROPERTIES, PARAM_INCLUDE_ASPECTNAMES, PARAM_INCLUDE_ALLOWABLEOPERATIONS);
|
||||||
|
|
||||||
private People people;
|
private People people;
|
||||||
private Sites sites;
|
private Sites sites;
|
||||||
@@ -191,6 +192,10 @@ public class FavouritesImpl implements Favourites
|
|||||||
{
|
{
|
||||||
fav.setProperties(filteredNodeProperties);
|
fav.setProperties(filteredNodeProperties);
|
||||||
}
|
}
|
||||||
|
if (paramsInclude.contains(PARAM_INCLUDE_ASPECTNAMES))
|
||||||
|
{
|
||||||
|
fav.setAspectNames(node.getAspectNames());
|
||||||
|
}
|
||||||
final List<String> allowableOperations = node.getAllowableOperations();
|
final List<String> allowableOperations = node.getAllowableOperations();
|
||||||
if (CollectionUtils.isNotEmpty(allowableOperations) && paramsInclude.contains(PARAM_INCLUDE_ALLOWABLEOPERATIONS))
|
if (CollectionUtils.isNotEmpty(allowableOperations) && paramsInclude.contains(PARAM_INCLUDE_ALLOWABLEOPERATIONS))
|
||||||
{
|
{
|
||||||
|
@@ -25,6 +25,8 @@
|
|||||||
*/
|
*/
|
||||||
package org.alfresco.rest.api.model;
|
package org.alfresco.rest.api.model;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A document target favourite.
|
* A document target favourite.
|
||||||
*
|
*
|
||||||
@@ -62,4 +64,24 @@ public class DocumentTarget extends Target
|
|||||||
return "DocumentTarget [file=" + file + "]";
|
return "DocumentTarget [file=" + file + "]";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o)
|
||||||
|
{
|
||||||
|
if (this == o)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (o == null || getClass() != o.getClass())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
DocumentTarget that = (DocumentTarget) o;
|
||||||
|
return Objects.equals(file, that.file);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode()
|
||||||
|
{
|
||||||
|
return Objects.hashCode(file);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -28,6 +28,7 @@ package org.alfresco.rest.api.model;
|
|||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
import org.alfresco.rest.framework.resource.UniqueId;
|
import org.alfresco.rest.framework.resource.UniqueId;
|
||||||
|
|
||||||
@@ -43,6 +44,7 @@ public class Favourite
|
|||||||
private Date createdAt;
|
private Date createdAt;
|
||||||
private Target target;
|
private Target target;
|
||||||
private Map<String, Object> properties;
|
private Map<String, Object> properties;
|
||||||
|
private List<String> aspectNames;
|
||||||
private List<String> allowableOperations;
|
private List<String> allowableOperations;
|
||||||
|
|
||||||
public Date getCreatedAt()
|
public Date getCreatedAt()
|
||||||
@@ -86,6 +88,16 @@ public class Favourite
|
|||||||
this.properties = properties;
|
this.properties = properties;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<String> getAspectNames()
|
||||||
|
{
|
||||||
|
return aspectNames;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAspectNames(List<String> aspectNames)
|
||||||
|
{
|
||||||
|
this.aspectNames = aspectNames;
|
||||||
|
}
|
||||||
|
|
||||||
public List<String> getAllowableOperations()
|
public List<String> getAllowableOperations()
|
||||||
{
|
{
|
||||||
return allowableOperations;
|
return allowableOperations;
|
||||||
@@ -99,7 +111,34 @@ public class Favourite
|
|||||||
@Override
|
@Override
|
||||||
public String toString()
|
public String toString()
|
||||||
{
|
{
|
||||||
return "Favourite [targetGuid=" + targetGuid
|
return "Favourite{" +
|
||||||
+ ", createdAt=" + createdAt + ", target=" + target + ", properties=" + properties + "]";
|
"targetGuid='" + targetGuid + '\'' +
|
||||||
|
", createdAt=" + createdAt +
|
||||||
|
", target=" + target +
|
||||||
|
", properties=" + properties +
|
||||||
|
", aspectNames=" + aspectNames +
|
||||||
|
", allowableOperations=" + allowableOperations +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o)
|
||||||
|
{
|
||||||
|
if (this == o)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (o == null || getClass() != o.getClass())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
Favourite favourite = (Favourite) o;
|
||||||
|
return Objects.equals(targetGuid, favourite.targetGuid) && Objects.equals(createdAt, favourite.createdAt) && Objects.equals(target, favourite.target) && Objects.equals(properties, favourite.properties) && Objects.equals(aspectNames, favourite.aspectNames) && Objects.equals(allowableOperations, favourite.allowableOperations);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode()
|
||||||
|
{
|
||||||
|
return Objects.hash(targetGuid, createdAt, target, properties, aspectNames, allowableOperations);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -36,8 +36,6 @@ import org.alfresco.util.testing.category.NonBuildTests;
|
|||||||
@RunWith(Categories.class)
|
@RunWith(Categories.class)
|
||||||
@Categories.ExcludeCategory({DBTests.class, NonBuildTests.class})
|
@Categories.ExcludeCategory({DBTests.class, NonBuildTests.class})
|
||||||
@Suite.SuiteClasses({
|
@Suite.SuiteClasses({
|
||||||
// [classpath:alfresco/application-context.xml, classpath:alfresco/web-scripts-application-context-test.xml,
|
|
||||||
// classpath:alfresco/web-scripts-application-context.xml]
|
|
||||||
org.alfresco.repo.web.scripts.quickshare.QuickShareRestApiTest.class,
|
org.alfresco.repo.web.scripts.quickshare.QuickShareRestApiTest.class,
|
||||||
org.alfresco.repo.web.scripts.admin.AdminWebScriptTest.class,
|
org.alfresco.repo.web.scripts.admin.AdminWebScriptTest.class,
|
||||||
org.alfresco.repo.web.scripts.audit.AuditWebScriptTest.class,
|
org.alfresco.repo.web.scripts.audit.AuditWebScriptTest.class,
|
||||||
@@ -78,6 +76,7 @@ import org.alfresco.util.testing.category.NonBuildTests;
|
|||||||
org.alfresco.repo.web.scripts.node.NodeWebScripTest.class,
|
org.alfresco.repo.web.scripts.node.NodeWebScripTest.class,
|
||||||
org.alfresco.rest.api.impl.CommentsImplUnitTest.class,
|
org.alfresco.rest.api.impl.CommentsImplUnitTest.class,
|
||||||
org.alfresco.rest.api.impl.DownloadsImplCheckArchiveStatusUnitTest.class,
|
org.alfresco.rest.api.impl.DownloadsImplCheckArchiveStatusUnitTest.class,
|
||||||
|
org.alfresco.rest.api.impl.FavouritesImplUnitTest.class,
|
||||||
org.alfresco.rest.api.impl.RestApiDirectUrlConfigUnitTest.class
|
org.alfresco.rest.api.impl.RestApiDirectUrlConfigUnitTest.class
|
||||||
})
|
})
|
||||||
public class AppContext04TestSuite
|
public class AppContext04TestSuite
|
||||||
|
@@ -0,0 +1,134 @@
|
|||||||
|
/*
|
||||||
|
* #%L
|
||||||
|
* Alfresco Remote API
|
||||||
|
* %%
|
||||||
|
* Copyright (C) 2005 - 2020 Alfresco Software Limited
|
||||||
|
* %%
|
||||||
|
* This file is part of the Alfresco software.
|
||||||
|
* If the software was purchased under a paid Alfresco license, the terms of
|
||||||
|
* the paid license agreement will prevail. Otherwise, the software is
|
||||||
|
* provided under the following open source license terms:
|
||||||
|
*
|
||||||
|
* Alfresco is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Alfresco is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
* #L%
|
||||||
|
*/
|
||||||
|
package org.alfresco.rest.api.impl;
|
||||||
|
|
||||||
|
import static java.util.Collections.singleton;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.mockito.ArgumentMatchers.anyString;
|
||||||
|
import static org.mockito.Mockito.mock;
|
||||||
|
import static org.mockito.Mockito.when;
|
||||||
|
import static org.mockito.MockitoAnnotations.openMocks;
|
||||||
|
|
||||||
|
import static org.alfresco.model.ContentModel.TYPE_CONTENT;
|
||||||
|
import static org.alfresco.service.cmr.favourites.FavouritesService.Type.FILE;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.mockito.InjectMocks;
|
||||||
|
import org.mockito.Mock;
|
||||||
|
|
||||||
|
import org.alfresco.repo.favourites.PersonFavourite;
|
||||||
|
import org.alfresco.rest.api.Nodes;
|
||||||
|
import org.alfresco.rest.api.People;
|
||||||
|
import org.alfresco.rest.api.model.Document;
|
||||||
|
import org.alfresco.rest.api.model.DocumentTarget;
|
||||||
|
import org.alfresco.rest.api.model.Favourite;
|
||||||
|
import org.alfresco.rest.framework.resource.parameters.Parameters;
|
||||||
|
import org.alfresco.service.cmr.favourites.FavouritesService;
|
||||||
|
import org.alfresco.service.cmr.repository.NodeRef;
|
||||||
|
import org.alfresco.service.namespace.NamespaceService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unit tests for {@link FavouritesImpl} class.
|
||||||
|
*/
|
||||||
|
public class FavouritesImplUnitTest
|
||||||
|
{
|
||||||
|
static final String NODE_ID = "12345678";
|
||||||
|
static final NodeRef NODE_REF = new NodeRef("favourite://node/" + NODE_ID);
|
||||||
|
static final String PERSON_ID = "personId";
|
||||||
|
static final String ASPECT_NAME = "some:aspect";
|
||||||
|
|
||||||
|
@InjectMocks
|
||||||
|
FavouritesImpl favouritesImpl;
|
||||||
|
@Mock
|
||||||
|
People people;
|
||||||
|
@Mock
|
||||||
|
Nodes nodes;
|
||||||
|
@Mock
|
||||||
|
FavouritesService favouritesService;
|
||||||
|
@Mock
|
||||||
|
NamespaceService namespaceService;
|
||||||
|
@Mock
|
||||||
|
Favourite favourite;
|
||||||
|
@Mock
|
||||||
|
Document document;
|
||||||
|
@Mock
|
||||||
|
PersonFavourite personFavourite;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setUp()
|
||||||
|
{
|
||||||
|
openMocks(this);
|
||||||
|
|
||||||
|
when(nodes.getDocument(NODE_REF)).thenReturn(document);
|
||||||
|
when(nodes.nodeMatches(NODE_REF, singleton(TYPE_CONTENT), null)).thenReturn(true);
|
||||||
|
when(document.getGuid()).thenReturn(NODE_REF);
|
||||||
|
when(people.validatePerson(PERSON_ID, true)).thenReturn(PERSON_ID);
|
||||||
|
when(personFavourite.getNodeRef()).thenReturn(NODE_REF);
|
||||||
|
when(personFavourite.getType()).thenReturn(FILE);
|
||||||
|
when(favouritesService.addFavourite(PERSON_ID, NODE_REF)).thenReturn(personFavourite);
|
||||||
|
when(namespaceService.getPrefixes(anyString())).thenReturn(List.of("prefix"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testAddFavourite()
|
||||||
|
{
|
||||||
|
DocumentTarget documentTarget = new DocumentTarget(document);
|
||||||
|
when(favourite.getTarget()).thenReturn(documentTarget);
|
||||||
|
|
||||||
|
Favourite response = favouritesImpl.addFavourite(PERSON_ID, favourite);
|
||||||
|
|
||||||
|
Favourite expected = new Favourite();
|
||||||
|
expected.setTarget(documentTarget);
|
||||||
|
expected.setTargetGuid(NODE_ID);
|
||||||
|
assertEquals(expected, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testAddFavouriteIncludeAspectNames()
|
||||||
|
{
|
||||||
|
List<String> includes = List.of("aspectNames");
|
||||||
|
|
||||||
|
DocumentTarget documentTarget = new DocumentTarget(document);
|
||||||
|
when(favourite.getTarget()).thenReturn(documentTarget);
|
||||||
|
when(nodes.getFolderOrDocument(NODE_REF, null, null, includes, null)).thenReturn(document);
|
||||||
|
when(document.getAspectNames()).thenReturn(List.of(ASPECT_NAME));
|
||||||
|
|
||||||
|
Parameters parameters = mock(Parameters.class);
|
||||||
|
when(parameters.getInclude()).thenReturn(includes);
|
||||||
|
|
||||||
|
Favourite response = favouritesImpl.addFavourite(PERSON_ID, favourite, parameters);
|
||||||
|
|
||||||
|
Favourite expected = new Favourite();
|
||||||
|
expected.setTarget(documentTarget);
|
||||||
|
expected.setTargetGuid(NODE_ID);
|
||||||
|
expected.setAspectNames(List.of(ASPECT_NAME));
|
||||||
|
assertEquals(expected, response);
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user