ContactFormTest.php 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <?php
  2. namespace tests\codeception\unit\models;
  3. use app\models\ContactForm;
  4. use Yii;
  5. use yii\codeception\TestCase;
  6. use Codeception\Specify;
  7. class ContactFormTest extends TestCase
  8. {
  9. use Specify;
  10. protected function setUp()
  11. {
  12. parent::setUp();
  13. Yii::$app->mailer->fileTransportCallback = function ($mailer, $message) {
  14. return 'testing_message.eml';
  15. };
  16. }
  17. protected function tearDown()
  18. {
  19. unlink($this->getMessageFile());
  20. parent::tearDown();
  21. }
  22. public function testContact()
  23. {
  24. /** @var ContactForm $model */
  25. $model = $this->getMockBuilder('app\models\ContactForm')
  26. ->setMethods(['validate'])
  27. ->getMock();
  28. $model->expects($this->once())->method('validate')->will($this->returnValue(true));
  29. $model->attributes = [
  30. 'name' => 'Tester',
  31. 'email' => 'tester@example.com',
  32. 'subject' => 'very important letter subject',
  33. 'body' => 'body of current message',
  34. ];
  35. $this->specify('email should be send', function () use ($model) {
  36. expect('ContactForm::contact() should return true', $model->contact('admin@example.com'))->true();
  37. expect('email file should exist', file_exists($this->getMessageFile()))->true();
  38. });
  39. $this->specify('message should contain correct data', function () use ($model) {
  40. $emailMessage = file_get_contents($this->getMessageFile());
  41. expect('email should contain user name', $emailMessage)->contains($model->name);
  42. expect('email should contain sender email', $emailMessage)->contains($model->email);
  43. expect('email should contain subject', $emailMessage)->contains($model->subject);
  44. expect('email should contain body', $emailMessage)->contains($model->body);
  45. });
  46. }
  47. private function getMessageFile()
  48. {
  49. return Yii::getAlias(Yii::$app->mailer->fileTransportPath) . '/testing_message.eml';
  50. }
  51. }