ailixir-api / tests /Feature /DockingSubmitTest.php
AILIXIR Bot
Auto-sync: 201d269f287526269b8ffded5f450ff36b46c740
907b200
Raw
History Blame Contribute Delete
6.73 kB
<?php
namespace Tests\Feature;
use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Http\UploadedFile;
use Laravel\Sanctum\Sanctum;
use Tests\TestCase;
class DockingSubmitTest extends TestCase
{
use RefreshDatabase;
public function test_authenticated_request_succeeds(): void
{
$user = User::factory()->create();
Sanctum::actingAs($user);
$proteinPath = base_path('tests/Fixtures/docking/egfr_clean.pdbqt');
$ligandPath = base_path('tests/Fixtures/docking/ligand.pdbqt');
$proteinFile = new UploadedFile(
$proteinPath,
'egfr_clean.pdbqt',
'application/octet-stream',
null,
true
);
$ligandFile = new UploadedFile(
$ligandPath,
'ligand.pdbqt',
'application/octet-stream',
null,
true
);
$response = $this->postJson('/api/docking/submit', [
'protein_name' => 'EGFR',
'protein_file' => $proteinFile,
'ligand_name' => 'Erlotinib',
'ligand_file' => $ligandFile,
'center_x' => 10.0,
'center_y' => 15.0,
'center_z' => 20.0,
'box_size_x' => 25.0,
'box_size_y' => 25.0,
'box_size_z' => 25.0,
'exhaustiveness' => 8,
'n_poses' => 5,
]);
$response->assertStatus(200)
->assertJsonStructure([
'success',
'message',
'data' => [
'job_id',
'status',
]
])
->assertJson([
'success' => true,
'message' => 'Docking Job Successfully Queued',
'data' => [
'status' => 'pending',
]
]);
}
public function test_ligand_smiles_succeeds(): void
{
$user = User::factory()->create();
Sanctum::actingAs($user);
$proteinPath = base_path('tests/Fixtures/docking/egfr_clean.pdbqt');
$proteinFile = new UploadedFile(
$proteinPath,
'egfr_clean.pdbqt',
'application/octet-stream',
null,
true
);
$response = $this->postJson('/api/docking/submit', [
'protein_name' => 'EGFR',
'protein_file' => $proteinFile,
'ligand_name' => 'Erlotinib',
'ligand_smiles' => 'CC1=CC(=O)NC2=C1C=CC=C2',
'center_x' => 10.0,
'center_y' => 15.0,
'center_z' => 20.0,
'box_size_x' => 25.0,
'box_size_y' => 25.0,
'box_size_z' => 25.0,
'exhaustiveness' => 8,
'n_poses' => 5,
]);
$response->assertStatus(200)
->assertJsonStructure([
'success',
'message',
'data' => [
'job_id',
'status',
]
])
->assertJson([
'success' => true,
'message' => 'Docking Job Successfully Queued',
'data' => [
'status' => 'pending',
]
]);
}
public function test_reject_both_ligand_file_and_ligand_smiles(): void
{
$user = User::factory()->create();
Sanctum::actingAs($user);
$proteinPath = base_path('tests/Fixtures/docking/egfr_clean.pdbqt');
$ligandPath = base_path('tests/Fixtures/docking/ligand.pdbqt');
$proteinFile = new UploadedFile(
$proteinPath,
'egfr_clean.pdbqt',
'application/octet-stream',
null,
true
);
$ligandFile = new UploadedFile(
$ligandPath,
'ligand.pdbqt',
'application/octet-stream',
null,
true
);
$response = $this->postJson('/api/docking/submit', [
'protein_name' => 'EGFR',
'protein_file' => $proteinFile,
'ligand_name' => 'Erlotinib',
'ligand_file' => $ligandFile,
'ligand_smiles' => 'CC1=CC(=O)NC2=C1C=CC=C2',
'center_x' => 10.0,
'center_y' => 15.0,
'center_z' => 20.0,
'box_size_x' => 25.0,
'box_size_y' => 25.0,
'box_size_z' => 25.0,
]);
$response->assertStatus(422)
->assertJson([
'success' => false,
'message' => 'Validation Error',
]);
}
public function test_reject_missing_both_ligand_file_and_ligand_smiles(): void
{
$user = User::factory()->create();
Sanctum::actingAs($user);
$proteinPath = base_path('tests/Fixtures/docking/egfr_clean.pdbqt');
$proteinFile = new UploadedFile(
$proteinPath,
'egfr_clean.pdbqt',
'application/octet-stream',
null,
true
);
$response = $this->postJson('/api/docking/submit', [
'protein_name' => 'EGFR',
'protein_file' => $proteinFile,
'ligand_name' => 'Erlotinib',
'center_x' => 10.0,
'center_y' => 15.0,
'center_z' => 20.0,
'box_size_x' => 25.0,
'box_size_y' => 25.0,
'box_size_z' => 25.0,
]);
$response->assertStatus(422)
->assertJson([
'success' => false,
'message' => 'Validation Error',
]);
}
public function test_unauthenticated_request_fails(): void
{
$proteinPath = base_path('tests/Fixtures/docking/egfr_clean.pdbqt');
$ligandPath = base_path('tests/Fixtures/docking/ligand.pdbqt');
$proteinFile = new UploadedFile(
$proteinPath,
'egfr_clean.pdbqt',
'application/octet-stream',
null,
true
);
$ligandFile = new UploadedFile(
$ligandPath,
'ligand.pdbqt',
'application/octet-stream',
null,
true
);
$response = $this->postJson('/api/docking/submit', [
'protein_name' => 'EGFR',
'protein_file' => $proteinFile,
'ligand_name' => 'Erlotinib',
'ligand_file' => $ligandFile,
'center_x' => 10.0,
'center_y' => 15.0,
'center_z' => 20.0,
'box_size_x' => 25.0,
'box_size_y' => 25.0,
'box_size_z' => 25.0,
]);
$response->assertStatus(401);
}
}