def test_build_output_text_could_not_be_determined(self):

        status_data = {
            "open": [],
            "closed": []
        }

        alexa = cape_fear_sorba_alexa.CapeFearSorbaAlexa(self.lambda_event)
        expected_output_text = "I'm sorry, trail statuses could not be determined."

        output_text = alexa._build_output_text(status_data)
        self.assertEqual(expected_output_text, output_text)
    def test_build_output_text_all_trails_open(self):

        status_data = {
            "open": [
                "Blue Clay Bike Park",
                "Browns Creek",
                "Brunswick Nature Park",
                "Horry County Bike Park"
            ],
            "closed": []
        }

        alexa = cape_fear_sorba_alexa.CapeFearSorbaAlexa(self.lambda_event)
        output_text = alexa._build_output_text(status_data)

        expected_output_text = "Good news! All trails are open."
        self.assertEqual(expected_output_text, output_text)
    def test_build_output_text_all_trails_closed(self):

        status_data = {
            "open": [],
            "closed": [
                "Blue Clay Bike Park",
                "Browns Creek",
                "Brunswick Nature Park",
                "Horry County Bike Park"
            ]
        }

        alexa = cape_fear_sorba_alexa.CapeFearSorbaAlexa(self.lambda_event)
        expected_output_text = "Unfortunately, all trails are closed."

        output_text = alexa._build_output_text(status_data)
        self.assertEqual(expected_output_text, output_text)
    def test_build_output_text_some_open_some_close(self):

        status_data = {
            "open": [
                "Brunswick Nature Park",
                "Browns Creek",
                "Horry County Bike Park"
            ],
            "closed": [
                "Blue Clay Bike Park"
            ]
        }

        alexa = cape_fear_sorba_alexa.CapeFearSorbaAlexa(self.lambda_event)
        expected_output_text = "The following trails are open: %s." % ", ".join(status_data["open"])
        expected_output_text += " The following trails are closed: %s." % ", ".join(status_data["closed"])

        output_text = alexa._build_output_text(status_data)
        self.assertEqual(expected_output_text, output_text)
    def test_build_response(self):

        test_output = "Good news! All trails are open."

        alexa = cape_fear_sorba_alexa.CapeFearSorbaAlexa(self.lambda_event)
        response = alexa._build_response(output=test_output)

        expected_response = {
            "version": "1.0",
            "response": {
                "outputSpeech": {
                    "type": "PlainText",
                    "text": test_output
                },
                "card": {
                    "type": "Simple",
                    "title": "Cape Fear Sorba Trails",
                    "content": test_output
                },
                "shouldEndSession": True
            }
        }
        self.assertDictEqual(expected_response, response)
    def test_execute(self, mock_build_response, mock_build_output_text, mock_cfsorba):

        mock_status_data = {
            "open": [
                "Blue Clay Bike Park",
                "Browns Creek",
                "Brunswick Nature Park",
                "Horry County Bike Park"
            ],
            "closed": []
        }

        mock_cfsorba.get_document_html.return_value = "<html></html>"
        mock_cfsorba.parse_html.return_value = mock_status_data
        mock_build_output_text.return_value = "Good news! All trails are open."
        mock_build_response.return_value = {}

        alexa = cape_fear_sorba_alexa.CapeFearSorbaAlexa(self.lambda_event)
        alexa.execute()

        mock_cfsorba.get_document_html.assert_called()
        mock_cfsorba.parse_html.assert_called_with(html_doc="<html></html>")
        mock_build_output_text.assert_called_with(status_data=mock_status_data)
        mock_build_response.assert_called_with(output="Good news! All trails are open.")