Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions lib/Cleantalk/Antispam/Cleantalk.php
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ public function sendFeedback(CleantalkRequest $request)
*
* @return CleantalkRequest
*/
private function createMsg($method, CleantalkRequest $request)
public function createMsg($method, CleantalkRequest $request)
{
switch ( $method ) {
case 'check_message':
Expand Down Expand Up @@ -244,7 +244,7 @@ private function compressData($data = null)
*
* @return CleantalkResponse
*/
private function httpRequest($msg)
public function httpRequest($msg)
{
$failed_urls = null;
// Using current server without changing it
Expand Down
1 change: 1 addition & 0 deletions lib/Cleantalk/Common/API.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ class API
* @return array|bool
*
* @psalm-suppress PossiblyUnusedMethod
* @codeCoverageIgnore
*/
public static function methodGet2sBlacklistsDb($api_key, $out = null, $version = '1_0', $common_lists = null)
{
Expand Down
144 changes: 112 additions & 32 deletions tests/Antispam/CleantalkTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,42 +2,122 @@

use Cleantalk\Antispam\Cleantalk;
use Cleantalk\Antispam\CleantalkRequest;
use Cleantalk\Antispam\CleantalkResponse;
use Cleantalk\ApbctWP\State;


class CleantalkTest extends \PHPUnit\Framework\TestCase
{
protected $ct;

protected $ct_request;
protected $ct;
protected $ct_request;

public function setUp()
{
public function setUp()
{
global $apbct;
$apbct = new State( 'cleantalk', array('settings', 'data', 'errors', 'remote_calls', 'stats', 'fw_stats') );

$this->ct = new Cleantalk();
$this->ct->server_url = APBCT_MODERATE_URL;
$this->ct_request = new CleantalkRequest();
$this->ct_request->auth_key = getenv("CLEANTALK_TEST_API_KEY");
}

public function testIsAllowMessage()
{
$this->ct_request->sender_email = 's@cleantalk.org';
$this->ct_request->message = 'stop_word bad message';
$result = $this->ct->isAllowMessage($this->ct_request);
$this->assertEquals(0, $result->allow);

$this->ct_request->message = '';
$this->ct_request->sender_email = '';
}

public function testIsAllowUser()
{
$this->ct_request->sender_email = 's@cleantalk.org';
$result = $this->ct->isAllowUser($this->ct_request);
$this->assertEquals(0, $result->allow);

$this->ct_request->sender_email = '';
}
$apbct = new State('cleantalk', array('settings', 'data', 'errors', 'remote_calls', 'stats', 'fw_stats'));

$this->ct_request = new CleantalkRequest();
$this->ct_request->auth_key = 'mockKeyAny';
}

public function testIsAllowMessageWithMock()
{
// Создаем мок объекта Cleantalk
$ctMock = $this->getMockBuilder(Cleantalk::class)
->setMethods(['httpRequest']) // Мокаем только метод httpRequest
->getMock();

// Настраиваем ожидаемый ответ
$expectedResponse = new \stdClass();
$expectedResponse->allow = 0;
$expectedResponse->comment = "Test comment";
$expectedResponse->errno = 0;
$expectedResponse->errstr = "";

// Ожидаем, что httpRequest будет вызван 1 раз с любыми параметрами
// и вернет наш фиктивный ответ
$ctMock->expects($this->once())
->method('httpRequest')
->willReturn(new CleantalkResponse($expectedResponse, null));

// Устанавливаем свойства для теста
$ctMock->server_url = 'https://example.com';

// Выполняем тест
$this->ct_request->sender_email = 's@cleantalk.org';
$this->ct_request->message = 'stop_word bad message';
$result = $ctMock->isAllowMessage($this->ct_request);

// Проверяем результат
$this->assertEquals(0, $result->allow);
}

// Альтернативный вариант с более полным контролем
public function testIsAllowMessageWithFullControl()
{
// Создаем мок с полным контролем над процессом
$ctMock = $this->getMockBuilder(Cleantalk::class)
->setMethods(['createMsg', 'httpRequest'])
->getMock();

// Мокаем createMsg чтобы он возвращал ожидаемый запрос
$expectedRequest = new CleantalkRequest();
$expectedRequest->auth_key = $this->ct_request->auth_key;
$expectedRequest->sender_email = 's@cleantalk.org';
$expectedRequest->message = 'stop_word bad message';
$expectedRequest->method_name = 'check_message';
// ... установите другие необходимые свойства ...

$ctMock->expects($this->once())
->method('createMsg')
->with('check_message', $this->isInstanceOf(CleantalkRequest::class))
->willReturn($expectedRequest);

// Мокаем httpRequest для возврата фиктивного ответа
$mockResponse = new \stdClass();
$mockResponse->allow = 0;
$mockResponse->comment = "Forbidden";
$mockResponse->errno = 0;
$mockResponse->errstr = "";

$ctMock->expects($this->once())
->method('httpRequest')
->with($expectedRequest)
->willReturn(new CleantalkResponse($mockResponse, null));

// Выполняем тест
$this->ct_request->sender_email = 's@cleantalk.org';
$this->ct_request->message = 'stop_word bad message';
$result = $ctMock->isAllowMessage($this->ct_request);

$this->assertEquals(0, $result->allow);
$this->assertEquals("Forbidden", $result->comment);
}

public function testIsAllowMessageAllow()
{
// Тест для разрешенного сообщения
$ctMock = $this->getMockBuilder(Cleantalk::class)
->setMethods(['httpRequest'])
->getMock();

$expectedResponse = new \stdClass();
$expectedResponse->allow = 1; // Сообщение разрешено
$expectedResponse->comment = "";
$expectedResponse->errno = 0;
$expectedResponse->errstr = "";

$ctMock->expects($this->once())
->method('httpRequest')
->willReturn(new CleantalkResponse($expectedResponse, null));

$ctMock->server_url = 'https://example.com';

$this->ct_request->sender_email = 'good@example.com';
$this->ct_request->message = 'Normal message';
$result = $ctMock->isAllowMessage($this->ct_request);

$this->assertEquals(1, $result->allow);
$this->assertEquals("", $result->comment);
}
}
60 changes: 0 additions & 60 deletions tests/ApbctWP/APITest.php

This file was deleted.

15 changes: 15 additions & 0 deletions tests/ApbctWP/Helper/testApbctWPHelper.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?php

namespace Cleantalk\ApbctWP;
use PHPUnit\Framework\TestCase;

class testApbctWPHelper extends TestCase
{
public function testHttpGetDataFromRemoteGzAndParseCsv()
{
$result = Helper::httpGetDataFromRemoteGzAndParseCsv('');
$this->assertNotEmpty($result);
$this->assertArrayHasKey('error', $result);
}

}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
87 changes: 87 additions & 0 deletions tests/Common/testHelperSFWFilesParse.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
<?php

namespace Common;

use Cleantalk\ApbctWP\Helper;
use PHPUnit;

class testHelperSFWFilesParse extends PHPUnit\Framework\TestCase
{
protected function setUp()
{
$this->api_responses = array(
'null' => [
'file_url' => __DIR__ . '/methodGet2sBlacklistsDbMock/null/' . 'bl_list_a42388ef51bd4615babf2096ea74583e.multifiles.csv.gz',
'file_ua_url' => __DIR__ . '/methodGet2sBlacklistsDbMock/null/' . 'ua_list_a42388ef51bd4615babf2096ea74583e.csv.gz',
'file_ck_url' => __DIR__ . '/methodGet2sBlacklistsDbMock/null/' . 'ck_list_a42388ef51bd4615babf2096ea74583e.csv.gz',
],
'1' => [
'file_url' => __DIR__ . '/methodGet2sBlacklistsDbMock/1/' . 'bl_list_d9cdb4e4d893ef87efb28278445f2142.multifiles.csv.gz',
'file_ua_url' => __DIR__ . '/methodGet2sBlacklistsDbMock/1/' . 'ua_list_d9cdb4e4d893ef87efb28278445f2142.csv.gz',
'file_ck_url' => __DIR__ . '/methodGet2sBlacklistsDbMock/1/' . 'ck_list_d9cdb4e4d893ef87efb28278445f2142.csv.gz',
],
'0' => [
'file_url' => __DIR__ . '/methodGet2sBlacklistsDbMock/0/' . 'bl_list_5af42e8e26b7da5d50f384afe20c57ba.multifiles.csv.gz',
'file_ua_url' => __DIR__ . '/methodGet2sBlacklistsDbMock/0/' . 'ua_list_5af42e8e26b7da5d50f384afe20c57ba.csv.gz',
'file_ck_url' => __DIR__ . '/methodGet2sBlacklistsDbMock/0/' . 'ck_list_5af42e8e26b7da5d50f384afe20c57ba.csv.gz',
],
);
}

protected function commonAction($common_list)
{
if ( is_null($common_list) ) {
$result = $this->api_responses['null'];
} else {
$result = $this->api_responses[$common_list];
}
$this->assertFalse(isset($result['error']));

if ( empty($result['error']) ) {
$directions = array(
'file_url' => isset($result['file_url']) ? $result['file_url'] : null,
'file_ua_url' => isset($result['file_ua_url']) ? $result['file_ua_url'] : null,
'file_ck_url' => isset($result['file_ck_url']) ? $result['file_ck_url'] : null,
);
}

$this->assertTrue(! empty($directions['file_url']));
$this->assertTrue(! empty($directions['file_ua_url']));
$this->assertTrue(! empty($directions['file_ck_url']));

$this->assertIsString($directions['file_url']);
$this->assertIsString($directions['file_ua_url']);
$this->assertIsString($directions['file_ck_url']);

return $directions;
}

public function testGetDefaultFWDb()
{
$directions = $this->commonAction(null);
$decoded = gzdecode(file_get_contents($directions['file_ck_url']));
$file_ck = Helper::bufferParseCsv($decoded);
$this->assertFalse(isset($file_ck[2]));
}

public function testGetCommonSFWDb()
{
$directions = $this->commonAction(1);
$decoded = gzdecode(file_get_contents($directions['file_ck_url']));
$file_ck = Helper::bufferParseCsv($decoded);
$common_sign = $file_ck[2];
$this->assertEquals('common_lists', $common_sign[0]);
$this->assertEquals('1', $common_sign[1]);
}

public function testGetPersonalSFWDb()
{
$directions = $this->commonAction(0);
$decoded = gzdecode(file_get_contents($directions['file_ck_url']));
$file_ck = Helper::bufferParseCsv($decoded);
$common_sign = $file_ck[2];
$this->assertEquals('common_lists', $common_sign[0]);
$this->assertEquals('0', $common_sign[1]);
}

}