function let(UploadedArchiveFactory $uploadedArchiveFactory, UploadProviderRegistry $uploadProviderRegistry, ArchiveRepository $archiveRepository, UploadedArchiveRepository $uploadedArchiveRepository, Archive $archive, UploadProvider $provider, UploadedArchive $uploadedArchive, UploadedArchiveFactory $uploadedArchiveFactory)
 {
     $archiveRepository->findByName('myArchiveName')->willReturn($archive);
     $uploadProviderRegistry->get('myProvider1')->willReturn($provider);
     $archive->getFiles()->willReturn([new ArchiveFile('/home/cocoders/aaa/a.jpg')]);
     $provider->upload('myArchiveName', ['/home/cocoders/aaa/a.jpg'])->willReturn();
     $uploadedArchiveFactory->create($archive, [$provider])->willReturn($uploadedArchive);
     $archiveRepository->add($archive)->willReturn();
     $archive->upload()->willReturn();
     $uploadedArchiveRepository->add($uploadedArchive)->willReturn();
     $this->beConstructedWith($uploadedArchiveFactory, $uploadProviderRegistry, $archiveRepository, $uploadedArchiveRepository);
 }
 public function execute(UploadArchiveRequest $request)
 {
     $archive = $this->archiveRepository->findByName($request->archiveName);
     if (!$archive) {
         $this->archiveNotFound($request->archiveName);
         return;
     }
     $archiveFilePaths = array_map(function (ArchiveFile $archiveFile) {
         return $archiveFile->getPath();
     }, $archive->getFiles());
     $providers = [];
     foreach ($request->providersNames as $providerName) {
         $provider = $this->uploadProviderRegistry->get($providerName);
         $provider->upload($request->archiveName, $archiveFilePaths);
         $providers[] = $provider;
     }
     $archive->upload();
     $uploadedArchive = $this->uploadedArchiveFactory->create($archive, $providers);
     $this->uploadedArchiveRepository->add($uploadedArchive);
     $this->archiveRepository->add($archive);
     $this->archiveUploaded($request->archiveName);
 }