Skip to content

Instantly share code, notes, and snippets.

<?php
// meh
$mock
->method('sum')
->withConsecutive([1,2,3], [4,5,6])
->willReturnOnConsecutiveCalls(6, 15);
// instead?
$mock->method('sum')->with(1,2,3)->willReturn(6);
@jarektkaczyk
jarektkaczyk / DispatchableJobAssertion.php
Created May 19, 2020 05:05
Dispatchable incompatible with queue assertions?
<?php
// Laravel 7.*
// Testing jobs:
Queue::later(now()->addMinute(), new SomeJob);
Queue::assertPushed(SomeJob::class, fn () => ...); // works
SomeJob::dispatch()->delay(now()->addMinute());
@jarektkaczyk
jarektkaczyk / min-max.php
Created January 17, 2019 09:05
first/last/min/max on related table in Laravel Builder/Eloquent
<?php
$this->builder
->select('*') // needs to be here, otherwise the only returned column will be `last_login`
->selectSub(function ($q) {
$q->from('action_logs')
->whereColumn('user_id', 'users.id')
->selectRaw('max(created_at)');
}, 'last_login')
->get();
@jarektkaczyk
jarektkaczyk / default.conf
Created December 16, 2018 00:33
NGiNX Configuration for Vue-Router in HTML5 Mode
server {
listen 80 default_server;
listen [::]:80 default_server;
root /your/root/path;
index index.html;
server_name you.server.com;
<?php
Schema::table('clicks', function (Blueprint $table) {
$table->index('user_id');
$table->index(['user_id', 'date_clicked']);
$table->index(['user_id', 'date_clicked', 'ip']);
$table->index(['user_id', 'date_clicked', 'country']);
$table->index(['user_id', 'date_clicked', 'city']);
$table->index(['user_id', 'date_clicked', 'browser']);
@jarektkaczyk
jarektkaczyk / ExactMethodExpectation.php
Created July 16, 2018 15:24
PHPUnit - how to set expectations against exact methods calls
<?php
$mock = $this->createMock(SomeDependency::class);
$mock->expects($this->once())->method('firstMethod')->willReturn('something');
$mock->expects($this->once())->method('secondMethod')->willReturn('something else');
$cut = new SomeClass($mock)
$cut->act();
// how to ensure there's no method called other than the 2 above?
@jarektkaczyk
jarektkaczyk / SomeController.php
Created July 1, 2018 11:37
multi step validation in laravel
<?php
public function someController(Request $request)
{
// asumming ValidatesRequests trait in use we'll call $this->validate
$this->validate($request, [
// first set of rules
]);
<?php
$ids = array_unique([1,2,3,4,5, ...]);
// relation() is HasMany
// check if all $ids belong to this parent model:
$parent_model->relation()->whereIn('id', $ids)->count() === count($ids)
// check if $ids match all of the children records:
<?php
// assuming you want to get conv where last message doesn't come from the OP
Coversation::where('author_id', '!=', function ($q) {
$q->select('author_id')->from('messages')->whereRaw('conversation_id = conversations.id')->latest()->limit(1);
})->get()
@jarektkaczyk
jarektkaczyk / laravel-regex-in-route-params.php
Last active May 15, 2018 12:20
regex in route parameters
<?php
// Do this (explicit routes are better):
Route::get('qualification', function () {/**/});
Route::get('qualification/{year}/{month}', function ($year, $month) {/**/});
// You could also do this (but don't in your case):
// @link https://laravel.com/docs/5.6/routing#parameters-regular-expression-constraints
Route::get('qualification/{year_month?}', function ($year_month = null) {