upgrade to Laravel 7

This commit is contained in:
Pig Fang 2020-03-09 12:29:00 +08:00
parent 48de60b43a
commit 0eb7d50d1c
40 changed files with 1029 additions and 1239 deletions

View File

@ -25,7 +25,7 @@ DB_PREFIX=
PWD_METHOD=BCRYPT PWD_METHOD=BCRYPT
APP_KEY= APP_KEY=
MAIL_DRIVER=smtp MAIL_MAILER=smtp
MAIL_HOST= MAIL_HOST=
MAIL_PORT=465 MAIL_PORT=465
MAIL_USERNAME= MAIL_USERNAME=

View File

@ -13,7 +13,7 @@ PWD_METHOD=BCRYPT
SALT=c67709dd8b7b733aca0d570681fe96cf SALT=c67709dd8b7b733aca0d570681fe96cf
APP_KEY=base64:eVX/xzF5NhpGB2luswliFx9XSBsbbAP21wOi68X/P34= APP_KEY=base64:eVX/xzF5NhpGB2luswliFx9XSBsbbAP21wOi68X/P34=
MAIL_DRIVER=smtp MAIL_MAILER=smtp
MAIL_HOST=localhost MAIL_HOST=localhost
MAIL_PORT=465 MAIL_PORT=465
MAIL_USERNAME= MAIL_USERNAME=

View File

@ -2,10 +2,10 @@
namespace App\Exceptions; namespace App\Exceptions;
use Exception;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Illuminate\Support\Arr; use Illuminate\Support\Arr;
use Illuminate\Support\Str; use Illuminate\Support\Str;
use Throwable;
class Handler extends ExceptionHandler class Handler extends ExceptionHandler
{ {
@ -22,7 +22,7 @@ class Handler extends ExceptionHandler
PrettyPageException::class, PrettyPageException::class,
]; ];
protected function convertExceptionToArray(Exception $e) protected function convertExceptionToArray(Throwable $e)
{ {
return [ return [
'message' => $e->getMessage(), 'message' => $e->getMessage(),

View File

@ -210,7 +210,7 @@ class AuthController extends Controller
public function forgot() public function forgot()
{ {
if (config('mail.driver') != '') { if (config('mail.default') != '') {
return view('auth.forgot', [ return view('auth.forgot', [
'extra' => [ 'extra' => [
'recaptcha' => option('recaptcha_sitekey'), 'recaptcha' => option('recaptcha_sitekey'),
@ -233,7 +233,7 @@ class AuthController extends Controller
'captcha' => ['required', $captcha], 'captcha' => ['required', $captcha],
]); ]);
if (!config('mail.driver')) { if (!config('mail.default')) {
return json(trans('auth.forgot.disabled'), 1); return json(trans('auth.forgot.disabled'), 1);
} }

View File

@ -4,6 +4,7 @@ namespace App\Models;
use App\Events\PlayerProfileUpdated; use App\Events\PlayerProfileUpdated;
use App\Models; use App\Models;
use DateTimeInterface;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
class Player extends Model class Player extends Model
@ -62,4 +63,9 @@ class Player extends Model
return json_encode($profile, $options | JSON_UNESCAPED_UNICODE); return json_encode($profile, $options | JSON_UNESCAPED_UNICODE);
} }
protected function serializeDate(DateTimeInterface $date)
{
return $date->format('Y-m-d H:i:s');
}
} }

View File

@ -2,6 +2,7 @@
namespace App\Models; namespace App\Models;
use DateTimeInterface;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
class Report extends Model class Report extends Model
@ -29,4 +30,9 @@ class Report extends Model
{ {
return $this->belongsTo(User::class, 'reporter', 'uid'); return $this->belongsTo(User::class, 'reporter', 'uid');
} }
protected function serializeDate(DateTimeInterface $date)
{
return $date->format('Y-m-d H:i:s');
}
} }

View File

@ -2,6 +2,7 @@
namespace App\Models; namespace App\Models;
use DateTimeInterface;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
class Texture extends Model class Texture extends Model
@ -37,4 +38,9 @@ class Texture extends Model
{ {
return $this->belongsToMany(User::class, 'user_closet')->withPivot('item_name'); return $this->belongsToMany(User::class, 'user_closet')->withPivot('item_name');
} }
protected function serializeDate(DateTimeInterface $date)
{
return $date->format('Y-m-d H:i:s');
}
} }

View File

@ -3,6 +3,7 @@
namespace App\Models; namespace App\Models;
use App\Models\Concerns\HasPassword; use App\Models\Concerns\HasPassword;
use DateTimeInterface;
use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable; use Illuminate\Notifications\Notifiable;
use Laravel\Passport\HasApiTokens; use Laravel\Passport\HasApiTokens;
@ -85,4 +86,9 @@ class User extends Authenticatable implements JWTSubject
{ {
return []; return [];
} }
protected function serializeDate(DateTimeInterface $date)
{
return $date->format('Y-m-d H:i:s');
}
} }

View File

@ -17,39 +17,39 @@
"blessing/rejection": "^1.0", "blessing/rejection": "^1.0",
"blessing/texture-renderer": "^0.1.1", "blessing/texture-renderer": "^0.1.1",
"composer/ca-bundle": "^1.2", "composer/ca-bundle": "^1.2",
"composer/semver": "^1.4", "composer/semver": "^1.5",
"doctrine/dbal": "^2.10", "doctrine/dbal": "^2.10",
"doctrine/inflector": "^1.3", "doctrine/inflector": "^1.3",
"erusev/parsedown": "^1.7", "erusev/parsedown": "^1.7",
"facade/ignition": "^1.4", "facade/ignition": "^2.0",
"gregwar/captcha": "1.*", "gregwar/captcha": "1.*",
"guzzlehttp/guzzle": "^6.3", "guzzlehttp/guzzle": "^6.3",
"intervention/image": "^2.5", "intervention/image": "^2.5",
"laravel/framework": "6.*", "laravel/framework": "^7.0",
"laravel/passport": "^7.3", "laravel/passport": "^8.4",
"nesbot/carbon": "^2.0", "nesbot/carbon": "^2.0",
"nunomaduro/collision": "^4.1",
"predis/predis": "~1.0", "predis/predis": "~1.0",
"rcrowe/twigbridge": "^0.11.3", "rcrowe/twigbridge": "^0.11.3",
"socialiteproviders/manager": "^3.4", "socialiteproviders/manager": "^3.5",
"spatie/laravel-translation-loader": "^2.6", "spatie/laravel-translation-loader": "^2.6",
"symfony/process": "^4.4", "symfony/process": "^5.0",
"symfony/yaml": "^4.3", "symfony/yaml": "^5.0",
"twig/twig": "^2.11", "twig/twig": "^2.11",
"tymon/jwt-auth": "dev-develop", "tymon/jwt-auth": "dev-develop",
"vectorface/whip": "^0.3.2" "vectorface/whip": "^0.3.2"
}, },
"require-dev": { "require-dev": {
"barryvdh/laravel-debugbar": "^3.2", "barryvdh/laravel-debugbar": "^3.2",
"barryvdh/laravel-ide-helper": "^2.6", "beyondcode/laravel-dump-server": "^1.4",
"beyondcode/laravel-dump-server": "^1.2",
"fzaninotto/faker": "~1.9", "fzaninotto/faker": "~1.9",
"laravel/browser-kit-testing": "~5.0", "laravel/browser-kit-testing": "^6.0",
"laravel/tinker": "^2.2", "laravel/tinker": "^2.2",
"mockery/mockery": "^1.3", "mockery/mockery": "^1.3",
"phpdocumentor/reflection-docblock": "^5.1", "phpdocumentor/reflection-docblock": "^5.1",
"phpunit/phpunit": "~8.0", "phpunit/phpunit": "^8.5",
"symfony/css-selector": "^4.3", "symfony/css-selector": "^5.0",
"symfony/dom-crawler": "^4.3" "symfony/dom-crawler": "^5.0"
}, },
"autoload": { "autoload": {
"classmap": [ "classmap": [

1885
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -4,45 +4,71 @@ return [
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Mail Driver | Default Mailer
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| |
| Laravel supports both SMTP and PHP's "mail" function as drivers for the | This option controls the default mailer that is used to send any email
| sending of e-mail. You may specify which one you're using throughout | messages sent by your application. Alternative mailers may be setup
| your application here. By default, Laravel is setup for SMTP mail. | and used as needed; however, this mailer will be used by default.
|
*/
'default' => env('MAIL_MAILER', 'smtp'),
/*
|--------------------------------------------------------------------------
| Mailer Configurations
|--------------------------------------------------------------------------
|
| Here you may configure all of the mailers used by your application plus
| their respective settings. Several examples have been configured for
| you and you are free to add your own as your application requires.
|
| Laravel supports a variety of mail "transport" drivers to be used while
| sending an e-mail. You will specify which one you are using for your
| mailers below. You are free to add additional mailers as required.
| |
| Supported: "smtp", "sendmail", "mailgun", "ses", | Supported: "smtp", "sendmail", "mailgun", "ses",
| "postmark", "log", "array" | "postmark", "log", "array"
| |
*/ */
'driver' => env('MAIL_DRIVER', 'smtp'), 'mailers' => [
'smtp' => [
'transport' => 'smtp',
'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
'port' => env('MAIL_PORT', 587),
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
],
/* 'ses' => [
|-------------------------------------------------------------------------- 'transport' => 'ses',
| SMTP Host Address ],
|--------------------------------------------------------------------------
|
| Here you may provide the host address of the SMTP server used by your
| applications. A default option is provided that is compatible with
| the Mailgun mail service which will provide reliable deliveries.
|
*/
'host' => env('MAIL_HOST', 'smtp.mailgun.org'), 'mailgun' => [
'transport' => 'mailgun',
],
/* 'postmark' => [
|-------------------------------------------------------------------------- 'transport' => 'postmark',
| SMTP Host Port ],
|--------------------------------------------------------------------------
|
| This is the SMTP port used by your application to deliver e-mails to
| users of the application. Like the host we have set this value to
| stay compatible with the Mailgun e-mail application by default.
|
*/
'port' => env('MAIL_PORT', 587), 'sendmail' => [
'transport' => 'sendmail',
'path' => '/usr/sbin/sendmail -bs',
],
'log' => [
'transport' => 'log',
'channel' => env('MAIL_LOG_CHANNEL'),
],
'array' => [
'transport' => 'array',
],
],
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@ -60,47 +86,6 @@ return [
'name' => env('MAIL_FROM_NAME', 'Example'), 'name' => env('MAIL_FROM_NAME', 'Example'),
], ],
/*
|--------------------------------------------------------------------------
| E-Mail Encryption Protocol
|--------------------------------------------------------------------------
|
| Here you may specify the encryption protocol that should be used when
| the application send e-mail messages. A sensible default using the
| transport layer security protocol should provide great security.
|
*/
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
/*
|--------------------------------------------------------------------------
| SMTP Server Username
|--------------------------------------------------------------------------
|
| If your SMTP server requires a username for authentication, you should
| set it here. This will get used to authenticate with your server on
| connection. You may also set the "password" value below this one.
|
*/
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
/*
|--------------------------------------------------------------------------
| Sendmail System Path
|--------------------------------------------------------------------------
|
| When using the "sendmail" driver to send e-mails, we will need to know
| the path to where Sendmail lives on this server. A default path has
| been provided here, which will work well on most of your systems.
|
*/
'sendmail' => '/usr/sbin/sendmail -bs',
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Markdown Mail Settings | Markdown Mail Settings
@ -120,17 +105,4 @@ return [
], ],
], ],
/*
|--------------------------------------------------------------------------
| Log Channel
|--------------------------------------------------------------------------
|
| If you are using the "log" driver, you may specify the logging channel
| if you prefer to keep mail messages separate from other log entries
| for simpler reading. Otherwise, the default channel will be used.
|
*/
'log_channel' => env('MAIL_LOG_CHANNEL'),
]; ];

View File

@ -161,7 +161,7 @@ return [
| |
*/ */
'secure' => env('SESSION_SECURE_COOKIE', false), 'secure' => env('SESSION_SECURE_COOKIE', null),
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@ -189,6 +189,6 @@ return [
| |
*/ */
'same_site' => null, 'same_site' => 'lax',
]; ];

View File

@ -1,5 +1,6 @@
<?php <?php
/** @var \Illuminate\Database\Eloquent\Factory $factory */
use App\Models\Player; use App\Models\Player;
$factory->define(Player::class, function (Faker\Generator $faker) { $factory->define(Player::class, function (Faker\Generator $faker) {

View File

@ -1,5 +1,6 @@
<?php <?php
/** @var \Illuminate\Database\Eloquent\Factory $factory */
use App\Models\Texture; use App\Models\Texture;
$factory->define(Texture::class, function (Faker\Generator $faker) { $factory->define(Texture::class, function (Faker\Generator $faker) {
@ -15,27 +16,6 @@ $factory->define(Texture::class, function (Faker\Generator $faker) {
]; ];
}); });
$factory->defineAs(Texture::class, 'alex', function (Faker\Generator $faker) { $factory->state(Texture::class, 'alex', ['type' => 'alex']);
return [
'name' => $faker->firstName,
'type' => 'alex',
'hash' => $faker->sha256,
'size' => rand(1, 2048),
'likes' => rand(1, 10),
'uploader' => factory(App\Models\User::class)->create()->uid,
'public' => true,
'upload_at' => $faker->dateTime,
];
});
$factory->defineAs(Texture::class, 'cape', function (Faker\Generator $faker) { $factory->state(Texture::class, 'cape', ['type' => 'cape']);
return [
'name' => $faker->firstName,
'type' => 'cape',
'hash' => $faker->sha256,
'size' => rand(1, 2048),
'uploader' => factory(App\Models\User::class)->create()->uid,
'public' => true,
'upload_at' => $faker->dateTime,
];
});

View File

@ -1,5 +1,6 @@
<?php <?php
/** @var \Illuminate\Database\Eloquent\Factory $factory */
use App\Models\User; use App\Models\User;
use Illuminate\Support\Str; use Illuminate\Support\Str;
@ -18,47 +19,8 @@ $factory->define(User::class, function (Faker\Generator $faker) {
]; ];
}); });
$factory->defineAs(User::class, 'admin', function (Faker\Generator $faker) { $factory->state(User::class, 'admin', ['permission' => 1]);
return [
'email' => $faker->email,
'nickname' => $faker->name,
'score' => 1000,
'avatar' => 0,
'password' => app('cipher')->hash(Str::random(10), config('secure.salt')),
'ip' => '127.0.0.1',
'permission' => 1,
'verified' => true,
'last_sign_at' => $faker->dateTime->format('d-M-Y H:i:s'),
'register_at' => $faker->dateTime->format('d-M-Y H:i:s'),
];
});
$factory->defineAs(User::class, 'superAdmin', function (Faker\Generator $faker) { $factory->state(User::class, 'superAdmin', ['permission' => 2]);
return [
'email' => $faker->email,
'nickname' => $faker->name,
'score' => 1000,
'avatar' => 0,
'password' => app('cipher')->hash(Str::random(10), config('secure.salt')),
'ip' => '127.0.0.1',
'permission' => 2,
'verified' => true,
'last_sign_at' => $faker->dateTime->format('d-M-Y H:i:s'),
'register_at' => $faker->dateTime->format('d-M-Y H:i:s'),
];
});
$factory->defineAs(User::class, 'banned', function (Faker\Generator $faker) { $factory->state(User::class, 'banned', ['permission' => -1]);
return [
'email' => $faker->email,
'nickname' => $faker->name,
'score' => 1000,
'avatar' => 0,
'password' => app('cipher')->hash(Str::random(10), config('secure.salt')),
'ip' => '127.0.0.1',
'permission' => -1,
'verified' => true,
'last_sign_at' => $faker->dateTime->format('d-M-Y H:i:s'),
'register_at' => $faker->dateTime->format('d-M-Y H:i:s'),
];
});

View File

@ -24,4 +24,7 @@
<php> <php>
<env name="APP_ENV" value="testing"/> <env name="APP_ENV" value="testing"/>
</php> </php>
<listeners>
<listener class="NunoMaduro\Collision\Adapters\Phpunit\Printer" />
</listeners>
</phpunit> </phpunit>

View File

@ -45,7 +45,7 @@ class BrowserKitTestCase extends TestCase
if ($role == 'normal') { if ($role == 'normal') {
$role = factory(\App\Models\User::class)->create(); $role = factory(\App\Models\User::class)->create();
} else { } else {
$role = factory(\App\Models\User::class, $role)->create(); $role = factory(\App\Models\User::class)->states($role)->create();
} }
} }

View File

@ -46,7 +46,7 @@ class AdminControllerTest extends TestCase
public function testSendNotification() public function testSendNotification()
{ {
$admin = factory(User::class, 'admin')->create(); $admin = factory(User::class)->states('admin')->create();
$normal = factory(User::class)->create(); $normal = factory(User::class)->create();
Notification::fake(); Notification::fake();
@ -232,7 +232,7 @@ class AdminControllerTest extends TestCase
]); ]);
// An admin operating on a super admin should be forbidden // An admin operating on a super admin should be forbidden
$superAdmin = factory(User::class, 'superAdmin')->create(); $superAdmin = factory(User::class)->states('superAdmin')->create();
$this->postJson('/admin/users', ['uid' => $superAdmin->uid]) $this->postJson('/admin/users', ['uid' => $superAdmin->uid])
->assertJson([ ->assertJson([
'code' => 1, 'code' => 1,
@ -401,7 +401,7 @@ class AdminControllerTest extends TestCase
]); ]);
// An admin cannot operate another admin's player // An admin cannot operate another admin's player
$admin = factory(User::class, 'admin')->create(); $admin = factory(User::class)->states('admin')->create();
$this->postJson( $this->postJson(
'/admin/players', '/admin/players',
['pid' => factory(Player::class)->create(['uid' => $admin->uid])->pid] ['pid' => factory(Player::class)->create(['uid' => $admin->uid])->pid]
@ -409,7 +409,7 @@ class AdminControllerTest extends TestCase
'code' => 1, 'code' => 1,
'message' => trans('admin.players.no-permission'), 'message' => trans('admin.players.no-permission'),
]); ]);
$superAdmin = factory(User::class, 'superAdmin')->create(); $superAdmin = factory(User::class)->states('superAdmin')->create();
$this->postJson( $this->postJson(
'/admin/players', '/admin/players',
['pid' => factory(Player::class)->create(['uid' => $superAdmin->uid])->pid] ['pid' => factory(Player::class)->create(['uid' => $superAdmin->uid])->pid]
@ -459,7 +459,7 @@ class AdminControllerTest extends TestCase
]); ]);
$skin = factory(Texture::class)->create(); $skin = factory(Texture::class)->create();
$cape = factory(Texture::class, 'cape')->create(); $cape = factory(Texture::class)->states('cape')->create();
// Skin // Skin
$this->postJson('/admin/players', [ $this->postJson('/admin/players', [

View File

@ -228,7 +228,7 @@ class AuthControllerTest extends TestCase
$this->get('/auth/register')->assertSee('Register'); $this->get('/auth/register')->assertSee('Register');
option(['user_can_register' => false]); option(['user_can_register' => false]);
$this->get('/auth/register')->assertSee(e(trans('auth.register.close'))); $this->get('/auth/register')->assertSee(trans('auth.register.close'));
} }
public function testHandleRegister() public function testHandleRegister()
@ -484,7 +484,7 @@ class AuthControllerTest extends TestCase
{ {
$this->get('/auth/forgot')->assertSee('Forgot Password'); $this->get('/auth/forgot')->assertSee('Forgot Password');
config(['mail.driver' => '']); config(['mail.default' => '']);
$this->get('/auth/forgot')->assertSee(trans('auth.forgot.disabled')); $this->get('/auth/forgot')->assertSee(trans('auth.forgot.disabled'));
} }
@ -495,7 +495,7 @@ class AuthControllerTest extends TestCase
$filter = Filter::fake(); $filter = Filter::fake();
// Should be forbidden if "forgot password" is closed // Should be forbidden if "forgot password" is closed
config(['mail.driver' => '']); config(['mail.default' => '']);
$this->postJson('/auth/forgot', [ $this->postJson('/auth/forgot', [
'email' => 'nope@nope.net', 'email' => 'nope@nope.net',
'captcha' => 'a', 'captcha' => 'a',
@ -503,7 +503,7 @@ class AuthControllerTest extends TestCase
'code' => 1, 'code' => 1,
'message' => trans('auth.forgot.disabled'), 'message' => trans('auth.forgot.disabled'),
]); ]);
config(['mail.driver' => 'smtp']); config(['mail.default' => 'smtp']);
$whip = new Whip(); $whip = new Whip();
$ip = $whip->getValidIpAddress(); $ip = $whip->getValidIpAddress();
@ -748,7 +748,7 @@ class AuthControllerTest extends TestCase
$this->assertTrue(is_string($token)); $this->assertTrue(is_string($token));
} }
public function testOAuthLogin() public function testOauthLogin()
{ {
Socialite::shouldReceive('driver') Socialite::shouldReceive('driver')
->with('github') ->with('github')
@ -763,7 +763,7 @@ class AuthControllerTest extends TestCase
$this->get('/auth/login/github')->assertRedirect(); $this->get('/auth/login/github')->assertRedirect();
} }
public function testOAuthCallback() public function testOauthCallback()
{ {
Event::fake(); Event::fake();
$filter = Filter::fake(); $filter = Filter::fake();

View File

@ -56,7 +56,7 @@ class ClosetControllerTest extends TestCase
$this->assertCount(2, $result['items']); $this->assertCount(2, $result['items']);
// Get capes // Get capes
$cape = factory(Texture::class, 'cape')->create(); $cape = factory(Texture::class)->states('cape')->create();
$this->user->closet()->attach($cape->tid, ['item_name' => 'custom_name']); $this->user->closet()->attach($cape->tid, ['item_name' => 'custom_name']);
$this->getJson('/user/closet/list?category=cape') $this->getJson('/user/closet/list?category=cape')
->assertJson(['data' => [ ->assertJson(['data' => [

View File

@ -17,7 +17,7 @@ class MarketControllerTest extends TestCase
protected function setUp(): void protected function setUp(): void
{ {
parent::setUp(); parent::setUp();
$this->actingAs(factory(\App\Models\User::class, 'superAdmin')->create()); $this->actingAs(factory(\App\Models\User::class)->states('superAdmin')->create());
} }
public function testDownload() public function testDownload()

View File

@ -293,7 +293,7 @@ class PlayerControllerTest extends TestCase
$player = factory(Player::class)->create(); $player = factory(Player::class)->create();
$user = $player->user; $user = $player->user;
$skin = factory(Texture::class)->create(); $skin = factory(Texture::class)->create();
$cape = factory(Texture::class, 'cape')->create(); $cape = factory(Texture::class)->states('cape')->create();
// Set a not-existed texture // Set a not-existed texture
$this->actingAs($user) $this->actingAs($user)

View File

@ -73,7 +73,7 @@ class PluginControllerTest extends TestCase
// Plugin is enabled but it doesn't have config view // Plugin is enabled but it doesn't have config view
$this->get('/admin/plugins/config/fake3') $this->get('/admin/plugins/config/fake3')
->assertSee(e(trans('admin.plugins.operations.no-config-notice'))) ->assertSee(trans('admin.plugins.operations.no-config-notice'))
->assertNotFound(); ->assertNotFound();
// Plugin has config view // Plugin has config view

View File

@ -121,7 +121,7 @@ class ReportControllerTest extends TestCase
public function testManage() public function testManage()
{ {
$uploader = factory(User::class)->create(); $uploader = factory(User::class)->create();
$reporter = factory(User::class, 'admin')->create(); $reporter = factory(User::class)->states('admin')->create();
$texture = factory(Texture::class)->create(['uploader' => $uploader->uid]); $texture = factory(Texture::class)->create(['uploader' => $uploader->uid]);
$report = new Report(); $report = new Report();
@ -152,7 +152,7 @@ class ReportControllerTest extends TestCase
{ {
Event::fake(); Event::fake();
$admin = factory(User::class, 'admin')->create(); $admin = factory(User::class)->states('admin')->create();
$texture = factory(Texture::class)->create(['uploader' => $admin->uid]); $texture = factory(Texture::class)->create(['uploader' => $admin->uid]);
$report = new Report(); $report = new Report();
@ -200,7 +200,7 @@ class ReportControllerTest extends TestCase
$uploader = factory(User::class)->create(); $uploader = factory(User::class)->create();
$reporter = factory(User::class)->create(); $reporter = factory(User::class)->create();
$admin = factory(User::class, 'admin')->create(); $admin = factory(User::class)->states('admin')->create();
$texture = factory(Texture::class)->create(['uploader' => $uploader->uid]); $texture = factory(Texture::class)->create(['uploader' => $uploader->uid]);
$report = new Report(); $report = new Report();
@ -257,7 +257,7 @@ class ReportControllerTest extends TestCase
$uploader = factory(User::class)->create(); $uploader = factory(User::class)->create();
$reporter = factory(User::class)->create(); $reporter = factory(User::class)->create();
$admin = factory(User::class, 'admin')->create(); $admin = factory(User::class)->states('admin')->create();
$texture = factory(Texture::class)->create(['uploader' => $uploader->uid]); $texture = factory(Texture::class)->create(['uploader' => $uploader->uid]);
$report = new Report(); $report = new Report();
@ -317,7 +317,7 @@ class ReportControllerTest extends TestCase
$uploader = factory(User::class)->create(); $uploader = factory(User::class)->create();
$reporter = factory(User::class)->create(); $reporter = factory(User::class)->create();
$admin = factory(User::class, 'admin')->create(); $admin = factory(User::class)->states('admin')->create();
$texture = factory(Texture::class)->create(['uploader' => $uploader->uid]); $texture = factory(Texture::class)->create(['uploader' => $uploader->uid]);
$report = new Report(); $report = new Report();
@ -362,7 +362,7 @@ class ReportControllerTest extends TestCase
$uploader = factory(User::class)->create(); $uploader = factory(User::class)->create();
$reporter = factory(User::class)->create(); $reporter = factory(User::class)->create();
$admin = factory(User::class, 'admin')->create(); $admin = factory(User::class)->states('admin')->create();
$texture = factory(Texture::class)->create(['uploader' => $uploader->uid]); $texture = factory(Texture::class)->create(['uploader' => $uploader->uid]);
$report = new Report(); $report = new Report();

View File

@ -24,10 +24,10 @@ class SkinlibControllerTest extends TestCase
'total_pages' => 0, 'total_pages' => 0,
]]); ]]);
$steves = factory(Texture::class)->times(5)->create(); $steves = factory(Texture::class, 5)->create();
$alexs = factory(Texture::class, 'alex')->times(5)->create(); $alexs = factory(Texture::class, 5)->states('alex')->create();
$skins = $steves->merge($alexs); $skins = $steves->merge($alexs);
$capes = factory(Texture::class, 'cape')->times(5)->create(); $capes = factory(Texture::class, 5)->states('cape')->create();
// Default arguments // Default arguments
$items = $this->getJson('/skinlib/data') $items = $this->getJson('/skinlib/data')
@ -250,7 +250,7 @@ class SkinlibControllerTest extends TestCase
})); }));
// Administrators can see private textures // Administrators can see private textures
$admin = factory(User::class, 'admin')->create(); $admin = factory(User::class)->states('admin')->create();
$items = $this->actingAs($admin) $items = $this->actingAs($admin)
->getJson('/skinlib/data') ->getJson('/skinlib/data')
->assertJson(['data' => [ ->assertJson(['data' => [
@ -381,7 +381,6 @@ class SkinlibControllerTest extends TestCase
$file->path(), $file->path(),
'test.png', 'test.png',
'image/png', 'image/png',
50,
UPLOAD_ERR_NO_TMP_DIR, UPLOAD_ERR_NO_TMP_DIR,
true true
); );
@ -942,7 +941,7 @@ class SkinlibControllerTest extends TestCase
]); ]);
$this->assertEquals('steve', Texture::find($texture->tid)->type); $this->assertEquals('steve', Texture::find($texture->tid)->type);
$duplicate = factory(Texture::class, 'alex')->create([ $duplicate = factory(Texture::class)->states('alex')->create([
'uploader' => $other->uid, 'uploader' => $other->uid,
'hash' => $texture->hash, 'hash' => $texture->hash,
]); ]);

View File

@ -66,7 +66,7 @@ class TextureControllerTest extends TestCase
$this->get('/preview/'.$skin->tid)->assertHeader('Content-Type', 'image/png'); $this->get('/preview/'.$skin->tid)->assertHeader('Content-Type', 'image/png');
$this->assertTrue(Cache::has('preview-t'.$skin->tid)); $this->assertTrue(Cache::has('preview-t'.$skin->tid));
$cape = factory(Texture::class, 'cape')->create(); $cape = factory(Texture::class)->states('cape')->create();
$disk->put($cape->hash, ''); $disk->put($cape->hash, '');
$this->get('/preview/'.$cape->tid.'?height=100')->assertHeader('Content-Type', 'image/png'); $this->get('/preview/'.$cape->tid.'?height=100')->assertHeader('Content-Type', 'image/png');
$this->assertTrue(Cache::has('preview-t'.$cape->tid)); $this->assertTrue(Cache::has('preview-t'.$cape->tid));

View File

@ -46,7 +46,7 @@ class UserControllerTest extends TestCase
$this->actingAs($user) $this->actingAs($user)
->get('/user') ->get('/user')
->assertViewHas('statistics') ->assertViewHas('statistics')
->assertSee((new Parsedown())->text(option_localized('announcement'))) ->assertSee((new Parsedown())->text(option_localized('announcement')), false)
->assertSee((string) $user->score); ->assertSee((string) $user->score);
$filter->assertApplied('grid:user.index'); $filter->assertApplied('grid:user.index');
$filter->assertApplied('user_avatar', function ($url, $user) use ($uid) { $filter->assertApplied('user_avatar', function ($url, $user) use ($uid) {
@ -513,7 +513,7 @@ class UserControllerTest extends TestCase
$user = factory(User::class)->create(); $user = factory(User::class)->create();
$uid = $user->uid; $uid = $user->uid;
$steve = factory(\App\Models\Texture::class)->create(); $steve = factory(\App\Models\Texture::class)->create();
$cape = factory(\App\Models\Texture::class, 'cape')->create(); $cape = factory(\App\Models\Texture::class)->states('cape')->create();
// Without `tid` field // Without `tid` field
$this->actingAs($user) $this->actingAs($user)

View File

@ -28,7 +28,7 @@ class CheckInstallationTest extends TestCase
['version' => config('app.version')] ['version' => config('app.version')]
)); ));
$this->actingAs(factory(User::class, 'superAdmin')->make()); $this->actingAs(factory(User::class)->states('superAdmin')->make());
$this->mock(Filesystem::class, function ($mock) { $this->mock(Filesystem::class, function ($mock) {
$mock->shouldReceive('exists') $mock->shouldReceive('exists')
->with(storage_path('install.lock')) ->with(storage_path('install.lock'))

View File

@ -12,13 +12,13 @@ class CheckRole extends TestCase
->get('/admin') ->get('/admin')
->assertForbidden(); ->assertForbidden();
$this->actAs(factory(User::class, 'admin')->create()) $this->actAs(factory(User::class)->states('admin')->create())
->get('/admin') ->get('/admin')
->assertSuccessful(); ->assertSuccessful();
$this->get('/admin/update')->assertForbidden(); $this->get('/admin/update')->assertForbidden();
$this->actAs(factory(User::class, 'superAdmin')->create()) $this->actAs(factory(User::class)->states('superAdmin')->create())
->get('/admin/update') ->get('/admin/update')
->assertSuccessful(); ->assertSuccessful();
} }

View File

@ -7,8 +7,8 @@ class ForbiddenIETest extends TestCase
public function testHandle() public function testHandle()
{ {
$this->get('/', ['user-agent' => 'MSIE']) $this->get('/', ['user-agent' => 'MSIE'])
->assertSee(e(trans('errors.http.ie'))); ->assertSee(trans('errors.http.ie'));
$this->get('/', ['user-agent' => 'Trident']) $this->get('/', ['user-agent' => 'Trident'])
->assertSee(e(trans('errors.http.ie'))); ->assertSee(trans('errors.http.ie'));
} }
} }

View File

@ -12,7 +12,7 @@ class RedirectToSetupTest extends TestCase
public function testHandle() public function testHandle()
{ {
$superAdmin = factory(User::class, 'superAdmin')->create(); $superAdmin = factory(User::class)->states('superAdmin')->create();
$current = config('app.version'); $current = config('app.version');
config(['app.version' => '100.0.0']); config(['app.version' => '100.0.0']);

View File

@ -8,7 +8,7 @@ class RejectBannedUserTest extends TestCase
{ {
public function testHandle() public function testHandle()
{ {
$user = factory(User::class, 'banned')->make(); $user = factory(User::class)->states('banned')->make();
$this->actingAs($user)->get('/user')->assertForbidden(); $this->actingAs($user)->get('/user')->assertForbidden();
$this->get('/user', ['accept' => 'application/json']) $this->get('/user', ['accept' => 'application/json'])
->assertForbidden() ->assertForbidden()

View File

@ -20,7 +20,7 @@ class FootComposerTest extends TestCase
]); ]);
$user = factory(User::class)->create(); $user = factory(User::class)->create();
$this->actingAs($user); $this->actingAs($user);
$this->get('/user')->assertSee('"<div></div>"'); $this->get('/user')->assertSee('"<div></div>"', false);
$crawler = new Crawler($this->get('/user')->getContent()); $crawler = new Crawler($this->get('/user')->getContent());
$this->assertCount(0, $crawler->filter('#disallowed')); $this->assertCount(0, $crawler->filter('#disallowed'));
@ -62,6 +62,6 @@ class FootComposerTest extends TestCase
$user = factory(User::class)->create(); $user = factory(User::class)->create();
$this->actingAs($user); $this->actingAs($user);
$this->get('/user')->assertSee('<div id=appended></div>'); $this->get('/user')->assertSee('<div id=appended></div>', false);
} }
} }

View File

@ -63,6 +63,6 @@ class HeadComposerTest extends TestCase
$event->contents[] = '<meta name=appended>'; $event->contents[] = '<meta name=appended>';
}); });
$this->get('/')->assertSee('<meta name=appended>'); $this->get('/')->assertSee('<meta name=appended>', false);
} }
} }

View File

@ -7,6 +7,6 @@ class LanguagesMenuComposerTest extends TestCase
public function testCompose() public function testCompose()
{ {
$this->get('/')->assertSee('?lang=en')->assertDontSee('en_US'); $this->get('/')->assertSee('?lang=en')->assertDontSee('en_US');
$this->get('/?key=value')->assertSee('?key=value&amp;lang=en'); $this->get('/?key=value')->assertSee('?key=value&lang=en');
} }
} }

View File

@ -15,7 +15,7 @@ class SideMenuComposerTest extends TestCase
{ {
Event::fake(); Event::fake();
$admin = factory(User::class, 'admin')->create(); $admin = factory(User::class)->states('admin')->create();
$this->actingAs($admin)->get('/user'); $this->actingAs($admin)->get('/user');
Event::assertDispatched(Events\ConfigureUserMenu::class); Event::assertDispatched(Events\ConfigureUserMenu::class);
Event::assertDispatched(Events\ConfigureExploreMenu::class); Event::assertDispatched(Events\ConfigureExploreMenu::class);
@ -53,7 +53,7 @@ class SideMenuComposerTest extends TestCase
); );
}); });
$admin = factory(User::class, 'admin')->create(); $admin = factory(User::class)->states('admin')->create();
$this->actingAs($admin) $this->actingAs($admin)
->get('/admin') ->get('/admin')
->assertDontSee(trans('general.plugin-configs')); ->assertDontSee(trans('general.plugin-configs'));

View File

@ -25,11 +25,11 @@ class UserPanelComposerTest extends TestCase
}); });
$this->get('/user') $this->get('/user')
->assertSee('<span class="badge bg-purple mb-1 mr-2">Pro</span>'); ->assertSee('<span class="badge bg-purple mb-1 mr-2">Pro</span>', false);
$user->permission = User::ADMIN; $user->permission = User::ADMIN;
$user->save(); $user->save();
$this->get('/user') $this->get('/user')
->assertSee('<span class="badge bg-primary mb-1 mr-2">STAFF</span>'); ->assertSee('<span class="badge bg-primary mb-1 mr-2">STAFF</span>', false);
} }
} }

View File

@ -15,7 +15,7 @@ class PlayerTest extends TestCase
$player = factory(Player::class)->create(); $player = factory(Player::class)->create();
$this->assertEquals('default', $player->model); $this->assertEquals('default', $player->model);
$alex = factory(Texture::class, 'alex')->create(); $alex = factory(Texture::class)->states('alex')->create();
$player->tid_skin = $alex->tid; $player->tid_skin = $alex->tid;
$player->save(); $player->save();
$player->refresh(); $player->refresh();

View File

@ -19,7 +19,7 @@ class HookTest extends TestCase
->get('/user') ->get('/user')
->assertSee('Link A') ->assertSee('Link A')
->assertSee('/to/a') ->assertSee('/to/a')
->assertSee('target="_blank"') ->assertSee('target="_blank"', false)
->assertSee('fa-book'); ->assertSee('fa-book');
// Out of bound // Out of bound
@ -55,26 +55,26 @@ class HookTest extends TestCase
{ {
Hook::addStyleFileToPage('/style/all'); Hook::addStyleFileToPage('/style/all');
$this->get('/') $this->get('/')
->assertSee('<link rel="stylesheet" href="/style/all">'); ->assertSee('<link rel="stylesheet" href="/style/all">', false);
Hook::addStyleFileToPage('/style/pattern', ['skinlib']); Hook::addStyleFileToPage('/style/pattern', ['skinlib']);
$this->get('/') $this->get('/')
->assertDontSee('<link rel="stylesheet" href="/style/pattern">'); ->assertDontSee('<link rel="stylesheet" href="/style/pattern">');
$this->get('/skinlib') $this->get('/skinlib')
->assertSee('<link rel="stylesheet" href="/style/pattern">'); ->assertSee('<link rel="stylesheet" href="/style/pattern">', false);
} }
public function testAddScriptFileToPage() public function testAddScriptFileToPage()
{ {
Hook::addScriptFileToPage('/script/all'); Hook::addScriptFileToPage('/script/all');
$this->get('/') $this->get('/')
->assertSee('<script src="/script/all"></script>'); ->assertSee('<script src="/script/all"></script>', false);
Hook::addScriptFileToPage('/script/pattern', ['skinlib']); Hook::addScriptFileToPage('/script/pattern', ['skinlib']);
$this->get('/') $this->get('/')
->assertDontSee('<script src="/script/pattern"></script>'); ->assertDontSee('<script src="/script/pattern"></script>');
$this->get('/skinlib') $this->get('/skinlib')
->assertSee('<script src="/script/pattern"></script>'); ->assertSee('<script src="/script/pattern"></script>', false);
} }
public function testAddUserBadge() public function testAddUserBadge()
@ -82,7 +82,7 @@ class HookTest extends TestCase
Hook::addUserBadge('hi', 'green'); Hook::addUserBadge('hi', 'green');
$this->actAs('normal') $this->actAs('normal')
->get('/user') ->get('/user')
->assertSee('<span class="badge bg-green mb-1 mr-2">hi</span>'); ->assertSee('<span class="badge bg-green mb-1 mr-2">hi</span>', false);
} }
public function testSendNotification() public function testSendNotification()

View File

@ -44,7 +44,7 @@ class TestCase extends \Illuminate\Foundation\Testing\TestCase
if ($role == 'normal') { if ($role == 'normal') {
$role = factory(\App\Models\User::class)->create(); $role = factory(\App\Models\User::class)->create();
} else { } else {
$role = factory(\App\Models\User::class, $role)->create(); $role = factory(\App\Models\User::class)->states($role)->create();
} }
} }