Skip to content

Commit

Permalink
XWIKI-22681: Provide a relative ResourceReferenceEntityReferenceResolver
Browse files Browse the repository at this point in the history
  * Continue working on tests
  • Loading branch information
surli committed Nov 27, 2024
1 parent ac9fcab commit c05173d
Show file tree
Hide file tree
Showing 6 changed files with 92 additions and 77 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@
*/
@ComponentTest
@ComponentList({ DefaultSymbolScheme.class })
public class DefaultReferenceEntityReferenceResolverTest implements TestConstants
class DefaultReferenceEntityReferenceResolverTest implements TestConstants
{
@MockComponent
private EntityReferenceProvider referenceProvider;
Expand All @@ -58,7 +58,7 @@ public class DefaultReferenceEntityReferenceResolverTest implements TestConstant
private DefaultReferenceEntityReferenceResolver resolver;

@BeforeComponent
public void beforeComponent()
void beforeComponent()
{
when(this.referenceProvider.getDefaultReference(EntityType.WIKI)).thenReturn(DEFAULT_WIKI_REFERENCE);
when(this.referenceProvider.getDefaultReference(EntityType.SPACE)).thenReturn(DEFAULT_SPACE_REFERENCE);
Expand All @@ -77,7 +77,7 @@ public void beforeComponent()
}

@Test
public void resolveDocumentReferenceWhenMissingParents()
void resolveDocumentReferenceWhenMissingParents()
{
EntityReference partialReference = new EntityReference("document", EntityType.DOCUMENT);

Expand All @@ -88,10 +88,29 @@ public void resolveDocumentReferenceWhenMissingParents()
assertEquals(EntityType.SPACE, reference.getParent().getType());
assertEquals(DEFAULT_WIKI, reference.getParent().getParent().getName());
assertEquals(EntityType.WIKI, reference.getParent().getParent().getType());

partialReference = new EntityReference("WebHome", EntityType.DOCUMENT);
reference = this.resolver.resolve(partialReference, EntityType.DOCUMENT);

assertNotSame(partialReference, reference);
assertEquals(DEFAULT_SPACE, reference.getParent().getName());
assertEquals(EntityType.SPACE, reference.getParent().getType());
assertEquals(DEFAULT_WIKI, reference.getParent().getParent().getName());
assertEquals(EntityType.WIKI, reference.getParent().getParent().getType());

EntityReference spaceReference = new EntityReference("Space", EntityType.SPACE);
partialReference = new EntityReference("WebHome", EntityType.DOCUMENT, spaceReference);
reference = this.resolver.resolve(partialReference, EntityType.DOCUMENT);

assertNotSame(partialReference, reference);
assertEquals("Space", reference.getParent().getName());
assertEquals(EntityType.SPACE, reference.getParent().getType());
assertEquals(DEFAULT_WIKI, reference.getParent().getParent().getName());
assertEquals(EntityType.WIKI, reference.getParent().getParent().getType());
}

@Test
public void resolveAttachmentReferenceWhenMissingParents()
void resolveAttachmentReferenceWhenMissingParents()
{
EntityReference reference =
this.resolver.resolve(new EntityReference("filename", EntityType.ATTACHMENT), EntityType.ATTACHMENT);
Expand All @@ -105,7 +124,7 @@ public void resolveAttachmentReferenceWhenMissingParents()
}

@Test
public void resolveDocumentReferenceWhenMissingParentBetweenReferences()
void resolveDocumentReferenceWhenMissingParentBetweenReferences()
{
EntityReference partialReference =
new EntityReference("document", EntityType.DOCUMENT, new EntityReference("wiki", EntityType.WIKI));
Expand All @@ -121,7 +140,7 @@ public void resolveDocumentReferenceWhenMissingParentBetweenReferences()
}

@Test
public void resolveAttachmentReferenceWhenMissingParentBetweenReferences()
void resolveAttachmentReferenceWhenMissingParentBetweenReferences()
{
EntityReference reference = this.resolver.resolve(
new EntityReference("filename", EntityType.ATTACHMENT, new EntityReference("wiki", EntityType.WIKI)),
Expand All @@ -136,7 +155,7 @@ public void resolveAttachmentReferenceWhenMissingParentBetweenReferences()
}

@Test
public void resolveDocumentReferenceWhenInvalidReference()
void resolveDocumentReferenceWhenInvalidReference()
{
try {
this.resolver.resolve(new EntityReference("document", EntityType.DOCUMENT,
Expand All @@ -149,7 +168,7 @@ public void resolveDocumentReferenceWhenInvalidReference()
}

@Test
public void resolveDocumentReferenceWhenTypeIsSpace()
void resolveDocumentReferenceWhenTypeIsSpace()
{
EntityReference reference =
this.resolver.resolve(new EntityReference("space", EntityType.SPACE), EntityType.DOCUMENT);
Expand All @@ -163,7 +182,7 @@ public void resolveDocumentReferenceWhenTypeIsSpace()
}

@Test
public void resolveSpaceReferenceWhenTypeIsDocument()
void resolveSpaceReferenceWhenTypeIsDocument()
{
EntityReference reference =
this.resolver.resolve(new EntityReference("document", EntityType.DOCUMENT), EntityType.SPACE);
Expand All @@ -178,7 +197,7 @@ public void resolveSpaceReferenceWhenTypeIsDocument()
* Tests that a relative object reference is resolved correctly and completed with the default document parent.
*/
@Test
public void resolveObjectReferenceWhenMissingParents()
void resolveObjectReferenceWhenMissingParents()
{
EntityReference reference =
resolver.resolve(new EntityReference("object", EntityType.OBJECT), EntityType.OBJECT);
Expand All @@ -196,7 +215,7 @@ public void resolveObjectReferenceWhenMissingParents()
* Tests that a relative object property is resolved correctly and completed with the default object parent.
*/
@Test
public void resolveObjectPropertyReferenceWhenMissingParents()
void resolveObjectPropertyReferenceWhenMissingParents()
{
EntityReference reference =
resolver.resolve(new EntityReference("property", EntityType.OBJECT_PROPERTY), EntityType.OBJECT_PROPERTY);
Expand All @@ -217,7 +236,7 @@ public void resolveObjectPropertyReferenceWhenMissingParents()
* values for object name.
*/
@Test
public void resolveObjectReferenceWhenTypeIsDocument()
void resolveObjectReferenceWhenTypeIsDocument()
{
EntityReference reference = resolver.resolve(
new EntityReference("document", EntityType.DOCUMENT,
Expand All @@ -238,7 +257,7 @@ public void resolveObjectReferenceWhenTypeIsDocument()
* values for object and property name.
*/
@Test
public void resolveObjectPropertyReferenceWhenTypeIsDocument()
void resolveObjectPropertyReferenceWhenTypeIsDocument()
{
EntityReference reference = resolver.resolve(
new EntityReference("document", EntityType.DOCUMENT,
Expand All @@ -257,7 +276,7 @@ public void resolveObjectPropertyReferenceWhenTypeIsDocument()
}

@Test
public void resolveDocumentReferenceWhenNullReference()
void resolveDocumentReferenceWhenNullReference()
{
EntityReference reference = this.resolver.resolve(null, EntityType.DOCUMENT);

Expand All @@ -270,7 +289,7 @@ public void resolveDocumentReferenceWhenNullReference()
}

@Test
public void resolvePageReferenceWhenTypeIsDocument()
void resolvePageReferenceWhenTypeIsDocument()
{
EntityReference reference =
this.resolver.resolve(new EntityReference("document", EntityType.DOCUMENT), EntityType.PAGE);
Expand All @@ -283,7 +302,7 @@ public void resolvePageReferenceWhenTypeIsDocument()
}

@Test
public void resolvePageReferenceWhenTypeIsSpace()
void resolvePageReferenceWhenTypeIsSpace()
{
EntityReference reference =
this.resolver.resolve(new EntityReference("space", EntityType.SPACE), EntityType.PAGE);
Expand All @@ -292,7 +311,7 @@ public void resolvePageReferenceWhenTypeIsSpace()
}

@Test
public void resolveDocumentReferenceWhenTypeIsPage()
void resolveDocumentReferenceWhenTypeIsPage()
{
EntityReference reference =
this.resolver.resolve(new EntityReference("page", EntityType.PAGE), EntityType.DOCUMENT);
Expand All @@ -303,11 +322,13 @@ public void resolveDocumentReferenceWhenTypeIsPage()
new EntityReference("page1", EntityType.PAGE, new EntityReference("page2", EntityType.PAGE)),
EntityType.DOCUMENT);

// FIXME: there should be a check if the page exists or not.
// See https://jira.xwiki.org/browse/XWIKI-22699
assertEquals(new DocumentReference(DEFAULT_WIKI, Arrays.asList("page2", "page1"), DEFAULT_DOCUMENT), reference);
}

@Test
public void resolveSpaceReferenceWhenTypeIsPage()
void resolveSpaceReferenceWhenTypeIsPage()
{
EntityReference reference =
this.resolver.resolve(new EntityReference("page", EntityType.PAGE), EntityType.SPACE);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;

/**
* Unit tests for {@link WikiReference}.
Expand All @@ -50,11 +49,4 @@ public void testInvalidParent()
() -> new WikiReference(new EntityReference("wiki", EntityType.WIKI, badParent)));
assertEquals("Unexpected parent [" + badParent + "] in a wiki reference", expected.getMessage());
}

@Test
void instanceOf()
{
assertTrue(new WikiReference("foo") instanceof WikiReference);
assertTrue(new WikiReference("foo") instanceof EntityReference);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -51,31 +51,6 @@ protected AbstractRelativeResourceReferenceEntityReferenceResolver(ResourceType
super(type);
}

@Override
public EntityReference resolve(ResourceReference resourceReference, EntityType entityType, Object... parameters)
{
if (resourceReference == null) {
return null;
}

if (this.resourceType != null && !resourceReference.getType().equals(this.resourceType)) {
throw new IllegalArgumentException(
String.format("You must pass a resource reference of type [%s]. [%s] was passed", this.resourceType,
resourceReference));
}

EntityReference entityReference;
EntityReference baseReference = getBaseReference(resourceReference, parameters);

if (resourceReference.isTyped()) {
entityReference = resolveTyped(resourceReference, baseReference);
} else {
entityReference = resolveUntyped(resourceReference, baseReference);
}

return entityReference;
}

@Override
protected EntityReference getBaseReference(ResourceReference resourceReference, Object... parameters)
{
Expand Down Expand Up @@ -104,12 +79,6 @@ protected EntityReference resolveBaseReference(List<String> baseReferences, Enti
return resolvedBaseReference;
}

@Override
protected EntityReference resolveUntyped(ResourceReference resourceReference, EntityReference baseReference)
{
return resolveTyped(resourceReference, baseReference);
}

@Override
protected EntityReference resolveTyped(ResourceReference resourceReference, EntityReference baseReference)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ protected EntityReference resolveUntyped(ResourceReference resourceReference, En
baseReference);

EntityReference result = relativeReference;
if (relativeReference.extractReference(EntityType.WIKI) != null) {
if (relativeReference != null && relativeReference.extractReference(EntityType.WIKI) != null) {
// Resolve the full document reference
// We don't start from the previously parsed relative reference to not loose "." prefixed reference meaning
DocumentReference reference =
Expand Down
Loading

0 comments on commit c05173d

Please sign in to comment.