From e543f00657b46fe8b7eeb29b6fbef877962f18b2 Mon Sep 17 00:00:00 2001 From: Angel Fernando Quiroz Campos Date: Wed, 29 Sep 2021 17:00:24 -0500 Subject: [PATCH 1/4] Message: Allow sent recorded audio as attachment --- assets/vue/components/AudioRecorder.vue | 60 +++++++++++++------ assets/vue/components/message/Form.vue | 26 +++++++- assets/vue/main.js | 8 +++ assets/vue/services/messageattachment.js | 3 + assets/vue/views/message/Create.vue | 11 ++++ .../Api/CreateMessageAttachmentAction.php | 51 ++++++++++++++++ src/CoreBundle/Entity/Message.php | 2 +- src/CoreBundle/Entity/MessageAttachment.php | 37 +++++++++++- 8 files changed, 176 insertions(+), 22 deletions(-) create mode 100644 assets/vue/services/messageattachment.js create mode 100644 src/CoreBundle/Controller/Api/CreateMessageAttachmentAction.php diff --git a/assets/vue/components/AudioRecorder.vue b/assets/vue/components/AudioRecorder.vue index c9b1a451ca..c2bb0ea25f 100644 --- a/assets/vue/components/AudioRecorder.vue +++ b/assets/vue/components/AudioRecorder.vue @@ -1,26 +1,37 @@ diff --git a/assets/vue/components/message/Form.vue b/assets/vue/components/message/Form.vue index bfc1236f2d..5d3344fa40 100644 --- a/assets/vue/components/message/Form.vue +++ b/assets/vue/components/message/Form.vue @@ -16,11 +16,21 @@
-
+
    -
  • -
  • +
@@ -28,7 +38,9 @@
- + @@ -38,14 +50,14 @@ diff --git a/assets/vue/components/message/Form.vue b/assets/vue/components/message/Form.vue index 5d3344fa40..308de17d80 100644 --- a/assets/vue/components/message/Form.vue +++ b/assets/vue/components/message/Form.vue @@ -15,8 +15,13 @@ -
-
+
+
  • diff --git a/src/CoreBundle/Entity/MessageAttachment.php b/src/CoreBundle/Entity/MessageAttachment.php index 2441185d88..03cb1e161d 100644 --- a/src/CoreBundle/Entity/MessageAttachment.php +++ b/src/CoreBundle/Entity/MessageAttachment.php @@ -47,7 +47,7 @@ use Doctrine\ORM\Mapping as ORM; ], iri: 'http://schema.org/MediaObject', itemOperations: ['get'], - normalizationContext: ['groups' => 'message:read'] + normalizationContext: ['groups' => 'message:read'], )] class MessageAttachment extends AbstractResource implements ResourceInterface { From ffcff54577c9967147163384b71841a99055bca5 Mon Sep 17 00:00:00 2001 From: Angel Fernando Quiroz Campos Date: Thu, 30 Sep 2021 17:00:23 -0500 Subject: [PATCH 4/4] PHPUnit: Test to send message with attachment --- .../Repository/MessageRepositoryTest.php | 101 +++++++++++++----- 1 file changed, 72 insertions(+), 29 deletions(-) diff --git a/tests/CoreBundle/Repository/MessageRepositoryTest.php b/tests/CoreBundle/Repository/MessageRepositoryTest.php index 5065554435..77d05eced2 100644 --- a/tests/CoreBundle/Repository/MessageRepositoryTest.php +++ b/tests/CoreBundle/Repository/MessageRepositoryTest.php @@ -168,43 +168,86 @@ class MessageRepositoryTest extends AbstractApiTest { self::bootKernel(); - $em = $this->getEntityManager(); + $user1 = $this->getUser('admin'); + $user2 = $this->createUser('user2'); - $messageAttachmentRepo = self::getContainer()->get(MessageAttachmentRepository::class); - $messageRepo = self::getContainer()->get(MessageRepository::class); + $user1Token = $this->getUserTokenFromUser($user1); - $admin = $this->getUser('admin'); - $testUser = $this->createUser('test'); + $client = $this->createClientWithCredentials($user1Token); - // Create message. - $message = (new Message()) - ->setTitle('hello') - ->setContent('content') - ->setMsgType(Message::MESSAGE_TYPE_INBOX) - ->setSender($admin) - ->addReceiver($testUser) - ; - - $this->assertHasNoEntityViolations($message); - $messageRepo->update($message); + $responseMessage = $client->request( + 'POST', + '/api/messages', + [ + 'json' => [ + 'msgType' => Message::MESSAGE_TYPE_INBOX, + 'title' => 'Message title', + 'content' => 'Message content', + 'receivers' => [ + [ + 'receiver' => "/api/users/{$user2->getId()}", + 'receiverType' => MessageRelUser::TYPE_TO, + ], + ], + 'sender' => "/api/users/{$user1->getId()}", + ], + ] + ); - $file = $this->getUploadedFile(); + $this->assertResponseIsSuccessful(); + $this->assertResponseHeaderSame('content-type', 'application/ld+json; charset=utf-8'); + $this->assertJsonContains( + [ + '@context' => '/api/contexts/Message', + '@type' => 'Message', + 'sender' => [ + '@id' => "/api/users/{$user1->getId()}", + ], + 'receiversTo' => [ + [ + '@type' => 'MessageRelUser', + 'receiver' => [ + '@id' => "/api/users/{$user2->getId()}", + ], + 'receiverType' => MessageRelUser::TYPE_TO, + ], + ], + 'msgType' => Message::MESSAGE_TYPE_INBOX, + 'title' => 'Message title', + 'content' => 'Message content', + ] + ); - $attachment = (new MessageAttachment()) - ->setFilename($file->getFilename()) - ->setMessage($message) - ->setParent($message->getSender()) - ->setCreator($message->getSender()) - ; - $message->addAttachment($attachment); + $messageId = $responseMessage->toArray()['id']; - $em->persist($attachment); - $messageAttachmentRepo->addFile($attachment, $file); - $em->flush(); + $file = $this->getUploadedFile(); - $em->clear(); + $responseAttachment = $client->request( + 'POST', + '/api/message_attachments', + [ + 'headers' => [ + 'Content-Type' => 'multipart/form-data', + ], + 'extra' => [ + 'files' => [ + 'file' => $file, + ], + 'parameters' => [ + 'messageId' => $messageId, + ], + ], + ] + ); - $this->assertSame(1, $messageAttachmentRepo->count([])); + $this->assertResponseIsSuccessful(); + $this->assertResponseHeaderSame('content-type', 'application/ld+json; charset=utf-8'); + $this->assertJsonContains( + [ + '@context' => '/api/contexts/MessageAttachment', + '@type' => 'http://schema.org/MediaObject', + ] + ); } public function testDeleteMessage(): void