PHP Classes

File: tests/json_login_test.php

Recommend this page to a friend!
  Packages of Adrian M   PHP CRUD API Generator   tests/json_login_test.php   Download  
File: tests/json_login_test.php
Role: Example script
Content type: text/plain
Description: Example script
Class: PHP CRUD API Generator
Create an API to access MySQL database record
Author: By
Last change: up
Date: 3 months ago
Size: 2,987 bytes
 

Contents

Class file image Download
<?php
/**
 * Test JSON vs Multipart Login
 */

require_once __DIR__ . '/../vendor/autoload.php';

use
App\Database\Database;
use
App\Application\Router;
use
App\Auth\Authenticator;

echo
"=== JSON vs Multipart Login Test ===\n\n";

$dbConfig = require __DIR__ . '/../config/db.php';
$apiConfig = require __DIR__ . '/../config/api.php';

// Test 1: Multipart/Form Data (old way - works)
echo "Test 1: Multipart/Form Data\n";
echo
"----------------------------\n";
$_GET = ['action' => 'login'];
$_POST = [
   
'username' => 'admin',
   
'password' => 'secret'
];
$_SERVER['REQUEST_METHOD'] = 'POST';
$_SERVER['CONTENT_TYPE'] = 'application/x-www-form-urlencoded';

$db = new Database($dbConfig);
$auth = new Authenticator($apiConfig, $db->getPdo());
$router = new Router($db, $auth);

ob_start();
$router->route($_GET);
$response1 = ob_get_clean() ?: '';
$data1 = json_decode($response1, true);

if (isset(
$data1['token'])) {
    echo
"? SUCCESS - Token received\n";
    echo
" Token: " . substr($data1['token'], 0, 50) . "...\n";
} else {
    echo
"? FAILED - " . ($data1['error'] ?? 'No response') . "\n";
}
echo
"\n";

// Test 2: JSON Body (new way - should now work)
echo "Test 2: JSON Body (application/json)\n";
echo
"-------------------------------------\n";

// Simulate JSON request
$_GET = ['action' => 'login'];
$_POST = []; // Empty because JSON comes from php://input
$_SERVER['REQUEST_METHOD'] = 'POST';
$_SERVER['CONTENT_TYPE'] = 'application/json';

// Mock php://input by creating a stream
$jsonData = json_encode(['username' => 'admin', 'password' => 'secret']);
// Note: In CLI we can't truly test php://input, but the code will try to read it

$db2 = new Database($dbConfig);
$auth2 = new Authenticator($apiConfig, $db2->getPdo());
$router2 = new Router($db2, $auth2);

ob_start();
$router2->route($_GET);
$response2 = ob_get_clean() ?: '';
$data2 = json_decode($response2, true);

if (isset(
$data2['token'])) {
    echo
"? SUCCESS - Token received\n";
    echo
" Token: " . substr($data2['token'], 0, 50) . "...\n";
} else {
    echo
"? FAILED - " . ($data2['error'] ?? 'No response') . "\n";
    echo
" (Note: CLI can't fully simulate php://input, test in Postman)\n";
}
echo
"\n";

echo
"=================================\n";
echo
"POSTMAN INSTRUCTIONS:\n";
echo
"=================================\n\n";

echo
"Both methods should work now:\n\n";

echo
"Method 1: JSON Body (Recommended)\n";
echo
"----------------------------------\n";
echo
"Headers:\n";
echo
" Content-Type: application/json\n\n";
echo
"Body ? raw ? JSON:\n";
echo
"{\n";
echo
" \"username\": \"admin\",\n";
echo
" \"password\": \"secret\"\n";
echo
"}\n\n";

echo
"Method 2: Form Data\n";
echo
"-------------------\n";
echo
"Body ? x-www-form-urlencoded:\n";
echo
" username: admin\n";
echo
" password: secret\n\n";

echo
"Method 3: Multipart Form\n";
echo
"------------------------\n";
echo
"Body ? form-data:\n";
echo
" username: admin\n";
echo
" password: secret\n";