*/ protected array $fixtures = [ 'plugin.CakeContactUs.ContactUsFormSubmissions', ]; /** * setUp method * * @return void */ protected function setUp(): void { parent::setUp(); $this->ContactUsFormSubmissions = $this->getTableLocator()->get('ContactUsFormSubmissions'); EventManager::instance()->setEventList(new EventList()); } /** * tearDown method * * @return void */ protected function tearDown(): void { unset($this->ContactUsFormSubmissions); parent::tearDown(); } /** * Test add method * * Tests the add action with a logged in user * * @return void * @throws Exception * * @uses ContactUsFormSubmissionsController::add */ public function testAddGet(): void { $cntBefore = $this->ContactUsFormSubmissions->find()->count(); $url = [ 'plugin' => 'CakeContactUs', 'controller' => 'ContactUsFormSubmissions', 'action' => 'add', ]; $this->get($url); $this->assertResponseCode(200); $cntAfter = $this->ContactUsFormSubmissions->find()->count(); $this->assertEquals($cntBefore, $cntAfter); $this->assertNoMailSent(); } /** * Test add method * * Tests a POST request to the add action with a logged in user * * @return void * @throws Exception * * @uses ContactUsFormSubmissionsController::add */ public function testAddPostSuccessNoEmail(): void { $cntBefore = $this->ContactUsFormSubmissions->find()->count(); $url = [ 'plugin' => 'CakeContactUs', 'controller' => 'ContactUsFormSubmissions', 'action' => 'add', ]; $data = [ 'name' => 'valid name', 'email' => 'valid_email@test.com', 'message' => 'valid message goes here', ]; $this->post($url, $data); $this->assertResponseCode(302); $cntAfter = $this->ContactUsFormSubmissions->find()->count(); $this->assertEquals($cntBefore + 1, $cntAfter); $this->assertEventFired(CakeContactUsPlugin::EVENT_AFTER_CONTACT_US_FORM_SAVED); $this->assertNoMailSent(); } /** * Test add method * * Tests a POST request to the add action with a logged in user * * @return void * @throws Exception * * @uses ContactUsFormSubmissionsController::add */ public function testAddPostSuccessBothEmailsSent(): void { Configure::write('ContactUs', [ 'fields' => [ 'captcha' => false, 'email' => [ 'confirmation' => true, 'backend' => [ 'to' => 'test@example.com', ], ], ], ]); Configure::write('EmailTransport', [ 'default' => [ 'className' => DebugTransport::class, ] ]); $cntBefore = $this->ContactUsFormSubmissions->find()->count(); $url = [ 'plugin' => 'CakeContactUs', 'controller' => 'ContactUsFormSubmissions', 'action' => 'add', ]; $data = [ 'name' => 'valid name', 'email' => 'valid_email@test.com', 'message' => 'valid message goes here', ]; $this->post($url, $data); $this->assertResponseCode(302); $cntAfter = $this->ContactUsFormSubmissions->find()->count(); $this->assertEquals($cntBefore + 1, $cntAfter); $this->assertEventFired(CakeContactUsPlugin::EVENT_AFTER_CONTACT_US_FORM_SAVED); $this->assertMailCount(2); // confirmation + backend emails } /** * Test add method * * Tests a POST request to the add action with a logged in user * * @return void * @throws Exception * * @uses ContactUsFormSubmissionsController::add */ public function testAddPostSuccessConfirmationEmailSent(): void { Configure::write('ContactUs', [ 'fields' => [ 'captcha' => false, 'email' => [ 'confirmation' => true, 'backend' => false, ], ], ]); $cntBefore = $this->ContactUsFormSubmissions->find()->count(); $url = [ 'plugin' => 'CakeContactUs', 'controller' => 'ContactUsFormSubmissions', 'action' => 'add', ]; $data = [ 'name' => 'valid name', 'email' => 'valid_email@test.com', 'message' => 'valid message goes here', ]; $this->post($url, $data); $this->assertResponseCode(302); $cntAfter = $this->ContactUsFormSubmissions->find()->count(); $this->assertEquals($cntBefore + 1, $cntAfter); $this->assertEventFired(CakeContactUsPlugin::EVENT_AFTER_CONTACT_US_FORM_SAVED); $this->assertMailCount(1); // confirmation only } /** * Test add method * * Tests a POST request to the add action with a logged in user * * @return void * @throws Exception * * @uses ContactUsFormSubmissionsController::add */ public function testAddPostSuccessBackendEmailSent(): void { Configure::write('ContactUs', [ 'fields' => [ 'captcha' => false, 'email' => [ 'confirmation' => false, 'backend' => [ 'to' => 'test@example.com', ], ], ], ]); $cntBefore = $this->ContactUsFormSubmissions->find()->count(); $url = [ 'plugin' => 'CakeContactUs', 'controller' => 'ContactUsFormSubmissions', 'action' => 'add', ]; $data = [ 'name' => 'valid name', 'email' => 'valid_email@test.com', 'message' => 'valid message goes here', ]; $this->post($url, $data); $responseBody = (string)$this->_response->getBody(); $tmpLog = fopen(TMP . 'phpunit.log', 'w'); if ($tmpLog) { fwrite($tmpLog, $responseBody); } $this->assertResponseCode(302); $cntAfter = $this->ContactUsFormSubmissions->find()->count(); $this->assertEquals($cntBefore + 1, $cntAfter); $this->assertEventFired(CakeContactUsPlugin::EVENT_AFTER_CONTACT_US_FORM_SAVED); $this->assertMailCount(1); // backend email only } /** * Test add method * * Tests a POST request to the add action with a logged in user * * @return void * @throws Exception * * @uses ContactUsFormSubmissionsController::add */ public function testAddPostLoggedInFailure(): void { $cntBefore = $this->ContactUsFormSubmissions->find()->count(); // $this->loginUserByRole('admin'); $url = [ 'plugin' => 'CakeContactUs', 'controller' => 'ContactUsFormSubmissions', 'action' => 'add', ]; $data = [ 'name' => 'valid name', 'email' => 'not_valid_email', 'message' => 'this is a valid message ', ]; $this->post($url, $data); $this->assertResponseCode(200); $cntAfter = $this->ContactUsFormSubmissions->find()->count(); $this->assertEquals($cntBefore, $cntAfter); $this->assertEventFired(CakeContactUsPlugin::EVENT_BEFORE_CONTACT_US_FORM_SAVED); $this->assertNoMailSent(); } }