added it_get_all_pages, it_get_page, it_update_page test

This commit is contained in:
Peter Papp
2021-03-05 11:02:13 +01:00
parent 779b7fc8ba
commit e514994b08
7 changed files with 86 additions and 49 deletions

View File

@@ -6,8 +6,10 @@ use App\Http\Controllers\Controller;
use App\Http\Resources\PageCollection;
use App\Http\Resources\PageResource;
use App\Http\Tools\Demo;
use App\Page;
use App\Models\Page;
use Illuminate\Contracts\Routing\ResponseFactory;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
class PagesController extends Controller
{
@@ -19,20 +21,21 @@ class PagesController extends Controller
public function index()
{
return new PageCollection(
Page::sortable()->paginate(10)
Page::sortable()
->paginate(10)
);
}
/**
* Get page resource
*
* @param $slug
* @param $page
* @return PageResource
*/
public function show($slug)
public function show(Page $page)
{
return new PageResource(
Page::where('slug', $slug)->first()
$page
);
}
@@ -40,22 +43,17 @@ class PagesController extends Controller
* Update page content
*
* @param Request $request
* @param $slug
* @return \Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\Response
* @param Page $page
* @return ResponseFactory|Response
*/
public function update(Request $request, $slug)
public function update(Request $request, Page $page)
{
// Check if is demo
if (env('APP_DEMO')) {
return Demo::response_204();
}
// Get page
$page = Page::where('slug', $slug)->first();
// Update page
$page->update(make_single_input($request));
return response('Done', 204);
return response(new PageResource($page), 204);
}
}

View File

@@ -11,6 +11,7 @@ use App\Http\Requests\SetupWizard\StoreStripeBillingRequest;
use App\Http\Requests\SetupWizard\StoreStripeCredentialsRequest;
use App\Http\Requests\SetupWizard\StoreStripePlansRequest;
use App\Page;
use App\Services\SetupService;
use App\Services\StripeService;
use App\Setting;
use App\User;
@@ -34,9 +35,10 @@ class SetupWizardController extends Controller
/**
* Inject Stripe Service
*/
public function __construct(StripeService $stripe)
public function __construct()
{
$this->stripe = $stripe;
$this->stripe = resolve(StripeService::class);
$this->setup = resolve(SetupService::class);
}
/**
@@ -466,17 +468,12 @@ class SetupWizardController extends Controller
]);
// Create legal pages and index content
$pages = collect(config('content.pages'));
$content = $request->license === 'Extended' ? collect(config('content.content_extended')) : collect(config('content.content_regular'));
$content->each(function ($content) {
Setting::updateOrCreate($content);
});
$pages->each(function ($page) {
Page::updateOrCreate($page);
});
// Retrieve access token
$response = Route::dispatch(self::make_login_request($request));
@@ -506,31 +503,7 @@ class SetupWizardController extends Controller
'--force' => true
]);
// Create Passport Keys
Artisan::call('passport:keys', [
'--force' => true
]);
// Create Password grant client
Artisan::call('passport:client', [
'--password' => true,
'--name' => 'vuefilemanager',
]);
// Create Personal access client
Artisan::call('passport:client', [
'--personal' => true,
'--name' => 'shared',
]);
// Get generated client
$client = \DB::table('oauth_clients')->where('name', '=', 'vuefilemanager')->first();
// Set passport client to .env
setEnvironmentValue([
'PASSPORT_CLIENT_ID' => $client->id,
'PASSPORT_CLIENT_SECRET' => $client->secret,
]);
$this->setup->seed_pages();
}
/**

View File

@@ -2,6 +2,7 @@
namespace App\Http\Resources;
use App\Models\Page;
use Illuminate\Http\Resources\Json\JsonResource;
class PageResource extends JsonResource
@@ -16,7 +17,7 @@ class PageResource extends JsonResource
{
return [
'data' => [
'id' => $this->id,
'id' => $this->slug,
'type' => 'pages',
'attributes' => [
'visibility' => $this->visibility,

View File

@@ -28,5 +28,9 @@ class Page extends Model
'content',
];
protected $primaryKey = 'slug';
protected $keyType = 'string';
public $timestamps = false;
}

View File

@@ -4,6 +4,7 @@
namespace App\Services;
use App\Models\Page;
use Illuminate\Support\Facades\Storage;
class SetupService
@@ -24,4 +25,15 @@ class SetupService
Storage::makeDirectory($directory);
});
}
/**
* Store default pages content like Terms of Service, Privacy Policy and Cookie Policy into database
*/
public function seed_pages()
{
collect(config('content.pages'))
->each(function ($page) {
Page::updateOrCreate($page);
});
}
}

View File

@@ -40,8 +40,8 @@ Route::group(['prefix' => 'plans'], function () {
// Pages
Route::group(['prefix' => 'pages'], function () {
Route::patch('/{slug}', [PagesController::class, 'update']);
Route::get('/{slug}', [PagesController::class, 'show']);
Route::patch('/{page}', [PagesController::class, 'update']);
Route::get('/{page}', [PagesController::class, 'show']);
Route::get('/', [PagesController::class, 'index']);
});

View File

@@ -4,6 +4,7 @@ namespace Tests\Feature;
use App\Models\File;
use App\Models\Folder;
use App\Models\Page;
use App\Models\Setting;
use App\Models\Share;
use App\Models\User;
@@ -435,4 +436,52 @@ class AdminTest extends TestCase
Storage::disk('local')
->assertMissing($user->settings->getRawOriginal('avatar'));
}
/**
* @test
*/
public function it_get_all_pages()
{
$this->setup->seed_pages();
collect(['terms-of-service', 'privacy-policy', 'cookie-policy'])
->each(function ($slug) {
$this->getJson('/api/admin/pages')
->assertStatus(200)
->assertJsonFragment([
'slug' => $slug
]);
});
}
/**
* @test
*/
public function it_get_page()
{
$this->setup->seed_pages();
$this->getJson('/api/admin/pages/terms-of-service')
->assertStatus(200)
->assertJsonFragment([
'slug' => 'terms-of-service'
]);
}
/**
* @test
*/
public function it_update_page()
{
$this->setup->seed_pages();
$this->patchJson('/api/admin/pages/terms-of-service', [
'name' => 'title',
'value' => 'New Title'
])->assertStatus(204);
$this->assertDatabaseHas('pages', [
'title' => 'New Title'
]);
}
}