Remove archive flag

This commit is contained in:
Rene Pfeuffer
2019-08-20 14:23:52 +02:00
parent 68045c0f3e
commit 3e2c8b7c4b
23 changed files with 8 additions and 349 deletions

View File

@@ -161,7 +161,6 @@ public class ScmConfiguration implements Configuration {
* Authentication realm for basic authentication.
*/
private String realmDescription = HttpUtil.AUTHENTICATION_REALM;
private boolean enableRepositoryArchive = false;
private boolean disableGroupingGrid = false;
/**
* JavaScript date format from moment.js
@@ -218,7 +217,6 @@ public class ScmConfiguration implements Configuration {
this.forceBaseUrl = other.forceBaseUrl;
this.baseUrl = other.baseUrl;
this.disableGroupingGrid = other.disableGroupingGrid;
this.enableRepositoryArchive = other.enableRepositoryArchive;
this.skipFailedAuthenticators = other.skipFailedAuthenticators;
this.loginAttemptLimit = other.loginAttemptLimit;
this.loginAttemptLimitTimeout = other.loginAttemptLimitTimeout;
@@ -343,10 +341,6 @@ public class ScmConfiguration implements Configuration {
return enableProxy;
}
public boolean isEnableRepositoryArchive() {
return enableRepositoryArchive;
}
public boolean isForceBaseUrl() {
return forceBaseUrl;
}
@@ -393,16 +387,6 @@ public class ScmConfiguration implements Configuration {
this.enableProxy = enableProxy;
}
/**
* Enable or disable the repository archive. Default is disabled.
*
* @param enableRepositoryArchive true to disable the repository archive
* @since 1.14
*/
public void setEnableRepositoryArchive(boolean enableRepositoryArchive) {
this.enableRepositoryArchive = enableRepositoryArchive;
}
public void setForceBaseUrl(boolean forceBaseUrl) {
this.forceBaseUrl = forceBaseUrl;
}

View File

@@ -85,7 +85,6 @@ public class Repository extends BasicPropertiesAware implements ModelObject, Per
private Set<RepositoryPermission> permissions = new HashSet<>();
@XmlElement(name = "public")
private boolean publicReadable = false;
private boolean archived = false;
private String type;
@@ -216,16 +215,6 @@ public class Repository extends BasicPropertiesAware implements ModelObject, Per
return type;
}
/**
* Returns true if the repository is archived.
*
* @return true if the repository is archived
* @since 1.14
*/
public boolean isArchived() {
return archived;
}
/**
* Returns {@code true} if the repository is healthy.
*
@@ -264,16 +253,6 @@ public class Repository extends BasicPropertiesAware implements ModelObject, Per
&& ((Util.isEmpty(contact)) || ValidationUtil.isMailAddressValid(contact));
}
/**
* Archive or un archive this repository.
*
* @param archived true to enable archive
* @since 1.14
*/
public void setArchived(boolean archived) {
this.archived = archived;
}
public void setContact(String contact) {
this.contact = contact;
}
@@ -354,7 +333,6 @@ public class Repository extends BasicPropertiesAware implements ModelObject, Per
repository.setDescription(description);
repository.setPermissions(permissions);
repository.setPublicReadable(publicReadable);
repository.setArchived(archived);
// do not copy health check results
}
@@ -383,7 +361,6 @@ public class Repository extends BasicPropertiesAware implements ModelObject, Per
&& Objects.equal(contact, other.contact)
&& Objects.equal(description, other.description)
&& Objects.equal(publicReadable, other.publicReadable)
&& Objects.equal(archived, other.archived)
&& Objects.equal(permissions, other.permissions)
&& Objects.equal(type, other.type)
&& Objects.equal(creationDate, other.creationDate)
@@ -395,7 +372,7 @@ public class Repository extends BasicPropertiesAware implements ModelObject, Per
@Override
public int hashCode() {
return Objects.hashCode(id, namespace, name, contact, description, publicReadable,
archived, permissions, type, creationDate, lastModified, properties,
permissions, type, creationDate, lastModified, properties,
healthCheckFailures);
}
@@ -408,7 +385,6 @@ public class Repository extends BasicPropertiesAware implements ModelObject, Per
.add("contact", contact)
.add("description", description)
.add("publicReadable", publicReadable)
.add("archived", archived)
.add("permissions", permissions)
.add("type", type)
.add("lastModified", lastModified)

View File

@@ -1,48 +0,0 @@
/**
* Copyright (c) 2010, Sebastian Sdorra
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of SCM-Manager; nor the names of its
* contributors may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* http://bitbucket.org/sdorra/scm-manager
*
*/
package sonia.scm.repository;
/**
*
* @author Sebastian Sdorra
*
* @since 1.14
*/
public class RepositoryIsNotArchivedException extends RuntimeException {
private static final long serialVersionUID = 7728748133123987511L;
public RepositoryIsNotArchivedException() {
super("Repository could not be deleted, because it is not archived.");
}
}

View File

@@ -5,6 +5,5 @@
<namespace>space</namespace>
<name>existing</name>
<public>false</public>
<archived>false</archived>
<type>xml</type>
</repositories>

View File

@@ -228,7 +228,6 @@ public class TestData {
.add("contact", "zaphod.beeblebrox@hitchhiker.com")
.add("description", "Heart of Gold")
.add("name", getDefaultRepoName(repositoryType))
.add("archived", false)
.add("type", repositoryType)
.build().toString();
}

View File

@@ -8,7 +8,6 @@ export type Config = {
proxyUser: string | null,
enableProxy: boolean,
realmDescription: string,
enableRepositoryArchive: boolean,
disableGroupingGrid: boolean,
dateFormat: string,
anonymousAccessEnabled: boolean,

View File

@@ -36,7 +36,6 @@
},
"general-settings": {
"realm-description": "Realm Beschreibung",
"enable-repository-archive": "Repository Archiv aktivieren",
"disable-grouping-grid": "Gruppen deaktivieren",
"date-format": "Datumsformat",
"anonymous-access-enabled": "Anonyme Zugriffe erlauben",
@@ -57,7 +56,6 @@
"dateFormatHelpText": "Moments Datumsformat. Zulässige Formate sind in der MomentJS Dokumentation beschrieben.",
"pluginUrlHelpText": "Die URL der Plugin Center API. Beschreibung der Platzhalter: version = SCM-Manager Version; os = Betriebssystem; arch = Architektur",
"enableForwardingHelpText": "mod_proxy Port Weiterleitung aktivieren.",
"enableRepositoryArchiveHelpText": "Repository Archive aktivieren. Nach einer Änderung an dieser Einstellung muss die Seite komplett neu geladen werden.",
"disableGroupingGridHelpText": "Repository Gruppen deaktivieren. Nach einer Änderung an dieser Einstellung muss die Seite komplett neu geladen werden.",
"allowAnonymousAccessHelpText": "Anonyme Benutzer haben Zugriff auf öffentliche Repositories.",
"skipFailedAuthenticatorsHelpText": "Die Kette der Authentifikatoren wird nicht beendet, wenn ein Authentifikator einen Benutzer findet, ihn aber nicht erfolgreich authentifizieren kann.",

View File

@@ -36,7 +36,6 @@
},
"general-settings": {
"realm-description": "Realm Description",
"enable-repository-archive": "Enable Repository Archive",
"disable-grouping-grid": "Disable Grouping Grid",
"date-format": "Date Format",
"anonymous-access-enabled": "Anonymous Access Enabled",
@@ -57,7 +56,6 @@
"dateFormatHelpText": "Moments date format. Please have a look at the MomentJS documentation.",
"pluginUrlHelpText": "The url of the Plugin Center API. Explanation of the placeholders: version = SCM-Manager Version; os = Operation System; arch = Architecture",
"enableForwardingHelpText": "Enable mod_proxy port forwarding.",
"enableRepositoryArchiveHelpText": "Enable repository archives. A complete page reload is required after a change of this value.",
"disableGroupingGridHelpText": "Disable repository Groups. A complete page reload is required after a change of this value.",
"allowAnonymousAccessHelpText": "Anonymous users have read access on public repositories.",
"skipFailedAuthenticatorsHelpText": "Do not stop the authentication chain, if an authenticator finds the user but fails to authenticate the user.",

View File

@@ -16,7 +16,7 @@ type Props = {
configUpdatePermission: boolean,
namespaceStrategies?: NamespaceStrategies,
// context props
t: string => string,
t: string => string
};
type State = {
@@ -41,7 +41,6 @@ class ConfigForm extends React.Component<Props, State> {
proxyUser: null,
enableProxy: false,
realmDescription: "",
enableRepositoryArchive: false,
disableGroupingGrid: false,
dateFormat: "",
anonymousAccessEnabled: false,
@@ -122,7 +121,6 @@ class ConfigForm extends React.Component<Props, State> {
namespaceStrategies={namespaceStrategies}
loginInfoUrl={config.loginInfoUrl}
realmDescription={config.realmDescription}
enableRepositoryArchive={config.enableRepositoryArchive}
disableGroupingGrid={config.disableGroupingGrid}
dateFormat={config.dateFormat}
anonymousAccessEnabled={config.anonymousAccessEnabled}

View File

@@ -8,7 +8,6 @@ import NamespaceStrategySelect from "./NamespaceStrategySelect";
type Props = {
realmDescription: string,
loginInfoUrl: string,
enableRepositoryArchive: boolean,
disableGroupingGrid: boolean,
dateFormat: string,
anonymousAccessEnabled: boolean,

View File

@@ -35,7 +35,6 @@ const config = {
proxyUser: null,
enableProxy: false,
realmDescription: "SONIA :: SCM Manager",
enableRepositoryArchive: false,
disableGroupingGrid: false,
dateFormat: "YYYY-MM-DD HH:mm:ss",
anonymousAccessEnabled: false,
@@ -64,7 +63,6 @@ const configWithNullValues = {
proxyUser: null,
enableProxy: false,
realmDescription: "SONIA :: SCM Manager",
enableRepositoryArchive: false,
disableGroupingGrid: false,
dateFormat: "YYYY-MM-DD HH:mm:ss",
anonymousAccessEnabled: false,

View File

@@ -96,7 +96,6 @@ const hitchhikerRestatend: Repository = {
description: "restaurant at the end of the universe",
namespace: "hitchhiker",
name: "restatend",
archived: false,
type: "git",
_links: {
self: {

View File

@@ -19,7 +19,6 @@ public class ConfigDto extends HalRepresentation {
private String proxyUser;
private boolean enableProxy;
private String realmDescription;
private boolean enableRepositoryArchive;
private boolean disableGroupingGrid;
private String dateFormat;
private boolean anonymousAccessEnabled;

View File

@@ -5,7 +5,6 @@ import com.webcohesion.enunciate.metadata.rs.StatusCodes;
import com.webcohesion.enunciate.metadata.rs.TypeHint;
import sonia.scm.repository.NamespaceAndName;
import sonia.scm.repository.Repository;
import sonia.scm.repository.RepositoryIsNotArchivedException;
import sonia.scm.repository.RepositoryManager;
import sonia.scm.web.VndMediaType;
@@ -63,7 +62,7 @@ public class RepositoryResource {
this.dtoToRepositoryMapper = dtoToRepositoryMapper;
this.manager = manager;
this.repositoryToDtoMapper = repositoryToDtoMapper;
this.adapter = new SingleResourceManagerAdapter<>(manager, Repository.class, this::handleNotArchived);
this.adapter = new SingleResourceManagerAdapter<>(manager, Repository.class);
this.tagRootResource = tagRootResource;
this.branchRootResource = branchRootResource;
this.changesetRootResource = changesetRootResource;
@@ -212,14 +211,6 @@ public class RepositoryResource {
@Path("merge/")
public MergeResource merge() {return mergeResource.get(); }
private Optional<Response> handleNotArchived(Throwable throwable) {
if (throwable instanceof RepositoryIsNotArchivedException) {
return Optional.of(Response.status(Response.Status.PRECONDITION_FAILED).build());
} else {
return Optional.empty();
}
}
private Supplier<Repository> loadBy(String namespace, String name) {
NamespaceAndName namespaceAndName = new NamespaceAndName(namespace, name);
return () -> Optional.ofNullable(manager.get(namespaceAndName)).orElseThrow(() -> notFound(entity(namespaceAndName)));

View File

@@ -7,7 +7,6 @@ import sonia.scm.ModelObject;
import sonia.scm.NotFoundException;
import javax.ws.rs.core.Response;
import java.util.Optional;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;
@@ -28,20 +27,11 @@ import static javax.ws.rs.core.Response.Status.BAD_REQUEST;
class SingleResourceManagerAdapter<MODEL_OBJECT extends ModelObject,
DTO extends HalRepresentation> {
private final Function<Throwable, Optional<Response>> errorHandler;
protected final Manager<MODEL_OBJECT> manager;
protected final Class<MODEL_OBJECT> type;
SingleResourceManagerAdapter(Manager<MODEL_OBJECT> manager, Class<MODEL_OBJECT> type) {
this(manager, type, e -> Optional.empty());
}
SingleResourceManagerAdapter(
Manager<MODEL_OBJECT> manager,
Class<MODEL_OBJECT> type,
Function<Throwable, Optional<Response>> errorHandler) {
this.manager = manager;
this.errorHandler = errorHandler;
this.type = type;
}
@@ -74,12 +64,8 @@ class SingleResourceManagerAdapter<MODEL_OBJECT extends ModelObject,
}
private Response update(MODEL_OBJECT item) {
try {
manager.modify(item);
return Response.noContent().build();
} catch (RuntimeException ex) {
return createErrorResponse(ex);
}
manager.modify(item);
return Response.noContent().build();
}
private boolean modelObjectWasModifiedConcurrently(MODEL_OBJECT existing, MODEL_OBJECT updated) {
@@ -100,22 +86,13 @@ class SingleResourceManagerAdapter<MODEL_OBJECT extends ModelObject,
MODEL_OBJECT item = manager.get(name);
if (item != null) {
try {
manager.delete(item);
return Response.noContent().build();
} catch (RuntimeException ex) {
return createErrorResponse(ex);
}
manager.delete(item);
return Response.noContent().build();
} else {
return Response.noContent().build();
}
}
private Response createErrorResponse(RuntimeException throwable) {
return errorHandler.apply(throwable)
.orElseThrow(() -> throwable);
}
protected String getId(MODEL_OBJECT item) {
return item.getId();
}

View File

@@ -172,9 +172,6 @@ public class DefaultRepositoryManager extends AbstractRepositoryManager {
}
private void preDelete(Repository toDelete) {
if (configuration.isEnableRepositoryArchive() && !toDelete.isArchived()) {
throw new RepositoryIsNotArchivedException();
}
fireEvent(HandlerEventType.BEFORE_DELETE, toDelete);
getHandler(toDelete).delete(toDelete);
}

View File

@@ -168,8 +168,7 @@ public class AuthorizationChangedEventProducer {
}
private boolean isAuthorizationDataModified(Repository repository, Repository beforeModification) {
return repository.isArchived() != beforeModification.isArchived()
|| repository.isPublicReadable() != beforeModification.isPublicReadable()
return repository.isPublicReadable() != beforeModification.isPublicReadable()
|| !(repository.getPermissions().containsAll(beforeModification.getPermissions()) && beforeModification.getPermissions().containsAll(repository.getPermissions()));
}

View File

@@ -91,7 +91,6 @@ public class MigrateVerbsToPermissionRoles implements UpdateStep {
repository.setHealthCheckFailures(oldRepository.healthCheckFailures);
repository.setLastModified(oldRepository.lastModified);
repository.setPublicReadable(oldRepository.publicReadable);
repository.setArchived(oldRepository.archived);
return repository;
}

View File

@@ -37,7 +37,6 @@ public class ConfigDtoToScmConfigurationMapperTest {
assertEquals("user" , config.getProxyUser());
assertTrue(config.isEnableProxy());
assertEquals("realm" , config.getRealmDescription());
assertTrue(config.isEnableRepositoryArchive());
assertTrue(config.isDisableGroupingGrid());
assertEquals("yyyy" , config.getDateFormat());
assertTrue(config.isAnonymousAccessEnabled());
@@ -61,7 +60,6 @@ public class ConfigDtoToScmConfigurationMapperTest {
configDto.setProxyUser("user");
configDto.setEnableProxy(true);
configDto.setRealmDescription("realm");
configDto.setEnableRepositoryArchive(true);
configDto.setDisableGroupingGrid(true);
configDto.setDateFormat("yyyy");
configDto.setAnonymousAccessEnabled(true);

View File

@@ -19,7 +19,6 @@ import org.mockito.Mock;
import sonia.scm.PageResult;
import sonia.scm.repository.NamespaceAndName;
import sonia.scm.repository.Repository;
import sonia.scm.repository.RepositoryIsNotArchivedException;
import sonia.scm.repository.RepositoryManager;
import sonia.scm.repository.api.RepositoryService;
import sonia.scm.repository.api.RepositoryServiceFactory;
@@ -41,7 +40,6 @@ import static javax.servlet.http.HttpServletResponse.SC_CONFLICT;
import static javax.servlet.http.HttpServletResponse.SC_NOT_FOUND;
import static javax.servlet.http.HttpServletResponse.SC_NO_CONTENT;
import static javax.servlet.http.HttpServletResponse.SC_OK;
import static javax.servlet.http.HttpServletResponse.SC_PRECONDITION_FAILED;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
@@ -270,20 +268,6 @@ public class RepositoryRootResourceTest extends RepositoryTestBase {
verify(repositoryManager).delete(anyObject());
}
@Test
public void shouldHandleDeleteIsNotArchivedException() throws Exception {
mockRepository("space", "repo");
doThrow(RepositoryIsNotArchivedException.class).when(repositoryManager).delete(anyObject());
MockHttpRequest request = MockHttpRequest.delete("/" + RepositoryRootResource.REPOSITORIES_PATH_V2 + "space/repo");
MockHttpResponse response = new MockHttpResponse();
dispatcher.invoke(request, response);
assertEquals(SC_PRECONDITION_FAILED, response.getStatus());
}
@Test
public void shouldCreateNewRepositoryInCorrectNamespace() throws Exception {
when(repositoryManager.create(any())).thenAnswer(invocation -> {

View File

@@ -67,7 +67,6 @@ public class ScmConfigurationToConfigDtoMapperTest {
assertEquals("trillian" , dto.getProxyUser());
assertTrue(dto.isEnableProxy());
assertEquals("description" , dto.getRealmDescription());
assertTrue(dto.isEnableRepositoryArchive());
assertTrue(dto.isDisableGroupingGrid());
assertEquals("dd" , dto.getDateFormat());
assertTrue(dto.isAnonymousAccessEnabled());
@@ -106,7 +105,6 @@ public class ScmConfigurationToConfigDtoMapperTest {
config.setProxyUser("trillian");
config.setEnableProxy(true);
config.setRealmDescription("description");
config.setEnableRepositoryArchive(true);
config.setDisableGroupingGrid(true);
config.setDateFormat("dd");
config.setAnonymousAccessEnabled(true);

View File

@@ -1,181 +0,0 @@
/**
* Copyright (c) 2010, Sebastian Sdorra
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of SCM-Manager; nor the names of its
* contributors may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* http://bitbucket.org/sdorra/scm-manager
*
*/
package sonia.scm.it;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import sonia.scm.api.v2.resources.ConfigDto;
import sonia.scm.api.v2.resources.RepositoryDto;
import sonia.scm.web.VndMediaType;
import javax.ws.rs.core.MediaType;
import java.net.URI;
import java.util.Collection;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static sonia.scm.it.IntegrationTestUtil.createAdminClient;
import static sonia.scm.it.IntegrationTestUtil.createResource;
import static sonia.scm.it.IntegrationTestUtil.getLink;
import static sonia.scm.it.IntegrationTestUtil.readJson;
import static sonia.scm.it.IntegrationTestUtil.serialize;
import static sonia.scm.it.RepositoryITUtil.createRepository;
import static sonia.scm.it.RepositoryITUtil.deleteRepository;
/**
*
* @author Sebastian Sdorra
*/
@RunWith(Parameterized.class)
public class RepositoryArchiveITCase
{
/**
* Constructs ...
*
*
* @param type
*/
public RepositoryArchiveITCase(String type)
{
this.type = type;
}
//~--- methods --------------------------------------------------------------
@Parameterized.Parameters(name = "{0}")
public static Collection<String[]> createParameters() {
return IntegrationTestUtil.createRepositoryTypeParameters();
}
/**
* Method description
*
*/
@Before
public void createTestRepository() {
client = createAdminClient();
repository = createRepository(client, readJson("repository-" + type + ".json"));
}
/**
* Method description
*
*/
@After
public void deleteTestRepository()
{
setArchiveMode(false);
if (repository != null)
{
deleteRepository(client, repository);
}
}
/**
* Method description
*
*/
@Test
public void testDeleteAllowed() {
setArchiveMode(true);
repository.setArchived(true);
ClientResponse response = createResource(client,
"repositories/" + repository.getNamespace() + "/" + repository.getName())
.type(VndMediaType.REPOSITORY).put(ClientResponse.class, serialize(repository));
assertNotNull(response);
assertEquals(204, response.getStatus());
response = createResource(client,
"repositories/" + repository.getNamespace() + "/" + repository.getName()).delete(ClientResponse.class);
assertNotNull(response);
assertEquals(204, response.getStatus());
repository = null;
}
/**
* Method description
*
*/
@Test
public void testDeleteDenied()
{
setArchiveMode(true);
URI deleteUrl = getLink(repository, "delete");
ClientResponse response = createResource(client, deleteUrl).delete(ClientResponse.class);
assertNotNull(response);
assertEquals(412, response.getStatus());
response.close();
}
/**
* Method description
*
*
* @param archive
*/
private void setArchiveMode(boolean archive)
{
WebResource.Builder resource = createResource(client, "config").type(MediaType.APPLICATION_JSON);
ConfigDto config = resource.get(ConfigDto.class);
assertNotNull(config);
config.setEnableRepositoryArchive(archive);
ClientResponse resp = createResource(client, "config").type(VndMediaType.CONFIG).put(ClientResponse.class, config);
assertNotNull(resp);
assertEquals(204, resp.getStatus());
}
/** Field description */
private ScmClient client;
/** Field description */
private RepositoryDto repository;
/** Field description */
private String type;
}

View File

@@ -13,7 +13,6 @@
<enableSSL>false</enableSSL>
<enablePortForward>false</enablePortForward>
<sslPort>8181</sslPort>
<enableRepositoryArchive>false</enableRepositoryArchive>
<disableGroupingGrid>false</disableGroupingGrid>
<dateFormat>Y-m-d H:i:s</dateFormat>
<anonymousAccessEnabled>false</anonymousAccessEnabled>