J'ai un peu de problème avec mes tests d'intégration PHPUnit, j'ai une méthode qui gère un téléchargement de formulaire pour un fichier vidéo ainsi qu'une image de prévisualisation pour cette vidéo.Virtual Filesystem pour les tests PHPUnit dans Laravel 5.4
public function store($request)
{
/** @var Video $resource */
$resource = new $this->model;
// Create a new Content before creating the related Photo
$contentRepo = new ContentRepository();
$content = $contentRepo->store($request);
if($content->isValid()) {
$resource->content_id = $content->id;
$directory = 'frontend/videos/assets/'.date("Y").'/'.date('m').'/'.time();
\File::makeDirectory($directory, 0755, true);
$request->video->move($directory.'/', $request->video->getClientOriginalName());
$resource->video = '/'.$directory.'/'.$request->video->getClientOriginalName();
$request->preview_image->move($directory.'/', $request->preview_image->getClientOriginalName());
$resource->preview_image = '/'.$directory.'/'.$request->preview_image->getClientOriginalName();
$resource->highlighted = intval($request->input('highlighted') == 'on');
$resource->save();
return $resource;
}
else {
return $content;
}
}
L'important est de garder l'appel $request->video->move()
que je dois probablement remplacer afin d'utiliser Virtual Filesystem.
puis le test
public function testVideoUpload(){
File::put(__DIR__.'/frontend/videos/assets/image.mp4', 'test');
$file = new UploadedFile(__DIR__.'/frontend/videos/assets/image.mp4', 'foofile.mp4', 'video/mp4', 100023, null, $test=true);
File::put(__DIR__.'/frontend/images/assets/image.jpg', 'test');
$preview = new UploadedFile(__DIR__.'/frontend/images/assets/image.jpg', 'foofile.jpg', 'image/jpeg', 100023, null, $test=true);
$this->post('/admin/videos', [
'title' => 'My Video #12',
'description' => 'This is a description',
'actors' => [$this->actor->id, $this->actor2->id],
'scenes' => [$this->scene->id, $this->scene2->id],
'payment_methods' => [$this->paymentMethod->id],
'video' => $file,
'preview_image' => $preview
])->seeInDatabase('contents', [
'title' => 'My Video #12',
'description' => 'This is a description'
]);
}
Comme vous pouvez le voir, je dois créer un fichier fictif dans un répertoire local et utiliser alors que dans la requête HTTP au point final de la forme, puis après, ce fichier serait déplacé et j'ai besoin de supprimer le dossier créé et le nouveau fichier déplacé ... c'est un gâchis authentique.
En tant que tel je veux utiliser Virtual Filesystem à la place, mais je ne sais pas comment le configurer dans ce cas particulier, j'ai déjà téléchargé un paquet et le configurer, mais les questions sont, d'abord, quel paquet avez-vous utilisé/recommandé et comment ajusteriez-vous la classe et le test pour supporter le système de fichiers virtuel? Aurais-je besoin de passer à l'utilisation de la façade de stockage au lieu de l'appel $request->video->move()
? Si oui, comment cela se ferait-il exactement?
Merci d'avance pour votre aide