| @@ 62-174 (lines=113) @@ | ||
| 59 | * @link http://datasift.github.io/storyplayer |
|
| 60 | */ |
|
| 61 | ||
| 62 | class ActionPhase extends StoryPhase |
|
| 63 | { |
|
| 64 | protected $sequenceNo = 5; |
|
| 65 | ||
| 66 | public function doPhase($story) |
|
| 67 | { |
|
| 68 | // shorthand |
|
| 69 | $st = $this->st; |
|
| 70 | $storyResult = $story->getResult(); |
|
| 71 | ||
| 72 | // keep track of what happens with the action |
|
| 73 | $phaseResult = $this->getNewPhaseResult(); |
|
| 74 | ||
| 75 | // do we have anything to do? |
|
| 76 | if (!$story->hasActions()) |
|
| 77 | { |
|
| 78 | $phaseResult->setContinuePlaying( |
|
| 79 | $phaseResult::HASNOACTIONS, |
|
| 80 | "story has no action instructions" |
|
| 81 | ); |
|
| 82 | return $phaseResult; |
|
| 83 | } |
|
| 84 | ||
| 85 | try { |
|
| 86 | // do any setup |
|
| 87 | $this->doPerPhaseSetup(); |
|
| 88 | ||
| 89 | $callbacks = $story->getAction(); |
|
| 90 | foreach ($callbacks as $action) { |
|
| 91 | if (is_callable($action)) { |
|
| 92 | call_user_func($action,$st); |
|
| 93 | } |
|
| 94 | } |
|
| 95 | ||
| 96 | // if we get here, all is well |
|
| 97 | if ($storyResult->getStoryShouldFail()) { |
|
| 98 | $phaseResult->setPlayingFailed( |
|
| 99 | $phaseResult::COMPLETED, |
|
| 100 | "action completed successfully; was expected to fail" |
|
| 101 | ); |
|
| 102 | $storyResult->setStoryHasFailed($phaseResult); |
|
| 103 | } |
|
| 104 | else { |
|
| 105 | $phaseResult->setContinuePlaying(); |
|
| 106 | } |
|
| 107 | } |
|
| 108 | ||
| 109 | // if the set of actions fails, it will throw this exception |
|
| 110 | catch (ActionFailedException $e) { |
|
| 111 | if ($storyResult->getStoryShouldFail()) { |
|
| 112 | $phaseResult->setContinuePlaying( |
|
| 113 | $phaseResult::FAILED, |
|
| 114 | $e->getMessage(), |
|
| 115 | $e |
|
| 116 | ); |
|
| 117 | } |
|
| 118 | else { |
|
| 119 | $phaseResult->setPlayingFailed( |
|
| 120 | $phaseResult::FAILED, |
|
| 121 | $e->getMessage(), |
|
| 122 | $e |
|
| 123 | ); |
|
| 124 | $storyResult->setStoryHasFailed($phaseResult); |
|
| 125 | } |
|
| 126 | } |
|
| 127 | catch (ExpectFailedException $e) { |
|
| 128 | if ($storyResult->getStoryShouldFail()) { |
|
| 129 | $phaseResult->setContinuePlaying( |
|
| 130 | $phaseResult::FAILED, |
|
| 131 | $e->getMessage(), |
|
| 132 | $e |
|
| 133 | ); |
|
| 134 | } |
|
| 135 | else { |
|
| 136 | $phaseResult->setPlayingFailed( |
|
| 137 | $phaseResult::FAILED, |
|
| 138 | $e->getMessage(), |
|
| 139 | $e |
|
| 140 | ); |
|
| 141 | $storyResult->setStoryHasFailed($phaseResult); |
|
| 142 | } |
|
| 143 | } |
|
| 144 | ||
| 145 | // we treat this as a hard failure |
|
| 146 | catch (NotImplementedException $e) { |
|
| 147 | $phaseResult->setPlayingFailed( |
|
| 148 | $phaseResult::INCOMPLETE, |
|
| 149 | $e->getMessage(), |
|
| 150 | $e |
|
| 151 | ); |
|
| 152 | $storyResult->setStoryIsIncomplete($phaseResult); |
|
| 153 | } |
|
| 154 | ||
| 155 | // if this happens, something has gone badly wrong |
|
| 156 | catch (Exception $e) { |
|
| 157 | $phaseResult->setPlayingFailed( |
|
| 158 | $phaseResult::ERROR, |
|
| 159 | $e->getMessage(), |
|
| 160 | $e |
|
| 161 | ); |
|
| 162 | $storyResult->setStoryHasError($phaseResult); |
|
| 163 | } |
|
| 164 | ||
| 165 | // close off any open log actions |
|
| 166 | $st->closeAllOpenActions(); |
|
| 167 | ||
| 168 | // tidy up after ourselves |
|
| 169 | $this->doPerPhaseTeardown(); |
|
| 170 | ||
| 171 | // all done |
|
| 172 | return $phaseResult; |
|
| 173 | } |
|
| 174 | } |
|
| 175 | ||
| @@ 63-175 (lines=113) @@ | ||
| 60 | * @link http://datasift.github.io/storyplayer |
|
| 61 | */ |
|
| 62 | ||
| 63 | class PostTestInspectionPhase extends StoryPhase |
|
| 64 | { |
|
| 65 | protected $sequenceNo = 6; |
|
| 66 | ||
| 67 | public function doPhase($story) |
|
| 68 | { |
|
| 69 | // shorthand |
|
| 70 | $st = $this->st; |
|
| 71 | $storyResult = $story->getResult(); |
|
| 72 | ||
| 73 | // our results object |
|
| 74 | $phaseResult = $this->getNewPhaseResult(); |
|
| 75 | ||
| 76 | try { |
|
| 77 | // do we have anything to do? |
|
| 78 | if (!$story->hasPostTestInspection()) |
|
| 79 | { |
|
| 80 | $phaseResult->setContinuePlaying( |
|
| 81 | $phaseResult::HASNOACTIONS, |
|
| 82 | "story has no post-test inspection instructions" |
|
| 83 | ); |
|
| 84 | return $phaseResult; |
|
| 85 | } |
|
| 86 | ||
| 87 | // do any necessary setup |
|
| 88 | $this->doPerPhaseSetup(); |
|
| 89 | ||
| 90 | // make the call |
|
| 91 | $story = $st->getStory(); |
|
| 92 | $callbacks = $story->getPostTestInspection(); |
|
| 93 | foreach ($callbacks as $callback) { |
|
| 94 | if (is_callable($callback)) { |
|
| 95 | call_user_func($callback, $st); |
|
| 96 | } |
|
| 97 | } |
|
| 98 | ||
| 99 | // if we get here, the post-test inspection did not fail |
|
| 100 | // ... but should it have? |
|
| 101 | if ($storyResult->getStoryShouldFail()) { |
|
| 102 | $phaseResult->setPlayingFailed( |
|
| 103 | $phaseResult::SUCCEEDED, |
|
| 104 | "post-test inspection succeeded when it was expected to fail" |
|
| 105 | ); |
|
| 106 | $storyResult->setStoryHasFailed($phaseResult); |
|
| 107 | } |
|
| 108 | else { |
|
| 109 | $phaseResult->setContinuePlaying(); |
|
| 110 | } |
|
| 111 | } |
|
| 112 | catch (ActionFailedException $e) { |
|
| 113 | if ($storyResult->getStoryShouldFail()) { |
|
| 114 | $phaseResult->setContinuePlaying( |
|
| 115 | $phaseResult::SUCCEEDED, |
|
| 116 | $e->getMessage(), |
|
| 117 | $e |
|
| 118 | ); |
|
| 119 | } |
|
| 120 | else { |
|
| 121 | $phaseResult->setPlayingFailed( |
|
| 122 | $phaseResult::FAILED, |
|
| 123 | $e->getMessage(), |
|
| 124 | $e |
|
| 125 | ); |
|
| 126 | $storyResult->setStoryHasFailed($phaseResult); |
|
| 127 | } |
|
| 128 | } |
|
| 129 | catch (ExpectFailedException $e) { |
|
| 130 | if ($storyResult->getStoryShouldFail()) { |
|
| 131 | $phaseResult->setContinuePlaying( |
|
| 132 | $phaseResult::SUCCEEDED, |
|
| 133 | $e->getMessage(), |
|
| 134 | $e |
|
| 135 | ); |
|
| 136 | } |
|
| 137 | else { |
|
| 138 | $phaseResult->setPlayingFailed( |
|
| 139 | $phaseResult::FAILED, |
|
| 140 | $e->getMessage(), |
|
| 141 | $e |
|
| 142 | ); |
|
| 143 | $storyResult->setStoryHasFailed($phaseResult); |
|
| 144 | } |
|
| 145 | } |
|
| 146 | ||
| 147 | // this is treated as a hard fail |
|
| 148 | catch (NotImplementedException $e) { |
|
| 149 | $phaseResult->setPlayingFailed( |
|
| 150 | $phaseResult::INCOMPLETE, |
|
| 151 | $e->getMessage(), |
|
| 152 | $e |
|
| 153 | ); |
|
| 154 | $storyResult->setStoryIsIncomplete($phaseResult); |
|
| 155 | } |
|
| 156 | // this only happens when something has gone very badly wrong |
|
| 157 | catch (Exception $e) { |
|
| 158 | $phaseResult->setPlayingFailed( |
|
| 159 | $phaseResult::ERROR, |
|
| 160 | $e->getMessage(), |
|
| 161 | $e |
|
| 162 | ); |
|
| 163 | $storyResult->setStoryHasError($phaseResult); |
|
| 164 | } |
|
| 165 | ||
| 166 | // close off any open log actions |
|
| 167 | $st->closeAllOpenActions(); |
|
| 168 | ||
| 169 | // tidy up after ourselves |
|
| 170 | $this->doPerPhaseTeardown(); |
|
| 171 | ||
| 172 | // all done |
|
| 173 | return $phaseResult; |
|
| 174 | } |
|
| 175 | } |
|
| 176 | ||