package org.sonatype.nexus.integrationtests.nexus4038;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.collection.IsCollectionContaining.hasItem;
import static org.testng.Assert.assertTrue;
import java.util.ArrayList;
import java.util.List;
import org.apache.maven.index.artifact.Gav;
import org.restlet.data.Method;
import org.restlet.data.Response;
import org.restlet.data.Status;
import org.sonatype.nexus.integrationtests.AbstractPrivilegeTest;
import org.sonatype.nexus.integrationtests.RequestFacade;
import org.sonatype.nexus.integrationtests.TestContainer;
import org.sonatype.nexus.test.utils.FeedUtil;
import org.sonatype.nexus.test.utils.GavUtil;
import org.testng.Assert;
import org.testng.annotations.Test;
import com.sun.syndication.feed.synd.SyndEntry;
import com.sun.syndication.feed.synd.SyndFeed;
public class Nexus4038DeleteSystemFeedIT
extends AbstractPrivilegeTest
{
@Test
public void delete()
throws Exception
{
giveUserPrivilege( TEST_USER_NAME, "1000" );
TestContainer.getInstance().getTestContext().useAdminForRequests();
Gav gav = GavUtil.newGav( "nexus4038", "artifact", "1.0" );
assertTrue( Status.isSuccess( getDeployUtils().deployUsingGavWithRest( REPO_TEST_HARNESS_REPO, gav,
getTestFile( "artifact.jar" ) ) ) );
// timeline resolution is _one second_, so to be sure that ordering is kept he keep gaps between operations bigger than one second
Thread.sleep( 1100 );
getEventInspectorsUtil().waitForCalmPeriod();
TestContainer.getInstance().getTestContext().setUsername( TEST_USER_NAME );
TestContainer.getInstance().getTestContext().setPassword( TEST_USER_PASSWORD );
String serviceURI =
"service/local/repositories/" + REPO_TEST_HARNESS_REPO + "/content/"
+ GavUtil.getRelitiveArtifactPath( gav ).replace( ".jar", ".pom" );
Response response = RequestFacade.sendMessage( serviceURI, Method.DELETE );
Status status = response.getStatus();
Assert.assertTrue( status.isSuccess(), "Failed to delete " + gav + status );
// timeline resolution is _one second_, so to be sure that ordering is kept he keep gaps between operations bigger than one second
Thread.sleep( 1100 );
getEventInspectorsUtil().waitForCalmPeriod();
SyndFeed feed = FeedUtil.getFeed( "recentlyChangedArtifacts" );
List<SyndEntry> entries = feed.getEntries();
Assert.assertTrue( entries.size() >= 2, "Expected more than 2 entries, but got " + entries.size() + " - "
+ entries );
List<String> desc = new ArrayList<String>();
for ( SyndEntry entry : entries )
{
desc.add( entry.getDescription().getValue() );
}
assertThat( desc, hasItem( containsString( "deleted.Action was initiated by user \"" + TEST_USER_NAME + "\"" ) ) );
}
}