mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-09 23:15:43 +01:00
Remove archive flag
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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.");
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,5 @@
|
||||
<namespace>space</namespace>
|
||||
<name>existing</name>
|
||||
<public>false</public>
|
||||
<archived>false</archived>
|
||||
<type>xml</type>
|
||||
</repositories>
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@ export type Config = {
|
||||
proxyUser: string | null,
|
||||
enableProxy: boolean,
|
||||
realmDescription: string,
|
||||
enableRepositoryArchive: boolean,
|
||||
disableGroupingGrid: boolean,
|
||||
dateFormat: string,
|
||||
anonymousAccessEnabled: boolean,
|
||||
|
||||
@@ -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.",
|
||||
|
||||
@@ -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.",
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -8,7 +8,6 @@ import NamespaceStrategySelect from "./NamespaceStrategySelect";
|
||||
type Props = {
|
||||
realmDescription: string,
|
||||
loginInfoUrl: string,
|
||||
enableRepositoryArchive: boolean,
|
||||
disableGroupingGrid: boolean,
|
||||
dateFormat: string,
|
||||
anonymousAccessEnabled: boolean,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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: {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)));
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
} 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();
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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()));
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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 -> {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user