0

I am trying to mock test an endpoint that gets the time and date. I have viewed several tutorials and python docs, but I am still getting stumped by the mock test. Any help is appreciated greatly

from flask import Flask, redirect, url_for
import json
import urllib.request
import requests

app = Flask(__name__)
@app.route('/')
def welcome():
    return "Hello"

@app.route('/<zone>')
def Endpoint(zone):
    address = f"http://worldclockapi.com/api/json/{zone}/now"
    response = urllib.request.urlopen(address)

    result = json.loads(response.read())

    time = result['currentDateTime']

    return time

if __name__ == "__main__":
    app.run(debug=True)


My attempt. I think I am still calling the external element. I want to use a fake JSON string and actually mock with that.
The first test passes when I run it. But I don't think it is a true mock.

#!/usr/bin/python
import unittest
from unittest import TestCase
from unittest.mock import patch, Mock

#name of endpoint program
import question



class TestingMock(TestCase):

    @patch('question.Endpoint')
    def test_call(self, MockTime):
        current = MockTime()

        current.posts.return_value = [
            {"$id": "1", "currentDateTime": "2020-07-17T12:31-04:00", "utcOffset": "-04:00:00"}
        ]

        response = current.posts()
        self.assertIsNotNone(response)
        self.assertIsInstance(response[0], dict)

    @patch('question.Endpoint')
    def test_response(mock_get):
        mock_get.return_value.ok = True
        respond = question.Endpoint()

        assert_is_not_none(respond)

if __name__ == '__main__':
    unittest.main()
dan
  • 21
  • 2

1 Answers1

0

You are conflicting with your root URL handler. Try changing @app.route('/<zone>') to @app.route('/time/<zone>'), then navigate to that url

GAEfan
  • 11,244
  • 2
  • 17
  • 33