001/* 002 * Licensed to DuraSpace under one or more contributor license agreements. 003 * See the NOTICE file distributed with this work for additional information 004 * regarding copyright ownership. 005 * 006 * DuraSpace licenses this file to you under the Apache License, 007 * Version 2.0 (the "License"); you may not use this file except in 008 * compliance with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018package org.fcrepo.http.api; 019 020import org.fcrepo.common.db.DbTransactionExecutor; 021import org.fcrepo.kernel.api.Transaction; 022import org.fcrepo.kernel.api.identifiers.FedoraId; 023import org.fcrepo.kernel.api.models.FedoraResource; 024import org.fcrepo.kernel.api.models.ResourceFactory; 025import org.fcrepo.kernel.api.models.Tombstone; 026import org.fcrepo.kernel.api.services.PurgeResourceService; 027import org.junit.Before; 028import org.junit.Test; 029import org.junit.runner.RunWith; 030import org.mockito.Mock; 031import org.mockito.junit.MockitoJUnitRunner; 032 033import javax.servlet.ServletContext; 034import javax.ws.rs.core.Request; 035import javax.ws.rs.core.Response; 036import javax.ws.rs.core.SecurityContext; 037 038import static javax.ws.rs.core.Response.Status.NOT_FOUND; 039import static javax.ws.rs.core.Response.Status.NO_CONTENT; 040 041import static org.fcrepo.http.commons.test.util.TestHelpers.getUriInfoImpl; 042import static org.junit.Assert.assertEquals; 043import static org.mockito.ArgumentMatchers.any; 044import static org.mockito.ArgumentMatchers.eq; 045import static org.mockito.Mockito.spy; 046import static org.mockito.Mockito.verify; 047import static org.mockito.Mockito.when; 048import static org.springframework.test.util.ReflectionTestUtils.setField; 049 050/** 051 * @author cabeer 052 */ 053@RunWith(MockitoJUnitRunner.Silent.class) 054public class FedoraTombstonesTest { 055 056 private final String path = "/test/object"; 057 058 private final FedoraId fedoraId = FedoraId.create(path); 059 060 private FedoraTombstones testObj; 061 062 @Mock 063 private Request mockRequest; 064 065 @Mock 066 private ServletContext mockServletContext; 067 068 @Mock 069 private Tombstone mockTombstone; 070 071 @Mock 072 private FedoraResource mockDeletedObj; 073 074 @Mock 075 private Transaction mockTransaction; 076 077 @Mock 078 private SecurityContext mockSecurityContext; 079 080 @Mock 081 private PurgeResourceService purgeResourceService; 082 083 @Mock 084 private ResourceFactory resourceFactory; 085 086 @Before 087 public void setUp() throws Exception { 088 089 testObj = spy(new FedoraTombstones(path)); 090 setField(testObj, "transaction", mockTransaction); 091 setField(testObj, "purgeResourceService", purgeResourceService); 092 setField(testObj, "resourceFactory", resourceFactory); 093 setField(testObj, "uriInfo", getUriInfoImpl()); 094 setField(testObj, "securityContext", mockSecurityContext); 095 setField(testObj, "request", mockRequest); 096 setField(testObj, "context", mockServletContext); 097 setField(testObj, "dbTransactionExecutor", new DbTransactionExecutor()); 098 099 when(resourceFactory.getResource((Transaction)any(), eq(fedoraId))).thenReturn(mockTombstone); 100 when(mockTombstone.getDeletedObject()).thenReturn(mockDeletedObj); 101 } 102 103 @Test 104 public void testDelete() { 105 final Response actual = testObj.delete(); 106 assertEquals(NO_CONTENT.getStatusCode(), actual.getStatus()); 107 verify(purgeResourceService).perform(mockTransaction, mockDeletedObj, null); 108 verify(mockTransaction).commitIfShortLived(); 109 } 110 111 /** 112 * If a resource is not deleted, it doesn't return a TombstoneImpl so the fcr:tombstone URI should return 404. 113 */ 114 @Test 115 public void testNotYetDeleted() throws Exception { 116 when(resourceFactory.getResource((Transaction)any(), eq(fedoraId))).thenReturn(mockDeletedObj); 117 final Response actual = testObj.delete(); 118 assertEquals(NOT_FOUND.getStatusCode(), actual.getStatus()); 119 } 120}