Skip to content

Commit

Permalink
Merge pull request #644 from Dev-Tonia/feat/activate-squeeze-page
Browse files Browse the repository at this point in the history
Feat: activate squeeze page
  • Loading branch information
bhimbho authored Mar 2, 2025
2 parents 307820c + c4403ab commit 6dc806d
Show file tree
Hide file tree
Showing 6 changed files with 227 additions and 104 deletions.
61 changes: 42 additions & 19 deletions app/Http/Controllers/Api/V1/SqueezePageCoontroller.php
Original file line number Diff line number Diff line change
Expand Up @@ -93,29 +93,29 @@ public function destroy(DeleteSqueezeRequest $request, string $squeeze_page)

public function search(Request $request)
{
$request->validate([
'q' => 'required|string|max:255',
]);
$request->validate([
'q' => 'required|string|max:255',
]);

$query = SqueezePage::query();
$query = SqueezePage::query();

if ($searchTerm = $request->input('q')) {
$query->where(function ($q) use ($searchTerm) {
$q->where('headline', 'LIKE', "%{$searchTerm}%")
->orWhere('sub_headline', 'LIKE', "%{$searchTerm}%")
->orWhere('content', 'LIKE', "%{$searchTerm}%")
->orWhere('title', 'LIKE', "%{$searchTerm}%")
->orWhere('slug', 'LIKE', "%{$searchTerm}%");
});
}
if ($searchTerm = $request->input('q')) {
$query->where(function ($q) use ($searchTerm) {
$q->where('headline', 'LIKE', "%{$searchTerm}%")
->orWhere('sub_headline', 'LIKE', "%{$searchTerm}%")
->orWhere('content', 'LIKE', "%{$searchTerm}%")
->orWhere('title', 'LIKE', "%{$searchTerm}%")
->orWhere('slug', 'LIKE', "%{$searchTerm}%");
});
}

$results = $query->get();
$results = $query->get();

return response()->json([
'status' => Response::HTTP_OK,
'message' => 'Search result retrieved',
'data' => $results,
]);
return response()->json([
'status' => Response::HTTP_OK,
'message' => 'Search result retrieved',
'data' => $results,
]);
}

public function filter(FilterSqueezeRequest $request)
Expand All @@ -141,4 +141,27 @@ public function filter(FilterSqueezeRequest $request)
'data' => $results,
]);
}

public function activateSqueezePage($id)
{
try {
$squeezePage = SqueezePage::findOrFail($id);

// Toggle the activate boolean field
$squeezePage->activate = !$squeezePage->activate;
$squeezePage->save();

return response()->json([
'status' => 'success',
'message' => $squeezePage->activate ? 'Squeeze page activated' : 'Squeeze page deactivated',
'data' => $squeezePage,
], 200);
} catch (\Exception $e) {
return response()->json([
'status' => 'error',
'message' => 'Failed to toggle activation status',
'error' => $e->getMessage()
], 500);
}
}
}
15 changes: 8 additions & 7 deletions app/Http/Controllers/SqueezePageUserController.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace App\Http\Controllers;

use App\Models\SqueezePage;
use Illuminate\Http\Request;
use App\Models\SqueezePageUser;

Expand Down Expand Up @@ -48,11 +49,11 @@ public function index(Request $request)
$limit = $request->input('limit', 10);

$offset = ($page - 1) * $limit;

$squeezePageUsers = SqueezePageUser::select('firstname', 'lastname', 'email', 'title', 'created_at')
->offset($offset)
->limit($limit)
->get();
->offset($offset)
->limit($limit)
->get();

$totalItems = SqueezePageUser::count();
$totalPages = ceil($totalItems / $limit);
Expand All @@ -61,9 +62,9 @@ public function index(Request $request)
'message' => 'User details retrieved successfully.',
'data' => $squeezePageUsers,
'pagination' => [
'totalItems' => $totalItems,
'totalPages' => $totalPages,
'currentPage' => $page,
'totalItems' => $totalItems,
'totalPages' => $totalPages,
'currentPage' => $page,
],
'status_code' => 200,
], 200);
Expand Down
4 changes: 3 additions & 1 deletion routes/api.php
Original file line number Diff line number Diff line change
Expand Up @@ -303,6 +303,9 @@
Route::post('/faqs', [FaqController::class, 'store']);
Route::put('/faqs/{id}', [FaqController::class, 'update']);
Route::delete('/faqs/{id}', [FaqController::class, 'destroy']);

// end point to activate a squeeze page
Route::patch('/squeeze-pages/{id}/activate', [SqueezePageCoontroller::class, 'activateSqueezePage']);
});

Route::post('/waitlists', [WaitListController::class, 'store']);
Expand Down Expand Up @@ -359,7 +362,6 @@

Route::post('/squeeze-user', [SqueezePageUserController::class, 'store']);


//Newsletter Subscription
Route::post('newsletter-subscription', [NewsletterSubscriptionController::class, 'store']);

Expand Down
127 changes: 127 additions & 0 deletions tests/Feature/SqueezePageActivationTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
<?php



namespace Tests\Feature;

use App\Models\SqueezePage;
use App\Models\User;
use Tests\TestCase;
use Tymon\JWTAuth\Facades\JWTAuth;
use Illuminate\Foundation\Testing\RefreshDatabase;


class SqueezePageActivationTest extends TestCase
{
use RefreshDatabase;

protected $adminUser;
protected $adminToken;
// protected $squeezePage;

public function setUp(): void
{
parent::setUp();

// Create admin user and generate token
$this->adminUser = User::factory()->create(['role' => 'admin']);
$this->adminToken = JWTAuth::fromUser($this->adminUser);
}

public function test_admin_can_activate_squeeze_page()
{
// Create a squeeze page with all required fields
$squeezePage = SqueezePage::create([
'headline' => 'Increase Your Conversions',
'sub_headline' => 'Discover Proven Techniques',
'hero_image' => 'conversion_secrets.jpg',
'content' => 'Find out how to turn visitors into customers...',
'title' => 'Conversion Secrets',
'slug' => 'conversion-secrets-1',
'status' => 'online',
'activate' => false,
]);

$response = $this->withHeaders(['Authorization' => "Bearer {$this->adminToken}"])
->patchJson("/api/v1/squeeze-pages/{$squeezePage->id}/activate");

$response->assertStatus(200)
->assertJson([
'status' => 'success',
'message' => 'Squeeze page activated',
'data' => [
'id' => $squeezePage->id,
'activate' => true
]
]);

$this->assertTrue($squeezePage->fresh()->activate);
}

public function test_admin_can_deactivate_squeeze_page()
{
// Create a squeeze page with all required fields

// Create a test squeeze page
$squeezePage = SqueezePage::create([
'headline' => 'Increase Your Conversions',
'sub_headline' => 'Discover Proven Techniques',
'hero_image' => 'conversion_secrets.jpg',
'content' => 'Find out how to turn visitors into customers...',
'title' => 'Conversion Secrets',
'slug' => 'conversion-secrets-2',
'status' => 'online',
'activate' => true,
]);
$response = $this->withHeaders(['Authorization' => "Bearer {$this->adminToken}"])
->patchJson("/api/v1/squeeze-pages/{$squeezePage->id}/activate");

$response->assertStatus(200)
->assertJson([
'status' => 'success',
'message' => 'Squeeze page deactivated',
'data' => [
'id' => $squeezePage->id,
'activate' => false
]
]);

$this->assertFalse($squeezePage->fresh()->activate);
}

public function test_non_admin_cannot_activate_squeeze_page()
{
// Create a squeeze page with all required fields
$squeezePage = SqueezePage::create([
'id' => '9e535fc0-b9b7-4da7-8f6c-295b20997461',
'headline' => 'Increase Your Conversions',
'sub_headline' => 'Discover Proven Techniques',
'hero_image' => 'conversion_secrets.jpg',
'content' => 'Find out how to turn visitors into customers...',
'title' => 'Conversion Secrets',
'slug' => 'dev-tonia',
'status' => 'online',
'activate' => false,
]);

$regularUser = User::factory()->create(['role' => 'user']);
$userToken = JWTAuth::fromUser($regularUser);

$response = $this->withHeaders(['Authorization' => "Bearer $userToken"])
->patchJson("/api/v1/squeeze-pages/{$squeezePage->id}/activate");

$response->assertStatus(401);
}

public function test_activation_fails_for_non_existent_squeeze_page()
{
$response = $this->withHeaders(['Authorization' => "Bearer $this->adminToken"])
->patchJson("/api/v1/squeeze-pages/999999/activate");

$response->assertStatus(500)
->assertJson([
'status' => 'error',
'message' => 'Failed to toggle activation status'
]);
}
}
1 change: 1 addition & 0 deletions tests/Feature/SqueezePagesTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Tests\Feature;

use App\Models\SqueezePage;
use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
Expand Down
Loading

0 comments on commit 6dc806d

Please sign in to comment.