<?php
use App\Article;
use Illuminate\Foundation\Testing\DatabaseTransactions;
class Team extends Model
{
public function remove($users = null)
{
if (is_null($users)) {
return $this->members()->delete();
}
if ($users instanceof User) {
return $this->members()->where('users.id', $users->id)->delete();
}
foreach ($users as $user) {
$ids[] = $user->id;
}
return $this->members()->whereIn('users.id', $ids)->delete();
}
}
/** @test */
public function a_team_has_a_maximum_size()
{
$team = factory(Team::class)->create(['size => 2]);
$userOne = factory(User::class)->create();
$userTwo = factory(User::class)->create();
$team->add($userOne);
$team->add($userTwo);
$this->assertEquals(2, $team->count());
$this->setExpectedExpection('Exception);
$userThree = factory(User::class)->create();
$team->add($userThree);
}
}
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Databese\Migrations\Migration;
class CreateUsersTable exends Migration
{
/**
* Run the migration
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->integer('team_id')->unsigned()->nullable()->index();
$table->string('name');
$table->string('email')->unique();
if (DB::connection() instanceof \Illuminate\Database\SQLiteConnection) {
DB::statement(DB::raw('PRAGMA foreign_keys=1'));
DB::connection()->getPdo()->sqliteCreateFunction('REGEXP', function ($pattern, $value) {
mb_regex_encoding('UTF-8');
return (false !== mb_ereg("/$pattern/", $value)) ? 1 : 0;
'sqlite' => [
'driver' => 'sqlite',
'database' => env('DB_DATABASE', database_path('database.sqlite')),
'prefix' => '',
],
});
}
}
}
<?php
use App\Article;
use Illuminate\Foundation\Testing\DatabaseTransactions;
class ArticleTest extends TestCase
{
use DatabaseTransactions;
/**
* @test
*/
function it_fetches_trending_articles()
{
// Given
factory(Article::class, 2)->create();
factory(Article::class)->create(['reads'=>10]);
$mostPopular = factory(Article::class)->create(['reads'=>20]);
// When
$articles = Article::trending();
// Then
$this->assertEquals($mostPopular->id, $articles->first()->id);
}
}