use of org.xwiki.extension.job.history.ReplayRequest in project xwiki-platform by xwiki.
the class ExtensionHistoryScriptServiceTest method replayWithoutAdmin.
@Test
public void replayWithoutAdmin() throws Exception {
InstallRequest installRequest = new InstallRequest();
installRequest.addNamespace("wiki:dev");
ExtensionJobHistoryRecord install = new ExtensionJobHistoryRecord("install", installRequest, null, null, null);
List<ExtensionJobHistoryRecord> records = Arrays.asList(install);
when(this.xcontext.getWikiId()).thenReturn("dev");
when(this.authorization.hasAccess(Right.ADMIN, new WikiReference("dev"))).thenReturn(false);
Job replayJob = mock(Job.class);
ArgumentCaptor<ReplayRequest> requestCaptor = ArgumentCaptor.forClass(ReplayRequest.class);
when(jobExecutor.execute(eq(ReplayJob.JOB_TYPE), requestCaptor.capture())).thenReturn(replayJob);
assertSame(replayJob, this.mocker.getComponentUnderTest().replay(records));
ReplayRequest request = requestCaptor.getValue();
assertTrue(request.getRecords().isEmpty());
}
use of org.xwiki.extension.job.history.ReplayRequest in project xwiki-platform by xwiki.
the class ExtensionHistoryScriptServiceTest method replayWithAdminButNoPR.
@Test
public void replayWithAdminButNoPR() throws Exception {
InstallRequest installRequest = new InstallRequest();
installRequest.addNamespace("wiki:drafts");
installRequest.setProperty("user.reference", new DocumentReference("drafts", "Users", "Alice"));
ExtensionJobHistoryRecord install = new ExtensionJobHistoryRecord("install", installRequest, null, null, null);
List<ExtensionJobHistoryRecord> records = Arrays.asList(install);
when(this.xcontext.getWikiId()).thenReturn("dev");
when(this.documentAccessBridge.getCurrentUserReference()).thenReturn(new DocumentReference("dev", "Users", "Bob"));
when(this.authorization.hasAccess(Right.ADMIN, new WikiReference("dev"))).thenReturn(true);
when(this.authorization.hasAccess(Right.PROGRAM)).thenReturn(false);
Job replayJob = mock(Job.class);
ArgumentCaptor<ReplayRequest> requestCaptor = ArgumentCaptor.forClass(ReplayRequest.class);
when(jobExecutor.execute(eq(ReplayJob.JOB_TYPE), requestCaptor.capture())).thenReturn(replayJob);
assertSame(replayJob, this.mocker.getComponentUnderTest().replay(records));
ReplayRequest request = requestCaptor.getValue();
assertEquals(Arrays.asList(install), request.getRecords());
assertEquals(Arrays.asList("wiki:dev"), install.getRequest().getNamespaces());
assertEquals(this.documentAccessBridge.getCurrentUserReference(), install.getRequest().getProperty("user.reference"));
}
use of org.xwiki.extension.job.history.ReplayRequest in project xwiki-platform by xwiki.
the class ExtensionHistoryScriptService method replay.
/**
* Replay the given list of extension history records.
*
* @param records the history records to replay
* @return the {@link Job} object that can be used to monitor the progress of the replay process, or {@code null} in
* case of failure
*/
public Job replay(List<ExtensionJobHistoryRecord> records) {
setError(null);
ReplayRequest request = createReplayRequest(createReplayPlan(records, true, null));
try {
return this.jobExecutor.execute(ReplayJob.JOB_TYPE, request);
} catch (JobException e) {
setError(e);
return null;
}
}
use of org.xwiki.extension.job.history.ReplayRequest in project xwiki-platform by xwiki.
the class ExtensionHistoryScriptService method createReplayRequest.
private ReplayRequest createReplayRequest(List<ExtensionJobHistoryRecord> records) {
ReplayRequest request = new ReplayRequest();
String suffix = new Date().getTime() + "-" + ThreadLocalRandom.current().nextInt(100, 1000);
request.setId(getReplayJobId(suffix));
// There may be questions for which there isn't a specified answer.
request.setInteractive(true);
request.setRecords(records);
contextualize(request);
setRightsProperties(request);
return request;
}
use of org.xwiki.extension.job.history.ReplayRequest in project xwiki-platform by xwiki.
the class ExtensionHistoryScriptServiceTest method replayWithPR.
@Test
public void replayWithPR() throws Exception {
InstallRequest installRequest = new InstallRequest();
installRequest.addNamespace("wiki:drafts");
installRequest.setProperty("user.reference", new DocumentReference("drafts", "Users", "Alice"));
ExtensionJobHistoryRecord install = new ExtensionJobHistoryRecord("install", installRequest, null, null, null);
List<ExtensionJobHistoryRecord> records = Arrays.asList(install);
when(this.xcontext.getWikiId()).thenReturn("dev");
when(this.xcontext.getAction()).thenReturn("foo");
when(this.documentAccessBridge.getCurrentUserReference()).thenReturn(new DocumentReference("dev", "Users", "Bob"));
when(this.authorization.hasAccess(Right.ADMIN, new WikiReference("dev"))).thenReturn(true);
when(this.authorization.hasAccess(Right.PROGRAM)).thenReturn(true);
Job replayJob = mock(Job.class);
ArgumentCaptor<ReplayRequest> requestCaptor = ArgumentCaptor.forClass(ReplayRequest.class);
when(jobExecutor.execute(eq(ReplayJob.JOB_TYPE), requestCaptor.capture())).thenReturn(replayJob);
assertSame(replayJob, this.mocker.getComponentUnderTest().replay(records));
ReplayRequest request = requestCaptor.getValue();
assertTrue(StringUtils.join(request.getId(), '/').startsWith("extension/history/"));
assertTrue(request.isInteractive());
assertEquals(Arrays.asList(install), request.getRecords());
assertEquals(this.xcontext.getWikiId(), request.getProperty("context.wiki"));
assertEquals(this.xcontext.getAction(), request.getProperty("context.action"));
assertEquals(this.documentAccessBridge.getCurrentUserReference(), request.getProperty("user.reference"));
assertEquals(Arrays.asList("wiki:drafts"), install.getRequest().getNamespaces());
assertEquals(new DocumentReference("drafts", "Users", "Alice"), install.getRequest().getProperty("user.reference"));
}
Aggregations