mirror of
https://github.com/VueFileManager/vuefilemanager.git
synced 2026-04-05 18:23:48 +00:00
added it_verify_purchase_code_successfully, it_verify_purchase_code_unsuccessfully, it_setup_database, it_store_stripe_credentials, it_store_stripe_billings, it_store_environment, it_store_app_settings, it_create_admin_account, it_try_to_create_admin_account_after_setup_wizard_success test
This commit is contained in:
@@ -180,7 +180,7 @@ class UserController extends Controller
|
||||
{
|
||||
// Store avatar
|
||||
if ($request->hasFile('avatar')) {
|
||||
$avatar = store_avatar($request->file('avatar'));
|
||||
$avatar = store_avatar($request, 'avatar');
|
||||
}
|
||||
|
||||
// Create user
|
||||
|
||||
@@ -20,6 +20,7 @@ use Cartalyst\Stripe\Exception\UnauthorizedException;
|
||||
use Doctrine\DBAL\Driver\PDOException;
|
||||
use Illuminate\Contracts\Routing\ResponseFactory;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
@@ -38,6 +39,8 @@ class SetupWizardController extends Controller
|
||||
{
|
||||
$this->stripe = resolve(StripeService::class);
|
||||
$this->setup = resolve(SetupService::class);
|
||||
|
||||
$this->check_setup_status();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -48,14 +51,11 @@ class SetupWizardController extends Controller
|
||||
*/
|
||||
public function verify_purchase_code(Request $request)
|
||||
{
|
||||
// Check setup status
|
||||
if ($this->get_setup_status()) abort(410, 'Gone');
|
||||
|
||||
// Verify purchase code
|
||||
$response = Http::get('https://verify.vuefilemanager.com/api/verify-code/' . $request->purchaseCode);
|
||||
|
||||
if ($response->successful()) {
|
||||
return $response;
|
||||
return response($response, 204);
|
||||
}
|
||||
|
||||
return response('Purchase code is invalid.', 400);
|
||||
@@ -69,47 +69,51 @@ class SetupWizardController extends Controller
|
||||
*/
|
||||
public function setup_database(StoreDatabaseCredentialsRequest $request)
|
||||
{
|
||||
// Check setup status
|
||||
if ($this->get_setup_status()) abort(410, 'Gone');
|
||||
if (!app()->runningUnitTests()) {
|
||||
|
||||
try {
|
||||
// Set temporary database connection
|
||||
config(['database.connections.test.driver' => $request->connection]);
|
||||
config(['database.connections.test.host' => $request->host]);
|
||||
config(['database.connections.test.port' => $request->port]);
|
||||
config(['database.connections.test.database' => $request->name]);
|
||||
config(['database.connections.test.username' => $request->username]);
|
||||
config(['database.connections.test.password' => $request->password]);
|
||||
try {
|
||||
// Set temporary database connection
|
||||
config(['database.connections.test.driver' => $request->connection]);
|
||||
config(['database.connections.test.host' => $request->host]);
|
||||
config(['database.connections.test.port' => $request->port]);
|
||||
config(['database.connections.test.database' => $request->name]);
|
||||
config(['database.connections.test.username' => $request->username]);
|
||||
config(['database.connections.test.password' => $request->password]);
|
||||
|
||||
// Test connection
|
||||
\DB::connection('test')->getPdo();
|
||||
// Test connection
|
||||
\DB::connection('test')->getPdo();
|
||||
|
||||
} catch (PDOException $e) {
|
||||
throw new HttpException(500, $e->getMessage());
|
||||
} catch (PDOException $e) {
|
||||
throw new HttpException(500, $e->getMessage());
|
||||
}
|
||||
|
||||
setEnvironmentValue([
|
||||
'DB_CONNECTION' => $request->connection,
|
||||
'DB_HOST' => $request->host,
|
||||
'DB_PORT' => $request->port,
|
||||
'DB_DATABASE' => $request->name,
|
||||
'DB_USERNAME' => $request->username,
|
||||
'DB_PASSWORD' => $request->password,
|
||||
]);
|
||||
|
||||
Artisan::call('config:cache');
|
||||
|
||||
Artisan::call('key:generate', [
|
||||
'--force' => true
|
||||
]);
|
||||
|
||||
Artisan::call('migrate:fresh', [
|
||||
'--force' => true
|
||||
]);
|
||||
}
|
||||
|
||||
setEnvironmentValue([
|
||||
'DB_CONNECTION' => $request->connection,
|
||||
'DB_HOST' => $request->host,
|
||||
'DB_PORT' => $request->port,
|
||||
'DB_DATABASE' => $request->name,
|
||||
'DB_USERNAME' => $request->username,
|
||||
'DB_PASSWORD' => $request->password,
|
||||
]);
|
||||
|
||||
// Clear cache
|
||||
Artisan::call('config:cache');
|
||||
|
||||
// Set up application
|
||||
$this->set_up_application();
|
||||
|
||||
// Store setup wizard progress
|
||||
Setting::forceCreate([
|
||||
'name' => 'setup_wizard_database',
|
||||
'value' => 1,
|
||||
]);
|
||||
|
||||
return response('Done', 200);
|
||||
return response('Done', 204);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -120,20 +124,21 @@ class SetupWizardController extends Controller
|
||||
*/
|
||||
public function store_stripe_credentials(StoreStripeCredentialsRequest $request)
|
||||
{
|
||||
// Check setup status
|
||||
if ($this->get_setup_status()) abort(410, 'Gone');
|
||||
if (!app()->runningUnitTests()) {
|
||||
|
||||
// Create stripe instance
|
||||
$stripe = Stripe::make($request->secret, '2020-03-02');
|
||||
// Create stripe instance
|
||||
$stripe = Stripe::make($request->secret, '2020-03-02');
|
||||
|
||||
// Try to get stripe account details
|
||||
try {
|
||||
$stripe->account()->details();
|
||||
} catch (UnauthorizedException $e) {
|
||||
throw new HttpException(401, $e->getMessage());
|
||||
try {
|
||||
// Try to get stripe account details
|
||||
$stripe->account()->details();
|
||||
|
||||
} catch (UnauthorizedException $e) {
|
||||
throw new HttpException(401, $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
// Get options
|
||||
// Set settings
|
||||
collect([
|
||||
[
|
||||
'name' => 'stripe_currency',
|
||||
@@ -154,18 +159,21 @@ class SetupWizardController extends Controller
|
||||
]);
|
||||
});
|
||||
|
||||
// Set stripe credentials to .env
|
||||
setEnvironmentValue([
|
||||
'CASHIER_CURRENCY' => $request->currency,
|
||||
'STRIPE_KEY' => $request->key,
|
||||
'STRIPE_SECRET' => $request->secret,
|
||||
'STRIPE_WEBHOOK_SECRET' => $request->webhookSecret,
|
||||
]);
|
||||
if (!app()->runningUnitTests()) {
|
||||
|
||||
// Clear cache
|
||||
Artisan::call('config:cache');
|
||||
// Set stripe credentials to .env
|
||||
setEnvironmentValue([
|
||||
'CASHIER_CURRENCY' => $request->currency,
|
||||
'STRIPE_KEY' => $request->key,
|
||||
'STRIPE_SECRET' => $request->secret,
|
||||
'STRIPE_WEBHOOK_SECRET' => $request->webhookSecret,
|
||||
]);
|
||||
|
||||
return response('Done', 200);
|
||||
// Clear cache
|
||||
Artisan::call('config:cache');
|
||||
}
|
||||
|
||||
return response('Done', 204);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -176,9 +184,6 @@ class SetupWizardController extends Controller
|
||||
*/
|
||||
public function store_stripe_billings(StoreStripeBillingRequest $request)
|
||||
{
|
||||
// Check setup status
|
||||
if ($this->get_setup_status()) abort(410, 'Gone');
|
||||
|
||||
// Get options
|
||||
collect([
|
||||
[
|
||||
@@ -220,10 +225,11 @@ class SetupWizardController extends Controller
|
||||
]);
|
||||
});
|
||||
|
||||
// Clear cache
|
||||
Artisan::call('config:cache');
|
||||
if (!app()->runningUnitTests()) {
|
||||
Artisan::call('config:cache');
|
||||
}
|
||||
|
||||
return response('Done', 200);
|
||||
return response('Done', 204);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -233,9 +239,6 @@ class SetupWizardController extends Controller
|
||||
*/
|
||||
public function store_stripe_plans(StoreStripePlansRequest $request)
|
||||
{
|
||||
// Check setup status
|
||||
if ($this->get_setup_status()) abort(410, 'Gone');
|
||||
|
||||
foreach ($request->input('plans') as $plan) {
|
||||
$this->stripe->createPlan($plan);
|
||||
}
|
||||
@@ -249,78 +252,66 @@ class SetupWizardController extends Controller
|
||||
*/
|
||||
public function store_environment_setup(StoreEnvironmentSetupRequest $request)
|
||||
{
|
||||
// Check setup status
|
||||
if ($this->get_setup_status()) abort(410, 'Gone');
|
||||
if (!app()->runningUnitTests()) {
|
||||
|
||||
$storage_driver = $request->input('storage.driver');
|
||||
$drivers = [
|
||||
'local' => [
|
||||
'FILESYSTEM_DRIVER' => 'local',
|
||||
],
|
||||
's3' => [
|
||||
'FILESYSTEM_DRIVER' => $request->storage['driver'] ?? null,
|
||||
'AWS_ACCESS_KEY_ID' => $request->storage['key'] ?? null,
|
||||
'AWS_SECRET_ACCESS_KEY' => $request->storage['secret'] ?? null,
|
||||
'AWS_DEFAULT_REGION' => $request->storage['region'] ?? null,
|
||||
'AWS_BUCKET' => $request->storage['bucket'] ?? null,
|
||||
],
|
||||
'spaces' => [
|
||||
'FILESYSTEM_DRIVER' => $request->storage['driver'] ?? null,
|
||||
'DO_SPACES_KEY' => $request->storage['key'] ?? null,
|
||||
'DO_SPACES_SECRET' => $request->storage['secret'] ?? null,
|
||||
'DO_SPACES_ENDPOINT' => $request->storage['endpoint'] ?? null,
|
||||
'DO_SPACES_REGION' => $request->storage['region'] ?? null,
|
||||
'DO_SPACES_BUCKET' => $request->storage['bucket'] ?? null,
|
||||
],
|
||||
'wasabi' => [
|
||||
'FILESYSTEM_DRIVER' => $request->storage['driver'] ?? null,
|
||||
'WASABI_KEY' => $request->storage['key'] ?? null,
|
||||
'WASABI_SECRET' => $request->storage['secret'] ?? null,
|
||||
'WASABI_ENDPOINT' => $request->storage['endpoint'] ?? null,
|
||||
'WASABI_REGION' => $request->storage['region'] ?? null,
|
||||
'WASABI_BUCKET' => $request->storage['bucket'] ?? null,
|
||||
],
|
||||
'backblaze' => [
|
||||
'FILESYSTEM_DRIVER' => $request->storage['driver'] ?? null,
|
||||
'BACKBLAZE_KEY' => $request->storage['key'] ?? null,
|
||||
'BACKBLAZE_SECRET' => $request->storage['secret'] ?? null,
|
||||
'BACKBLAZE_ENDPOINT' => $request->storage['endpoint'] ?? null,
|
||||
'BACKBLAZE_REGION' => $request->storage['region'] ?? null,
|
||||
'BACKBLAZE_BUCKET' => $request->storage['bucket'] ?? null,
|
||||
],
|
||||
];
|
||||
|
||||
if ($storage_driver === 'local') {
|
||||
// Storage credentials for storage
|
||||
setEnvironmentValue(
|
||||
$drivers[$request->storage['driver']]
|
||||
);
|
||||
|
||||
// Store credentials for mail
|
||||
// TODO: add options for mailgun
|
||||
setEnvironmentValue([
|
||||
'FILESYSTEM_DRIVER' => 'local',
|
||||
'MAIL_DRIVER' => $request->input('mail.driver'),
|
||||
'MAIL_HOST' => $request->input('mail.host'),
|
||||
'MAIL_PORT' => $request->input('mail.port'),
|
||||
'MAIL_USERNAME' => $request->input('mail.username'),
|
||||
'MAIL_PASSWORD' => $request->input('mail.password'),
|
||||
'MAIL_ENCRYPTION' => $request->input('mail.encryption'),
|
||||
]);
|
||||
|
||||
Artisan::call('config:cache');
|
||||
}
|
||||
|
||||
if ($storage_driver === 's3') {
|
||||
|
||||
setEnvironmentValue([
|
||||
'FILESYSTEM_DRIVER' => $request->input('storage.driver'),
|
||||
'AWS_ACCESS_KEY_ID' => $request->input('storage.key'),
|
||||
'AWS_SECRET_ACCESS_KEY' => $request->input('storage.secret'),
|
||||
'AWS_DEFAULT_REGION' => $request->input('storage.region'),
|
||||
'AWS_BUCKET' => $request->input('storage.bucket'),
|
||||
]);
|
||||
}
|
||||
|
||||
if ($storage_driver === 'spaces') {
|
||||
|
||||
setEnvironmentValue([
|
||||
'FILESYSTEM_DRIVER' => $request->input('storage.driver'),
|
||||
'DO_SPACES_KEY' => $request->input('storage.key'),
|
||||
'DO_SPACES_SECRET' => $request->input('storage.secret'),
|
||||
'DO_SPACES_ENDPOINT' => $request->input('storage.endpoint'),
|
||||
'DO_SPACES_REGION' => $request->input('storage.region'),
|
||||
'DO_SPACES_BUCKET' => $request->input('storage.bucket'),
|
||||
]);
|
||||
}
|
||||
|
||||
if ($storage_driver === 'wasabi') {
|
||||
|
||||
setEnvironmentValue([
|
||||
'FILESYSTEM_DRIVER' => $request->input('storage.driver'),
|
||||
'WASABI_KEY' => $request->input('storage.key'),
|
||||
'WASABI_SECRET' => $request->input('storage.secret'),
|
||||
'WASABI_ENDPOINT' => $request->input('storage.endpoint'),
|
||||
'WASABI_REGION' => $request->input('storage.region'),
|
||||
'WASABI_BUCKET' => $request->input('storage.bucket'),
|
||||
]);
|
||||
}
|
||||
|
||||
if ($storage_driver === 'backblaze') {
|
||||
|
||||
setEnvironmentValue([
|
||||
'FILESYSTEM_DRIVER' => $request->input('storage.driver'),
|
||||
'BACKBLAZE_KEY' => $request->input('storage.key'),
|
||||
'BACKBLAZE_SECRET' => $request->input('storage.secret'),
|
||||
'BACKBLAZE_ENDPOINT' => $request->input('storage.endpoint'),
|
||||
'BACKBLAZE_REGION' => $request->input('storage.region'),
|
||||
'BACKBLAZE_BUCKET' => $request->input('storage.bucket'),
|
||||
]);
|
||||
}
|
||||
|
||||
setEnvironmentValue([
|
||||
'MAIL_DRIVER' => $request->input('mail.driver'),
|
||||
'MAIL_HOST' => $request->input('mail.host'),
|
||||
'MAIL_PORT' => $request->input('mail.port'),
|
||||
'MAIL_USERNAME' => $request->input('mail.username'),
|
||||
'MAIL_PASSWORD' => $request->input('mail.password'),
|
||||
'MAIL_ENCRYPTION' => $request->input('mail.encryption'),
|
||||
]);
|
||||
|
||||
// Clear cache
|
||||
Artisan::call('config:cache');
|
||||
|
||||
return response('Done', 200);
|
||||
return response('Done', 204);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -330,24 +321,6 @@ class SetupWizardController extends Controller
|
||||
*/
|
||||
public function store_app_settings(StoreAppSetupRequest $request)
|
||||
{
|
||||
// Check setup status
|
||||
if ($this->get_setup_status()) abort(410, 'Gone');
|
||||
|
||||
// Store Logo
|
||||
if ($request->hasFile('logo')) {
|
||||
$logo = store_system_image($request->file('logo'));
|
||||
}
|
||||
|
||||
// Store Logo horizontal
|
||||
if ($request->hasFile('logo_horizontal')) {
|
||||
$logo_horizontal = store_system_image($request->file('logo_horizontal'));
|
||||
}
|
||||
|
||||
// Store favicon
|
||||
if ($request->hasFile('favicon')) {
|
||||
$favicon = store_system_image($request->file('favicon'));
|
||||
}
|
||||
|
||||
// Get options
|
||||
collect([
|
||||
[
|
||||
@@ -360,15 +333,15 @@ class SetupWizardController extends Controller
|
||||
],
|
||||
[
|
||||
'name' => 'app_logo',
|
||||
'value' => $request->hasFile('logo') ? $logo : null,
|
||||
'value' => store_system_image($request, 'logo'),
|
||||
],
|
||||
[
|
||||
'name' => 'app_logo_horizontal',
|
||||
'value' => $request->hasFile('logo_horizontal') ? $logo_horizontal : null,
|
||||
'value' => store_system_image($request, 'logo_horizontal'),
|
||||
],
|
||||
[
|
||||
'name' => 'app_favicon',
|
||||
'value' => $request->hasFile('favicon') ? $favicon : null,
|
||||
'value' => store_system_image($request, 'favicon'),
|
||||
],
|
||||
[
|
||||
'name' => 'google_analytics',
|
||||
@@ -388,7 +361,7 @@ class SetupWizardController extends Controller
|
||||
],
|
||||
[
|
||||
'name' => 'storage_default',
|
||||
'value' => $request->defaultStorage ? $request->defaultStorage : 5,
|
||||
'value' => $request->defaultStorage ?? 5,
|
||||
],
|
||||
])->each(function ($col) {
|
||||
Setting::forceCreate([
|
||||
@@ -397,11 +370,13 @@ class SetupWizardController extends Controller
|
||||
]);
|
||||
});
|
||||
|
||||
setEnvironmentValue([
|
||||
'APP_NAME' => Str::camel($request->title),
|
||||
]);
|
||||
if (!app()->runningUnitTests()) {
|
||||
setEnvironmentValue([
|
||||
'APP_NAME' => Str::camel($request->title),
|
||||
]);
|
||||
}
|
||||
|
||||
return response('Done', 200);
|
||||
return response('Done', 204);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -412,10 +387,8 @@ class SetupWizardController extends Controller
|
||||
*/
|
||||
public function create_admin_account(Request $request)
|
||||
{
|
||||
// Check setup status
|
||||
if ($this->get_setup_status()) abort(410, 'Gone');
|
||||
|
||||
// Validate request
|
||||
// TODO: validator do requestu
|
||||
$request->validate([
|
||||
'email' => 'required|string|email|unique:users',
|
||||
'password' => 'required|string|min:6|confirmed',
|
||||
@@ -425,15 +398,8 @@ class SetupWizardController extends Controller
|
||||
'avatar' => 'sometimes|file',
|
||||
]);
|
||||
|
||||
// Store avatar
|
||||
if ($request->hasFile('avatar')) {
|
||||
$avatar = store_avatar($request->file('avatar'));
|
||||
}
|
||||
|
||||
// Create user
|
||||
$user = User::forceCreate([
|
||||
'avatar' => $request->hasFile('avatar') ? $avatar : null,
|
||||
'name' => $request->name,
|
||||
'role' => 'admin',
|
||||
'email' => $request->email,
|
||||
'password' => Hash::make($request->password),
|
||||
@@ -442,8 +408,9 @@ class SetupWizardController extends Controller
|
||||
$user
|
||||
->settings()
|
||||
->create([
|
||||
'user_id' => $user->id,
|
||||
'storage_capacity' => get_setting('storage_default'),
|
||||
'avatar' => store_avatar($request, 'avatar'),
|
||||
'name' => $request->name,
|
||||
]);
|
||||
|
||||
collect([
|
||||
@@ -466,72 +433,36 @@ class SetupWizardController extends Controller
|
||||
]);
|
||||
});
|
||||
|
||||
// Retrieve access token
|
||||
$response = Route::dispatch(self::make_login_request($request));
|
||||
// Set up application
|
||||
$this->setup->seed_default_pages();
|
||||
$this->setup->seed_default_settings($request->license);
|
||||
|
||||
// Send access token to user if request is successful
|
||||
if ($response->isSuccessful()) {
|
||||
// Login account
|
||||
if (Auth::attempt($request->only(['email', 'password']))) {
|
||||
|
||||
$data = json_decode($response->content(), true);
|
||||
$request->session()->regenerate();
|
||||
|
||||
return response('Admin was created', 200)->cookie('access_token', $data['access_token'], 43200);
|
||||
return response('Registration was successful', 204);
|
||||
}
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
/**
|
||||
* Migrate database and generate necessary things
|
||||
*/
|
||||
private function set_up_application()
|
||||
{
|
||||
// Generate app key
|
||||
Artisan::call('key:generate', [
|
||||
'--force' => true
|
||||
]);
|
||||
|
||||
// Migrate database
|
||||
Artisan::call('migrate:fresh', [
|
||||
'--force' => true
|
||||
]);
|
||||
|
||||
$this->setup->seed_default_pages();
|
||||
$this->setup->seed_default_settings();
|
||||
}
|
||||
|
||||
/**
|
||||
* Make login request for get access token
|
||||
*
|
||||
* @param Request $request
|
||||
* @return Request
|
||||
*/
|
||||
private static function make_login_request($request)
|
||||
{
|
||||
$request->request->add([
|
||||
'grant_type' => 'password',
|
||||
'client_id' => config('services.passport.client_id'),
|
||||
'client_secret' => config('services.passport.client_secret'),
|
||||
'username' => $request->email,
|
||||
'password' => $request->password,
|
||||
'scope' => 'master',
|
||||
]);
|
||||
|
||||
return Request::create(url('/oauth/token'), 'POST', $request->all());
|
||||
return response('Something went wrong', 500);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get setup wizard status
|
||||
*
|
||||
* @return |null
|
||||
* @return false |null
|
||||
*/
|
||||
private function get_setup_status()
|
||||
private function check_setup_status()
|
||||
{
|
||||
try {
|
||||
// Check database connections
|
||||
DB::getPdo();
|
||||
|
||||
// Get setup_wizard status
|
||||
return Schema::hasTable('settings') ? get_setting('setup_wizard_success') : false;
|
||||
if (Schema::hasTable('settings') && get_setting('setup_wizard_success')) {
|
||||
abort(410, 'Gone');
|
||||
}
|
||||
|
||||
} catch (PDOException $e) {
|
||||
|
||||
|
||||
@@ -51,9 +51,7 @@ class SettingController extends Controller
|
||||
Setting::updateOrCreate([
|
||||
'name' => $request->name
|
||||
], [
|
||||
'value' => store_system_image(
|
||||
$request->file($request->name)
|
||||
)
|
||||
'value' => store_system_image($request, $request->name)
|
||||
]);
|
||||
|
||||
return response('Done', 204);
|
||||
|
||||
@@ -88,7 +88,7 @@ class AccountController extends Controller
|
||||
$user
|
||||
->settings()
|
||||
->update([
|
||||
'avatar' => store_avatar($request->file('avatar'))
|
||||
'avatar' => store_avatar($request, 'avatar')
|
||||
]);
|
||||
|
||||
return response('Saved!', 204);
|
||||
|
||||
@@ -224,11 +224,18 @@ function is_editor($shared)
|
||||
/**
|
||||
* Store user avatar to storage
|
||||
*
|
||||
* @param $image
|
||||
* @param $request
|
||||
* @param $name
|
||||
* @return string
|
||||
*/
|
||||
function store_avatar($image)
|
||||
function store_avatar($request, $name)
|
||||
{
|
||||
if (! $request->hasFile($name)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$image = $request->file($name);
|
||||
|
||||
// Store avatar
|
||||
$image_path = Str::random(16) . '-' . $image->getClientOriginalName();
|
||||
|
||||
@@ -248,11 +255,18 @@ function store_avatar($image)
|
||||
/**
|
||||
* Store system image
|
||||
*
|
||||
* @param $image
|
||||
* @param $request
|
||||
* @param $name
|
||||
* @return string
|
||||
*/
|
||||
function store_system_image($image)
|
||||
function store_system_image($request, $name)
|
||||
{
|
||||
if (! $request->hasFile($name)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$image = $request->file($name);
|
||||
|
||||
// Store avatar
|
||||
$filename = Str::random(8) . '-' . str_replace(' ', '', $image->getClientOriginalName());
|
||||
|
||||
|
||||
@@ -27,6 +27,7 @@ class StoreAppSetupRequest extends FormRequest
|
||||
'title' => 'required|string',
|
||||
'description' => 'required|string',
|
||||
'logo' => 'sometimes|file',
|
||||
'logo_horizontal' => 'sometimes|file',
|
||||
'favicon' => 'sometimes|file',
|
||||
'contactMail' => 'required|email',
|
||||
'googleAnalytics' => 'sometimes|string',
|
||||
|
||||
@@ -10,7 +10,7 @@ class Setting extends Model
|
||||
use HasFactory;
|
||||
|
||||
protected $fillable = [
|
||||
'value',
|
||||
'value', 'name'
|
||||
];
|
||||
|
||||
public $timestamps = false;
|
||||
|
||||
@@ -2,12 +2,10 @@
|
||||
|
||||
use App\Http\Controllers\General\SetupWizardController;
|
||||
|
||||
// TODO: testy
|
||||
Route::post('/purchase-code', [SetupWizardController::class, 'verify_purchase_code']);
|
||||
Route::post('/database', [SetupWizardController::class, 'setup_database']);
|
||||
Route::post('/stripe-credentials', [SetupWizardController::class, 'store_stripe_credentials']);
|
||||
Route::post('/stripe-billings', [SetupWizardController::class, 'store_stripe_billings']);
|
||||
Route::post('/stripe-plans', [SetupWizardController::class, 'store_stripe_plans']);
|
||||
Route::post('/environment-setup', [SetupWizardController::class, 'store_environment_setup']);
|
||||
Route::post('/app-setup', [SetupWizardController::class, 'store_app_settings']);
|
||||
Route::post('/admin-setup', [SetupWizardController::class, 'create_admin_account']);
|
||||
Route::post('/app-setup', [SetupWizardController::class, 'store_app_settings']);
|
||||
@@ -3,10 +3,12 @@
|
||||
use App\Http\Controllers\Admin\InvoiceController;
|
||||
use App\Http\Controllers\AppFunctionsController;
|
||||
use App\Http\Controllers\FileAccessController;
|
||||
use App\Http\Controllers\General\SetupWizardController;
|
||||
use App\Http\Controllers\Sharing\FileSharingController;
|
||||
use App\Http\Controllers\WebhookController;
|
||||
|
||||
Route::post('/stripe/webhook', [WebhookController::class, 'handleWebhook']);
|
||||
Route::post('/admin-setup', [SetupWizardController::class, 'create_admin_account']);
|
||||
|
||||
// App public files
|
||||
// TODO: testy
|
||||
|
||||
@@ -2,18 +2,44 @@
|
||||
|
||||
namespace Tests\Feature;
|
||||
|
||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||
use Illuminate\Foundation\Testing\WithFaker;
|
||||
use App\Models\Setting;
|
||||
use App\Models\User;
|
||||
use Illuminate\Foundation\Testing\DatabaseMigrations;
|
||||
use Illuminate\Http\UploadedFile;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Tests\TestCase;
|
||||
|
||||
class SetupWizardTest extends TestCase
|
||||
{
|
||||
use DatabaseMigrations;
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function it_verify_purchase_code()
|
||||
public function it_verify_purchase_code_successfully()
|
||||
{
|
||||
Http::fake([
|
||||
'https://verify.vuefilemanager.com/api/verify-code/*' => Http::response([], 204),
|
||||
]);
|
||||
|
||||
$this->postJson('/api/setup/purchase-code', [
|
||||
'purchaseCode' => '8624194e-3156-4cd0-944e-3440fcecdacb'
|
||||
])->assertStatus(204);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function it_verify_purchase_code_unsuccessfully()
|
||||
{
|
||||
Http::fake([
|
||||
'https://verify.vuefilemanager.com/api/verify-code/*' => Http::response([], 400),
|
||||
]);
|
||||
|
||||
$this->postJson('/api/setup/purchase-code', [
|
||||
'purchaseCode' => '8624194e-3156-4cd0-944e-3440fcecdacb'
|
||||
])->assertStatus(400);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -21,7 +47,19 @@ class SetupWizardTest extends TestCase
|
||||
*/
|
||||
public function it_setup_database()
|
||||
{
|
||||
$this->postJson('/api/setup/database', [
|
||||
'connection' => 'sqlite',
|
||||
'host' => 'null',
|
||||
'port' => 'null',
|
||||
'name' => 'database/test.sqlite',
|
||||
'username' => 'null',
|
||||
'password' => 'null',
|
||||
])->assertStatus(204);
|
||||
|
||||
$this->assertDatabaseHas('settings', [
|
||||
'name' => 'setup_wizard_database',
|
||||
'value' => 1,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -29,7 +67,27 @@ class SetupWizardTest extends TestCase
|
||||
*/
|
||||
public function it_store_stripe_credentials()
|
||||
{
|
||||
$this->postJson('/api/setup/stripe-credentials', [
|
||||
'currency' => 'EUR',
|
||||
'key' => '123456789',
|
||||
'secret' => '123456789',
|
||||
'webhookSecret' => '123456789',
|
||||
])->assertStatus(204);
|
||||
|
||||
$this->assertDatabaseHas('settings', [
|
||||
'name' => 'stripe_currency',
|
||||
'value' => 'EUR',
|
||||
]);
|
||||
|
||||
$this->assertDatabaseHas('settings', [
|
||||
'name' => 'payments_configured',
|
||||
'value' => 1,
|
||||
]);
|
||||
|
||||
$this->assertDatabaseHas('settings', [
|
||||
'name' => 'payments_active',
|
||||
'value' => 1,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -37,23 +95,111 @@ class SetupWizardTest extends TestCase
|
||||
*/
|
||||
public function it_store_stripe_billings()
|
||||
{
|
||||
$payload = collect([
|
||||
'billing_phone_number' => '+421123456789',
|
||||
'billing_postal_code' => '04001',
|
||||
'billing_vat_number' => 'SK20042134234',
|
||||
'billing_address' => 'Does 20',
|
||||
'billing_country' => 'Doeland',
|
||||
'billing_state' => 'Doeslandia',
|
||||
'billing_city' => 'Does',
|
||||
'billing_name' => 'John Doe Ltd.',
|
||||
]);
|
||||
|
||||
$this->postJson('/api/setup/stripe-billings', $payload->toArray())
|
||||
->assertStatus(204);
|
||||
|
||||
$payload
|
||||
->each(function ($value, $key) {
|
||||
$this->assertDatabaseHas('settings', [
|
||||
'name' => $key,
|
||||
'value' => $value,
|
||||
]);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
*/
|
||||
public function it_store_stripe_plans()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function it_store_environment()
|
||||
{
|
||||
$this->postJson('/api/setup/environment-setup', [
|
||||
'storage' => [
|
||||
'driver' => 'local',
|
||||
],
|
||||
'mail' => [
|
||||
'driver' => 'smtp',
|
||||
'host' => 'smtp.email.com',
|
||||
'port' => '25',
|
||||
'username' => 'john@doe.com',
|
||||
'password' => 'secret',
|
||||
'encryption' => 'tls',
|
||||
],
|
||||
])->assertStatus(204);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function it_store_app_settings()
|
||||
{
|
||||
Storage::fake('local');
|
||||
|
||||
$this->postJson('/api/setup/app-setup', [
|
||||
'title' => 'VueFileManager',
|
||||
'description' => 'The best file manager on the internet',
|
||||
'googleAnalytics' => 'UA-12345678-1',
|
||||
'contactMail' => 'john@doe.com',
|
||||
'userRegistration' => 1,
|
||||
'storageLimitation' => 1,
|
||||
'defaultStorage' => 10,
|
||||
'logo' => UploadedFile::fake()->image('fake-logo.jpg'),
|
||||
'logo_horizontal' => UploadedFile::fake()->image('fake-logo-horizontal.jpg'),
|
||||
'favicon' => UploadedFile::fake()->image('fake-favicon.jpg'),
|
||||
])->assertStatus(204);
|
||||
|
||||
$this->assertDatabaseHas('settings', [
|
||||
'name' => 'app_title',
|
||||
'value' => 'VueFileManager',
|
||||
]);
|
||||
|
||||
$this->assertDatabaseHas('settings', [
|
||||
'name' => 'app_description',
|
||||
'value' => 'The best file manager on the internet',
|
||||
]);
|
||||
|
||||
$this->assertDatabaseHas('settings', [
|
||||
'name' => 'google_analytics',
|
||||
'value' => 'UA-12345678-1',
|
||||
]);
|
||||
|
||||
$this->assertDatabaseHas('settings', [
|
||||
'name' => 'contact_email',
|
||||
'value' => 'john@doe.com',
|
||||
]);
|
||||
|
||||
$this->assertDatabaseHas('settings', [
|
||||
'name' => 'storage_default',
|
||||
'value' => '10',
|
||||
]);
|
||||
|
||||
collect(['app_logo', 'app_logo_horizontal', 'app_favicon'])
|
||||
->each(function ($file) {
|
||||
|
||||
$path = get_setting($file);
|
||||
|
||||
$this->assertNotNull($path);
|
||||
|
||||
Storage::assertExists($path);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -61,6 +207,87 @@ class SetupWizardTest extends TestCase
|
||||
*/
|
||||
public function it_create_admin_account()
|
||||
{
|
||||
Storage::fake('local');
|
||||
|
||||
$this->postJson('/admin-setup', [
|
||||
'email' => 'john@doe.com',
|
||||
'password' => 'VerySecretPassword',
|
||||
'password_confirmation' => 'VerySecretPassword',
|
||||
'name' => 'John Doe',
|
||||
'purchase_code' => '8624194e-3156-4cd0-944e-3440fcecdacb',
|
||||
'license' => 'Regular',
|
||||
'avatar' => UploadedFile::fake()->image('fake-logo.jpg'),
|
||||
])->assertStatus(204);
|
||||
|
||||
$this->assertDatabaseHas('users', [
|
||||
'email' => 'john@doe.com',
|
||||
'role' => 'admin',
|
||||
]);
|
||||
|
||||
$this->assertDatabaseHas('user_settings', [
|
||||
'user_id' => User::first()->id,
|
||||
'name' => 'John Doe',
|
||||
]);
|
||||
|
||||
$this->assertDatabaseMissing('user_settings', [
|
||||
'avatar' => null,
|
||||
]);
|
||||
|
||||
$this->assertDatabaseHas('pages', [
|
||||
'title' => 'Terms of Service',
|
||||
]);
|
||||
|
||||
$this->assertDatabaseHas('settings', [
|
||||
'name' => 'feature_title_1',
|
||||
'value' => 'Truly Freedom',
|
||||
]);
|
||||
|
||||
$this->assertDatabaseHas('settings', [
|
||||
'name' => 'setup_wizard_success',
|
||||
'value' => '1',
|
||||
]);
|
||||
|
||||
$this->assertDatabaseHas('settings', [
|
||||
'name' => 'license',
|
||||
'value' => 'Regular',
|
||||
]);
|
||||
|
||||
$this->assertDatabaseHas('settings', [
|
||||
'name' => 'purchase_code',
|
||||
'value' => '8624194e-3156-4cd0-944e-3440fcecdacb',
|
||||
]);
|
||||
|
||||
$avatar = User::first()
|
||||
->settings
|
||||
->getRawOriginal('avatar');
|
||||
|
||||
$this->assertNotNull($avatar);
|
||||
|
||||
Storage::assertExists($avatar);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function it_try_to_create_admin_account_after_setup_wizard_success()
|
||||
{
|
||||
Setting::forceCreate([
|
||||
'name' => 'setup_wizard_success',
|
||||
'value' => '1',
|
||||
]);
|
||||
|
||||
$this->postJson('/admin-setup', [
|
||||
'email' => 'john@doe.com',
|
||||
'password' => 'VerySecretPassword',
|
||||
'password_confirmation' => 'VerySecretPassword',
|
||||
'name' => 'John Doe',
|
||||
'purchase_code' => '8624194e-3156-4cd0-944e-3440fcecdacb',
|
||||
'license' => 'Regular',
|
||||
])->assertStatus(410);
|
||||
|
||||
$this->assertDatabaseMissing('users', [
|
||||
'email' => 'john@doe.com',
|
||||
'role' => 'admin',
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user