From bf9af002819ae84912f161d3beb66ea8e5c0dc9b Mon Sep 17 00:00:00 2001 From: Zakir Hossain Date: Sun, 15 Mar 2020 21:25:18 +0600 Subject: [PATCH] Refactored TypeMessage to include both value and message type --- example/lib/dialogflow_v2.dart | 2 +- example/lib/google_assistant.dart | 2 +- lib/v2/message.dart | 110 +++++++++++++++++++++--------- test/v2/message_test.dart | 52 ++++++++++++++ test/v2/message_test_util.dart | 81 ++++++++++++++++++++++ 5 files changed, 211 insertions(+), 36 deletions(-) create mode 100644 test/v2/message_test.dart create mode 100644 test/v2/message_test_util.dart diff --git a/example/lib/dialogflow_v2.dart b/example/lib/dialogflow_v2.dart index 7247fe8..1f583d2 100644 --- a/example/lib/dialogflow_v2.dart +++ b/example/lib/dialogflow_v2.dart @@ -47,7 +47,7 @@ class _HomePageDialogflowV2 extends State { Dialogflow dialogflow =Dialogflow(authGoogle: authGoogle,language: Language.english); AIResponse response = await dialogflow.detectIntent(query); ChatMessage message = new ChatMessage( - text: response.getMessage() ?? new TypeMessage(response.getListMessage()[0]).platform, + text: response.getMessage() ?? TypeMessage.fromJson(response.getListMessage()[0]).platform, name: "Bot", type: false, ); diff --git a/example/lib/google_assistant.dart b/example/lib/google_assistant.dart index 8d15c41..0175340 100644 --- a/example/lib/google_assistant.dart +++ b/example/lib/google_assistant.dart @@ -45,7 +45,7 @@ class _GoogleAssistant extends State { } dynamic getWidgetMessage(message) { - TypeMessage ms = TypeMessage(message); + TypeMessage ms = TypeMessage.fromJson(message); if (ms.platform == "ACTIONS_ON_GOOGLE") { if (ms.type == "simpleResponses") { return SimpleMessage( diff --git a/lib/v2/message.dart b/lib/v2/message.dart index 2c0bff7..e3e539c 100644 --- a/lib/v2/message.dart +++ b/lib/v2/message.dart @@ -3,7 +3,7 @@ class ListTextDialogflow { ListTextDialogflow(Map response) { List listText = response['text']['text']; - listText.forEach((element)=> this.listText.add(element)); + listText.forEach((element) => this.listText.add(element)); } } @@ -19,12 +19,12 @@ class ImageDialogflow { class QuickReplies { String title; - List quickReplies=[]; + List quickReplies = []; QuickReplies(Map response) { this.title = response['quickReplies']['title']; List listQuickReplies = response['quickReplies']['quickReplies']; - listQuickReplies.forEach((element)=> this.quickReplies.add(element)); + listQuickReplies.forEach((element) => this.quickReplies.add(element)); } } @@ -42,7 +42,7 @@ class CardDialogflow { String title; String subtitle; String imageUri; - List buttons=[]; + List buttons = []; CardDialogflow(Map response) { this.title = response['card']['title']; @@ -50,7 +50,7 @@ class CardDialogflow { this.imageUri = response['card']['imageUri']; List listButtons = response['card']['buttons']; for (int i = 0; i < listButtons.length; i++) { - ButtonDialogflow b =new ButtonDialogflow(listButtons[i]); + ButtonDialogflow b = new ButtonDialogflow(listButtons[i]); buttons.add(b); } } @@ -61,7 +61,7 @@ class SimpleResponse { String ssml; String displayText; - SimpleResponse(Map response){ + SimpleResponse(Map response) { this.textToSpeech = response['textToSpeech']; this.ssml = response['ssml']; this.displayText = response['displayText']; @@ -69,12 +69,13 @@ class SimpleResponse { } class SimpleResponses { - List simpleResponses =[]; + List simpleResponses = []; - SimpleResponses(Map response){ - List listSimpleResponse = response['simpleResponses']['simpleResponses']; + SimpleResponses(Map response) { + List listSimpleResponse = + response['simpleResponses']['simpleResponses']; for (int i = 0; i < listSimpleResponse.length; i++) { - SimpleResponse b =new SimpleResponse(listSimpleResponse[i]); + SimpleResponse b = new SimpleResponse(listSimpleResponse[i]); simpleResponses.add(b); } } @@ -91,51 +92,92 @@ class BasicCardDialogflow { this.title = response['basicCard']['title']; this.subtitle = response['basicCard']['subtitle']; this.formattedText = response['basicCard']['formattedText']; - this.image = new ImageDialogflow(response['basicCard']['image']) ; + this.image = new ImageDialogflow(response['basicCard']['image']); this.buttons = response['basicCard']['buttons']; } } - -class ItemCarousel{ +class ItemCarousel { dynamic info; String title; String description; ImageDialogflow image; - ItemCarousel(Map item){ + ItemCarousel(Map item) { this.info = item['info']; this.title = item['title']; this.description = item['description']; - this.image =new ImageDialogflow(item['image']); + this.image = new ImageDialogflow(item['image']); } } class CarouselSelect { - List items=[]; - CarouselSelect(Map response){ + List items = []; + CarouselSelect(Map response) { List list = response['carouselSelect']['items']; - for(var i=0;i()); + }); + + test("BasicCard", () { + final message = TypeMessage.fromJson(MessageTestUtil.basicCardMessageJson); + + expect(message.type, MessageType.basicCard); + expect(message.value, isA()); + }); + + test("SimpleResponses", () { + final message = + TypeMessage.fromJson(MessageTestUtil.simpleResponsesMessageJson); + + expect(message.type, MessageType.simpleResponses); + expect(message.value, isA()); + }); + + test("CarouselSelect", () { + final message = TypeMessage.fromJson(MessageTestUtil.carouselSelectMessageJson); + + expect(message.type, MessageType.carouselSelect); + expect(message.value, isA()); + }); + + test("Text", () { + final message = TypeMessage.fromJson(MessageTestUtil.textMessageJson); + + expect(message.type, MessageType.text); + expect(message.value, isA()); + }); + + test("Map", () { + final message = TypeMessage.fromJson({ + "platform": "google", + "xyz": {}, + }); + + expect(message.type, MessageType.map); + expect(message.value, isA()); + }); +} diff --git a/test/v2/message_test_util.dart b/test/v2/message_test_util.dart new file mode 100644 index 0000000..f29136d --- /dev/null +++ b/test/v2/message_test_util.dart @@ -0,0 +1,81 @@ +class MessageTestUtil { + static const cardMessageJson = { + "platform": "google", + "card": { + "title": "title", + "subtitle": "subtitle", + "imageUri": "imageUri", + "buttons": [ + { + "text": "text", + "postback": "postback" + } + ] + } + }; + + static const basicCardMessageJson = { + "platform": "google", + "basicCard" : { + "title": "title", + "subtitle": "subtitle", + "formattedText": "formattedText", + "image": { + "imageUri": "imageUri", + "accessibilityText": "accessibilityText" + }, + "buttons": [ + { + "title": "title", + "openUriAction": { + "uri": "uri" + } + } + ] + } + }; + + static const simpleResponsesMessageJson = { + "platform": "google", + "simpleResponses" : { + "simpleResponses": [ + { + "textToSpeech": "textToSpeech", + "ssml": "ssml", + "displayText": "displayText" + } + ] + } + }; + + static const carouselSelectMessageJson = { + "platform": "google", + "carouselSelect" : { + "items": [ + { + "info": { + "key": "key", + "synonyms": [ + "keySynonyms" + ] + }, + "title": "title", + "description": "description", + "image": { + "imageUri": "imageUri", + "accessibilityText": "accessibilityText" + } + } + ], + }, + }; + + static const textMessageJson = { + "platform": "google", + "text": { + "text": [ + "Simple text message" + ] + } + }; +} \ No newline at end of file