Skip to main content
Version: 3.x

Available Assertions

Overview

The assertions are the ones that perform the checks to ensure that things are going as planned.

caution

The assertions must be called after the reply() method!

Example

We assume that the $this->bot is loaded as mentioned on the Introduction page.

$this
->bot
->hearText('foo')
->reply()
->assertReplyText('bar');

Available Assertions

assertRaw

The assertRaw asserts the given callback returns a truthy value. The index parameter is optional.

->assertRaw(function(GuzzleHttp\Psr7\Request $request){
$content = json_decode((string)$request->getBody(), true, flags: JSON_THROW_ON_ERROR);
return $content['text'] === 'bar';
}, index: 0);

⚠️ Caution! See the Asserting files section to assert files sent with multi-part requests.

assertCalled

The assertCalled asserts the given method name is called one time. The times parameter is optional.

->assertCalled('sendMessage', times: 1);

assertReply

The assertReply asserts the given method name is called in the index history. The expected and index parameters are optionals.

->assertReply('sendMessage', expected: ['text' => 'foo'], index: 0);

⚠️ Caution! See the Asserting files section to assert files sent with multi-part requests.

$this
->bot
->hearText('foo')
->reply()
->assertReply('sendMessage', ['text' => 'bar'], 0);
->assertReply('sendMessage', ['text' => 'baz'], 1);

assertReplyMessage

The assertReplyMessage asserts the given data exists in the message attribute. The index and forceMethod parameters are optionals.

->assertReplyMessage(['text' => 'bar'], index: 0, forceMethod:'sendMessage');

⚠️ Caution! See the Asserting files section to assert files sent with multi-part requests.

assertReplyText

The assertReplyText asserts the given value is equal to the message->text attribute. The index parameter is optional.

->assertReplyText('bar', index: 0);

assertActiveConversation

The assertActiveConversation asserts there is an active conversation. The parameters userId and chatId are optionals.

->assertActiveConversation(userId: 123 , chatId: 321);
caution

You must use the willStartConversation() method to use this assertion without parameters.

assertNoConversation

The assertNoConversation asserts there is no active conversation. The parameters userId and chatId are optionals.

->assertNoConversation(userId: 123 , chatId: 321);
caution

You must use the willStartConversation() method to use this assertion without parameters.

assertNoReply

The assertNoReply asserts there is no reply.

->assertNoReply();

Asserting files

When you send a file as resource via the following methods: sendPhoto, sendAudio, sendDocument, sendVideo, sendAnimation, sendVoice, sendVideoNote or sendSticker, Nutgram will use a multi-part request.

With a multi-part request, the assertions assertRaw, assertReply, assertReplyMessage will have an OutgoingResource object instead of a resource in the field containing the file.

Example

To assert files you must use the assertRaw assertion in combination with FormDataParser::parse($request)->files, see the example below:

$this
->bot
->hearText('foo')
->reply()
->assertReply('sendDocument', [
//'document' => ??? We can't assert `document` field here because is an OutgoingResource
'caption' => 'my caption',
'parse_mode' => ParseMode::HTML,
])
->assertRaw(function (Request $request) {
/** @var OutgoingResource $document */
$document = FormDataParser::parse($request)->files['document'];

//check size
return $document->getSize() <= 123456;
});

OutgoingResource

This object is a wrapper from an outgoing resource and provide the following methods:

MethodTypeDescription
getName()?stringReturns the file name.
getType()?stringReturns the MIME content type.
getSize()intReturns the file size in bytes.
getError()intReturns 0 (There is no error) or 7 (Failed to create the resource)
getTmpResource()?resourceReturns the resource.