@@ -0,0 +1,2581 @@
+package org.realityforge.arez.integration;%0A%0Aimport java.util.List;%0Aimport javax.annotation.Nonnull;%0Aimport org.realityforge.arez.Arez;%0Aimport org.realityforge.arez.ArezContext;%0Aimport org.realityforge.arez.annotations.ArezComponent;%0Aimport org.realityforge.arez.annotations.Observable;%0Aimport org.realityforge.arez.annotations.Repository;%0Aimport org.testng.annotations.Test;%0Aimport static org.testng.Assert.*;%0A%0Apublic class RepositoryExtensionTest%0A  extends AbstractIntegrationTest%0A%7B%0A  interface TestComponentRepositoryExtension%0A    extends RepositoryExtensionTest$TestComponentBaseRepositoryExtension%0A  %7B%0A    @Nonnull%0A    default List%3CTestComponent%3E findAllLike( @Nonnull final String pattern )%0A    %7B%0A      return self().findAllByQuery( c -%3E c.getValue().contains( pattern ) );%0A    %7D%0A  %7D%0A%0A  @ArezComponent%0A  @Repository( extensions = TestComponentRepositoryExtension.class )%0A  static class TestComponent%0A  %7B%0A    private String _value;%0A%0A    TestComponent( final String value )%0A    %7B%0A      _value = value;%0A    %7D%0A%0A    @Observable%0A    String getValue()%0A    %7B%0A      return _value;%0A    %7D%0A%0A    void setValue( final String value )%0A    %7B%0A      _value = value;%0A    %7D%0A  %7D%0A%0A  @Test%0A  public void integrationTest()%0A    throws Throwable%0A  %7B%0A    final ArezContext context = Arez.context();%0A%0A    final RepositoryExtensionTest$TestComponentRepository repository =%0A      RepositoryExtensionTest$TestComponentRepository.newRepository();%0A    final TestComponent component1 = repository.create( %22ABCDEF%22 );%0A    final TestComponent component2 = repository.create( %22CDEFGH%22 );%0A    final TestComponent component3 = repository.create( %22EFGHIJ%22 );%0A%0A    context.action( false, () -%3E assertEquals( repository.findAllLike( %22AB%22 ).size(), 1 ) );%0A    context.action( false, () -%3E assertEquals( repository.findAllLike( %22AB%22 ).contains( component1 ), true ) );%0A    context.action( false, () -%3E assertEquals( repository.findAllLike( %22CD%22 ).size(), 2 ) );%0A    context.action( false, () -%3E assertEquals( repository.findAllLike( %22CD%22 ).contains( component1 ), true ) );%0A    context.action( false, () -%3E assertEquals( repository.findAllLike( %22CD%22 ).contains( component2 ), true ) );%0A    context.action( false, () -%3E assertEquals( repository.findAllLike( %22EF%22 ).size(), 3 ) );%0A    context.action( false, () -%3E assertEquals( repository.findAllLike( %22EF%22 ).contains( component1 ), true ) );%0A    context.action( false, () -%3E assertEquals( repository.findAllLike( %22EF%22 ).contains( component2 ), true ) );%0A    context.action( false, () -%3E assertEquals( repository.findAllLike( %22EF%22 ).contains( component3 ), true ) );%0A  %7D%0A%7D%0A

Add some basic integration tests that use repository extensions