use of com.yahoo.elide.core.PersistentResource in project elide by yahoo.
the class LifeCycleTest method testDelete.
@Test
public void testDelete() {
FieldTestModel mockModel = mock(FieldTestModel.class);
DataStoreTransaction tx = mock(DataStoreTransaction.class);
RequestScope scope = buildRequestScope(dictionary, tx);
when(tx.createNewObject(ClassType.of(FieldTestModel.class), scope)).thenReturn(mockModel);
PersistentResource resource = new PersistentResource(mockModel, "1", scope);
resource.deleteResource();
verify(mockModel, times(1)).classCallback(any(), any());
verify(mockModel, times(1)).classCallback(eq(DELETE), eq(PRESECURITY));
verify(mockModel, never()).relationCallback(any(), any(), any());
verify(mockModel, never()).classAllFieldsCallback(any(), any());
verify(mockModel, never()).attributeCallback(any(), any(), any());
clearInvocations(mockModel);
scope.runQueuedPreSecurityTriggers();
verify(mockModel, never()).classAllFieldsCallback(any(), any());
verify(mockModel, never()).classCallback(any(), any());
verify(mockModel, never()).attributeCallback(any(), any(), any());
verify(mockModel, never()).relationCallback(any(), any(), any());
clearInvocations(mockModel);
scope.runQueuedPreFlushTriggers();
verify(mockModel, times(1)).classCallback(any(), any());
verify(mockModel, times(1)).classCallback(eq(DELETE), eq(PREFLUSH));
verify(mockModel, never()).relationCallback(any(), any(), any());
verify(mockModel, never()).classAllFieldsCallback(any(), any());
verify(mockModel, never()).attributeCallback(any(), any(), any());
clearInvocations(mockModel);
scope.runQueuedPreCommitTriggers();
verify(mockModel, times(1)).classCallback(any(), any());
verify(mockModel, times(1)).classCallback(eq(DELETE), eq(PRECOMMIT));
verify(mockModel, never()).relationCallback(any(), any(), any());
verify(mockModel, never()).classAllFieldsCallback(any(), any());
verify(mockModel, never()).attributeCallback(any(), any(), any());
clearInvocations(mockModel);
scope.getPermissionExecutor().executeCommitChecks();
scope.runQueuedPostCommitTriggers();
verify(mockModel, times(1)).classCallback(any(), any());
verify(mockModel, times(1)).classCallback(eq(DELETE), eq(POSTCOMMIT));
verify(mockModel, never()).relationCallback(any(), any(), any());
verify(mockModel, never()).classAllFieldsCallback(any(), any());
verify(mockModel, never()).attributeCallback(any(), any(), any());
}
use of com.yahoo.elide.core.PersistentResource in project elide by yahoo.
the class LifeCycleTest method testAttributeUpdate.
@Test
public void testAttributeUpdate() {
FieldTestModel mockModel = mock(FieldTestModel.class);
DataStoreTransaction tx = mock(DataStoreTransaction.class);
RequestScope scope = buildRequestScope(dictionary, tx);
when(tx.createNewObject(ClassType.of(FieldTestModel.class), scope)).thenReturn(mockModel);
PersistentResource resource = new PersistentResource(mockModel, scope.getUUIDFor(mockModel), scope);
resource.updateAttribute("field", "new value");
verify(mockModel, times(1)).classCallback(any(), any());
verify(mockModel, times(1)).classCallback(eq(UPDATE), eq(PRESECURITY));
verify(mockModel, times(1)).attributeCallback(any(), any(), any());
verify(mockModel, times(1)).attributeCallback(eq(UPDATE), eq(PRESECURITY), notNull());
verify(mockModel, never()).relationCallback(any(), any(), any());
verify(mockModel, never()).classAllFieldsCallback(any(), any());
clearInvocations(mockModel);
scope.runQueuedPreSecurityTriggers();
verify(mockModel, never()).classAllFieldsCallback(any(), any());
verify(mockModel, never()).relationCallback(any(), any(), any());
verify(mockModel, never()).attributeCallback(any(), any(), any());
clearInvocations(mockModel);
scope.runQueuedPreFlushTriggers();
verify(mockModel, times(1)).classCallback(any(), any());
verify(mockModel, times(1)).classCallback(eq(UPDATE), eq(PREFLUSH));
verify(mockModel, times(1)).attributeCallback(any(), any(), any());
verify(mockModel, times(1)).attributeCallback(eq(UPDATE), eq(PREFLUSH), notNull());
clearInvocations(mockModel);
scope.runQueuedPreCommitTriggers();
verify(mockModel, never()).relationCallback(any(), any(), any());
verify(mockModel, never()).classAllFieldsCallback(any(), any());
verify(mockModel, times(1)).classCallback(any(), any());
verify(mockModel, times(1)).classCallback(eq(UPDATE), eq(PRECOMMIT));
verify(mockModel, times(1)).attributeCallback(any(), any(), any());
verify(mockModel, times(1)).attributeCallback(eq(UPDATE), eq(PRECOMMIT), notNull());
clearInvocations(mockModel);
scope.getPermissionExecutor().executeCommitChecks();
scope.runQueuedPostCommitTriggers();
verify(mockModel, never()).relationCallback(any(), any(), any());
verify(mockModel, never()).classAllFieldsCallback(any(), any());
verify(mockModel, times(1)).classCallback(any(), any());
verify(mockModel, times(1)).classCallback(eq(UPDATE), eq(POSTCOMMIT));
verify(mockModel, times(1)).attributeCallback(any(), any(), any());
verify(mockModel, times(1)).attributeCallback(eq(UPDATE), eq(POSTCOMMIT), notNull());
}
use of com.yahoo.elide.core.PersistentResource in project elide by yahoo.
the class AggregationStorePermissionExecutorTest method testUserPermissions.
@Test
public void testUserPermissions() {
@Entity
@Include
@Value
@ReadPermission(expression = "user none or filter check")
class Model {
String filterDim;
long metric;
long metric2;
@ReadPermission(expression = "user all")
public String getFilterDim() {
return filterDim;
}
@ReadPermission(expression = "user none")
public long getMetric() {
return metric;
}
}
com.yahoo.elide.core.RequestScope scope = bindAndgetRequestScope(Model.class);
PermissionExecutor executor = scope.getPermissionExecutor();
// evaluated expression = user all
Assertions.assertEquals(ExpressionResult.PASS, executor.checkUserPermissions(ClassType.of(Model.class), ReadPermission.class, "filterDim"));
// evaluated expression = user none -> ForbiddenAccess
Assertions.assertThrows(ForbiddenAccessException.class, () -> executor.checkUserPermissions(ClassType.of(Model.class), ReadPermission.class, "metric"));
// evaluated expression = null -> false
Assertions.assertEquals(ExpressionResult.PASS, executor.checkSpecificFieldPermissions(new PersistentResource(new Model("dim1", 0, 1), "1", scope), null, ReadPermission.class, "metric2"));
// evaluated expression = (user none or filter check) AND (user all OR user none)
Assertions.assertEquals(ExpressionResult.DEFERRED, executor.checkUserPermissions(ClassType.of(Model.class), ReadPermission.class, new HashSet<>(Arrays.asList("filterDim", "metric"))));
// evaluated expression = (user all OR user none)
Assertions.assertEquals(ExpressionResult.PASS, executor.checkPermission(ReadPermission.class, new PersistentResource(new Model("dim1", 0, 1), "1", scope), new HashSet<>(Arrays.asList("filterDim", "metric"))));
// evaluated expression = (user none OR null)
Assertions.assertEquals(ExpressionResult.PASS, executor.checkPermission(ReadPermission.class, new PersistentResource(new Model("dim1", 0, 1), "1", scope), new HashSet<>(Arrays.asList("metric", "metric2"))));
}
use of com.yahoo.elide.core.PersistentResource in project elide by yahoo.
the class PermissionExecutorTest method newResource.
public <T> PersistentResource<T> newResource(T obj, Class<T> cls, boolean markNew) {
EntityDictionary dictionary = EntityDictionary.builder().checks(TestCheckMappings.MAPPINGS).build();
dictionary.bindEntity(cls);
RequestScope requestScope = new RequestScope(null, null, NO_VERSION, null, null, null, null, null, UUID.randomUUID(), getElideSettings(dictionary));
PersistentResource resource = new PersistentResource<>(obj, requestScope.getUUIDFor(obj), requestScope);
if (markNew) {
requestScope.getNewPersistentResources().add(resource);
}
return resource;
}
use of com.yahoo.elide.core.PersistentResource in project elide by yahoo.
the class PermissionExecutorTest method testUpdateFieldAwareSuccessAll.
@Test
public void testUpdateFieldAwareSuccessAll() {
SampleBean sampleBean = new SampleBean();
sampleBean.id = 1L;
PersistentResource resource = newResource(sampleBean, SampleBean.class, true);
RequestScope requestScope = resource.getRequestScope();
assertEquals(ExpressionResult.DEFERRED, requestScope.getPermissionExecutor().checkSpecificFieldPermissions(resource, new ChangeSpec(null, null, null, null), UpdatePermission.class, "allVisible"));
requestScope.getPermissionExecutor().executeCommitChecks();
}
Aggregations