set('module_handler', $this->getMock('Drupal\Core\Extension\ModuleHandlerInterface')); $container->set('current_user', $this->getMock('Drupal\Core\Session\AccountInterface')); $container->set('cache.test', $this->getMock('Drupal\Core\Cache\CacheBackendInterface')); $container->set('comment.statistics', $this->getMock('Drupal\comment\CommentStatisticsInterface')); $request_stack = new RequestStack(); $request_stack->push(Request::create('/')); $container->set('request_stack', $request_stack); $container->setParameter('cache_bins', ['cache.test' => 'test']); $lock = $this->getMock('Drupal\Core\Lock\LockBackendInterface'); $cid = 2; $lock_name = "comment:$cid:.00/"; $lock->expects($this->at(0)) ->method('acquire') ->with($lock_name, 30) ->will($this->returnValue(TRUE)); $lock->expects($this->at(1)) ->method('release') ->with($lock_name); $lock->expects($this->exactly(2)) ->method($this->anything()); $container->set('lock', $lock); $cache_tag_invalidator = $this->getMock('Drupal\Core\Cache\CacheTagsInvalidator'); $container->set('cache_tags.invalidator', $cache_tag_invalidator); \Drupal::setContainer($container); $methods = get_class_methods('Drupal\comment\Entity\Comment'); unset($methods[array_search('preSave', $methods)]); unset($methods[array_search('postSave', $methods)]); $methods[] = 'invalidateTagsOnSave'; $comment = $this->getMockBuilder('Drupal\comment\Entity\Comment') ->disableOriginalConstructor() ->setMethods($methods) ->getMock(); $comment->expects($this->once()) ->method('isNew') ->will($this->returnValue(TRUE)); $comment->expects($this->once()) ->method('hasParentComment') ->will($this->returnValue(TRUE)); $comment->expects($this->once()) ->method('getParentComment') ->will($this->returnValue($comment)); $comment->expects($this->once()) ->method('getCommentedEntityId') ->will($this->returnValue($cid)); $comment->expects($this->any()) ->method('getThread') ->will($this->returnValue('')); $parent_entity = $this->getMock('\Drupal\Core\Entity\ContentEntityInterface'); $parent_entity->expects($this->atLeastOnce()) ->method('getCacheTagsToInvalidate') ->willReturn(['node:1']); $comment->expects($this->once()) ->method('getCommentedEntity') ->willReturn($parent_entity); $entity_type = $this->getMock('\Drupal\Core\Entity\EntityTypeInterface'); $comment->expects($this->any()) ->method('getEntityType') ->will($this->returnValue($entity_type)); $storage = $this->getMock('Drupal\comment\CommentStorageInterface'); // preSave() should acquire the lock. (This is what's really being tested.) $comment->preSave($storage); // Release the acquired lock before exiting the test. $comment->postSave($storage); } }