Kraken\_Module\Runtime\RuntimeModelTest::testApiDestroy_BehavesAsIntended PHP Метод

testApiDestroy_BehavesAsIntended() публичный Метод

    public function testApiDestroy_BehavesAsIntended()
    {
        $manager = $this->getMock(RuntimeManager::class, [], [], '', false);
        $manager->expects($this->once())->method('getRuntimes')->will($this->returnValue([]));
        $manager->expects($this->once())->method('destroyRuntimes')->with([], Runtime::DESTROY_FORCE)->will($this->returnValue(null));
        $core = $this->createCore();
        $emitter = $this->createEmitter();
        $loop = $this->createLoop();
        $model = $this->createModel($core, $emitter, ['getRuntimeManager']);
        $model->expects($this->atLeastOnce())->method('getRuntimeManager')->will($this->returnValue($manager));
        $events = [];
        $addEvent = function ($name) use(&$events) {
            $events[] = $name;
        };
        $awaitEvent = function ($name) use($emitter, $addEvent) {
            $emitter->on($name, function () use($name, $addEvent) {
                $addEvent($name);
            });
        };
        $awaitEvent('beforeStop');
        $awaitEvent('stop');
        $awaitEvent('afterStop');
        $awaitEvent('beforeDestroy');
        $awaitEvent('destroy');
        $awaitEvent('afterDestroy');
        $emitter->once('start', function () use($model) {
            $model->destroy()->then($this->expectCallableOnce());
        });
        $model->setLoop($loop);
        $model->create();
        $this->assertSame(Runtime::STATE_DESTROYED, $model->getState());
        $this->assertSame(['beforeStop', 'stop', 'afterStop', 'beforeDestroy', 'destroy', 'afterDestroy'], $events);
        unset($loop);
        unset($model);
        unset($emitter);
        unset($core);
    }