You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
157 lines
5.7 KiB
PHP
157 lines
5.7 KiB
PHP
<?php
|
|
|
|
namespace Tests\Feature;
|
|
|
|
use Tests\TestCase;
|
|
use App\Models\ProcesoAdmision;
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
|
|
class ProcesoAdmisionPublicadosTest extends TestCase
|
|
{
|
|
use RefreshDatabase;
|
|
|
|
protected function setUp(): void
|
|
{
|
|
parent::setUp();
|
|
|
|
// Ensure the procesos_admision table exists
|
|
$this->artisan('migrate', ['--path' => 'database/migrations']);
|
|
|
|
// Create table if doesn't exist (for testing with SQLite)
|
|
\Illuminate\Support\Facades\Schema::dropIfExists('procesos_admision');
|
|
\Illuminate\Support\Facades\Schema::create('procesos_admision', function ($table) {
|
|
$table->id();
|
|
$table->string('titulo');
|
|
$table->string('subtitulo')->nullable();
|
|
$table->text('descripcion')->nullable();
|
|
$table->string('slug', 120)->unique();
|
|
$table->string('tipo_proceso', 60)->nullable();
|
|
$table->string('modalidad', 50)->nullable();
|
|
$table->boolean('publicado')->default(false);
|
|
$table->datetime('fecha_publicacion')->nullable();
|
|
$table->datetime('fecha_inicio_preinscripcion')->nullable();
|
|
$table->datetime('fecha_fin_preinscripcion')->nullable();
|
|
$table->datetime('fecha_inicio_inscripcion')->nullable();
|
|
$table->datetime('fecha_fin_inscripcion')->nullable();
|
|
$table->datetime('fecha_examen1')->nullable();
|
|
$table->datetime('fecha_examen2')->nullable();
|
|
$table->datetime('fecha_resultados')->nullable();
|
|
$table->datetime('fecha_inicio_biometrico')->nullable();
|
|
$table->datetime('fecha_fin_biometrico')->nullable();
|
|
$table->string('imagen_path', 500)->nullable();
|
|
$table->string('banner_path', 500)->nullable();
|
|
$table->string('brochure_path', 500)->nullable();
|
|
$table->string('link_preinscripcion', 500)->nullable();
|
|
$table->string('link_inscripcion', 500)->nullable();
|
|
$table->string('link_resultados', 500)->nullable();
|
|
$table->string('link_reglamento', 500)->nullable();
|
|
$table->enum('estado', ['nuevo', 'publicado', 'en_proceso', 'finalizado', 'cancelado'])->default('nuevo');
|
|
$table->timestamps();
|
|
});
|
|
}
|
|
|
|
/** @test */
|
|
public function publicados_endpoint_returns_only_published_processes(): void
|
|
{
|
|
// Create published processes
|
|
$published1 = ProcesoAdmision::create([
|
|
'titulo' => 'Proceso Publicado 1',
|
|
'slug' => 'proceso-publicado-1',
|
|
'publicado' => true,
|
|
'estado' => 'publicado',
|
|
]);
|
|
|
|
$published2 = ProcesoAdmision::create([
|
|
'titulo' => 'Proceso Publicado 2',
|
|
'slug' => 'proceso-publicado-2',
|
|
'publicado' => true,
|
|
'estado' => 'en_proceso',
|
|
]);
|
|
|
|
// Create unpublished processes
|
|
ProcesoAdmision::create([
|
|
'titulo' => 'Proceso No Publicado 1',
|
|
'slug' => 'proceso-no-publicado-1',
|
|
'publicado' => false,
|
|
'estado' => 'nuevo',
|
|
]);
|
|
|
|
ProcesoAdmision::create([
|
|
'titulo' => 'Proceso No Publicado 2',
|
|
'slug' => 'proceso-no-publicado-2',
|
|
'publicado' => false,
|
|
'estado' => 'finalizado',
|
|
]);
|
|
|
|
// Call the publicados endpoint
|
|
$response = $this->getJson('/api/procesos-admision/publicados');
|
|
|
|
// Assert response is successful
|
|
$response->assertStatus(200);
|
|
|
|
// Assert only published processes are returned
|
|
$response->assertJsonCount(2);
|
|
|
|
// Assert the returned processes are the published ones
|
|
$responseData = $response->json();
|
|
$returnedTitles = array_column($responseData, 'titulo');
|
|
|
|
$this->assertContains('Proceso Publicado 1', $returnedTitles);
|
|
$this->assertContains('Proceso Publicado 2', $returnedTitles);
|
|
$this->assertNotContains('Proceso No Publicado 1', $returnedTitles);
|
|
$this->assertNotContains('Proceso No Publicado 2', $returnedTitles);
|
|
}
|
|
|
|
/** @test */
|
|
public function publicados_endpoint_returns_empty_array_when_no_published_processes(): void
|
|
{
|
|
// Create only unpublished processes
|
|
ProcesoAdmision::create([
|
|
'titulo' => 'Proceso No Publicado',
|
|
'slug' => 'proceso-no-publicado',
|
|
'publicado' => false,
|
|
'estado' => 'nuevo',
|
|
]);
|
|
|
|
$response = $this->getJson('/api/procesos-admision/publicados');
|
|
|
|
$response->assertStatus(200);
|
|
$response->assertJsonCount(0);
|
|
$response->assertJson([]);
|
|
}
|
|
|
|
/** @test */
|
|
public function publicados_endpoint_returns_processes_ordered_by_id_desc(): void
|
|
{
|
|
// Create published processes
|
|
$first = ProcesoAdmision::create([
|
|
'titulo' => 'Primer Proceso',
|
|
'slug' => 'primer-proceso',
|
|
'publicado' => true,
|
|
]);
|
|
|
|
$second = ProcesoAdmision::create([
|
|
'titulo' => 'Segundo Proceso',
|
|
'slug' => 'segundo-proceso',
|
|
'publicado' => true,
|
|
]);
|
|
|
|
$third = ProcesoAdmision::create([
|
|
'titulo' => 'Tercer Proceso',
|
|
'slug' => 'tercer-proceso',
|
|
'publicado' => true,
|
|
]);
|
|
|
|
$response = $this->getJson('/api/procesos-admision/publicados');
|
|
|
|
$response->assertStatus(200);
|
|
|
|
$responseData = $response->json();
|
|
|
|
// Should be ordered by id desc (newest first)
|
|
$this->assertEquals('Tercer Proceso', $responseData[0]['titulo']);
|
|
$this->assertEquals('Segundo Proceso', $responseData[1]['titulo']);
|
|
$this->assertEquals('Primer Proceso', $responseData[2]['titulo']);
|
|
}
|
|
}
|