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\PageCollection;
use App\Http\Resources\PageResource; use App\Http\Resources\PageResource;
use App\Http\Tools\Demo; use App\Http\Tools\Demo;
use App\Page; use App\Models\Page;
use Illuminate\Contracts\Routing\ResponseFactory;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Http\Response;
class PagesController extends Controller class PagesController extends Controller
{ {
@@ -19,20 +21,21 @@ class PagesController extends Controller
public function index() public function index()
{ {
return new PageCollection( return new PageCollection(
Page::sortable()->paginate(10) Page::sortable()
->paginate(10)
); );
} }
/** /**
* Get page resource * Get page resource
* *
* @param $slug * @param $page
* @return PageResource * @return PageResource
*/ */
public function show($slug) public function show(Page $page)
{ {
return new PageResource( return new PageResource(
Page::where('slug', $slug)->first() $page
); );
} }
@@ -40,22 +43,17 @@ class PagesController extends Controller
* Update page content * Update page content
* *
* @param Request $request * @param Request $request
* @param $slug * @param Page $page
* @return \Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\Response * @return ResponseFactory|Response
*/ */
public function update(Request $request, $slug) public function update(Request $request, Page $page)
{ {
// Check if is demo
if (env('APP_DEMO')) { if (env('APP_DEMO')) {
return Demo::response_204(); return Demo::response_204();
} }
// Get page
$page = Page::where('slug', $slug)->first();
// Update page
$page->update(make_single_input($request)); $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\StoreStripeCredentialsRequest;
use App\Http\Requests\SetupWizard\StoreStripePlansRequest; use App\Http\Requests\SetupWizard\StoreStripePlansRequest;
use App\Page; use App\Page;
use App\Services\SetupService;
use App\Services\StripeService; use App\Services\StripeService;
use App\Setting; use App\Setting;
use App\User; use App\User;
@@ -34,9 +35,10 @@ class SetupWizardController extends Controller
/** /**
* Inject Stripe Service * 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 // 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 = $request->license === 'Extended' ? collect(config('content.content_extended')) : collect(config('content.content_regular'));
$content->each(function ($content) { $content->each(function ($content) {
Setting::updateOrCreate($content); Setting::updateOrCreate($content);
}); });
$pages->each(function ($page) {
Page::updateOrCreate($page);
});
// Retrieve access token // Retrieve access token
$response = Route::dispatch(self::make_login_request($request)); $response = Route::dispatch(self::make_login_request($request));
@@ -506,31 +503,7 @@ class SetupWizardController extends Controller
'--force' => true '--force' => true
]); ]);
// Create Passport Keys $this->setup->seed_pages();
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,
]);
} }
/** /**

View File

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

View File

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

View File

@@ -4,6 +4,7 @@
namespace App\Services; namespace App\Services;
use App\Models\Page;
use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Storage;
class SetupService class SetupService
@@ -24,4 +25,15 @@ class SetupService
Storage::makeDirectory($directory); 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 // Pages
Route::group(['prefix' => 'pages'], function () { Route::group(['prefix' => 'pages'], function () {
Route::patch('/{slug}', [PagesController::class, 'update']); Route::patch('/{page}', [PagesController::class, 'update']);
Route::get('/{slug}', [PagesController::class, 'show']); Route::get('/{page}', [PagesController::class, 'show']);
Route::get('/', [PagesController::class, 'index']); Route::get('/', [PagesController::class, 'index']);
}); });

View File

@@ -4,6 +4,7 @@ namespace Tests\Feature;
use App\Models\File; use App\Models\File;
use App\Models\Folder; use App\Models\Folder;
use App\Models\Page;
use App\Models\Setting; use App\Models\Setting;
use App\Models\Share; use App\Models\Share;
use App\Models\User; use App\Models\User;
@@ -435,4 +436,52 @@ class AdminTest extends TestCase
Storage::disk('local') Storage::disk('local')
->assertMissing($user->settings->getRawOriginal('avatar')); ->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'
]);
}
} }