public function testOperationCallsLoadsAndCachesCompiledRequest()
{
$operationTemplateMock = $this->queryTemplateMock('Pinq\\Providers\\DSL\\Compilation\\IOperationTemplate');
$compiledOperationMock = $this->getMockForAbstractClass('Pinq\\Providers\\DSL\\Compilation\\ICompiledOperation');
$cacheMock = $this->queryCacheAdapterMock($operationTemplateMock, $compiledOperationMock);
$configurationMock = $this->getMockBuilder('Pinq\\Providers\\DSL\\RepositoryCompilerConfiguration')->setMethods(['buildCompiledQueryCache', 'createOperationTemplate', 'compileOperationQuery'])->disableOriginalConstructor()->getMockForAbstractClass();
$configurationMock->expects($this->once())->method('buildCompiledQueryCache')->will($this->returnValue($cacheMock));
$configurationMock->expects($this->once())->method('createOperationTemplate')->will($this->returnValue($operationTemplateMock));
$configurationMock->expects($this->once())->method('compileOperationQuery')->will($this->returnValue($compiledOperationMock));
$configurationMock->__construct();
/** @var $provider \Pinq\Providers\DSL\RepositoryProvider|\PHPUnit_Framework_MockObject_MockObject */
$provider = $this->getMockForAbstractClass('Pinq\\Providers\\DSL\\RepositoryProvider', [new Queries\SourceInfo(''), $configurationMock, $this->getMockBuilder('Pinq\\Providers\\DSL\\QueryProvider')->disableOriginalConstructor()->getMockForAbstractClass()]);
$provider->expects($this->once())->method('executeCompiledOperation')->with($this->identicalTo($compiledOperationMock));
$repository = $provider->createRepository();
//Perform operation
$repository->clear();
}