Как издеваться над googleapiclient.discovery.build - PullRequest
0 голосов
/ 27 июня 2019

Я пытаюсь смоделировать результат вызова API для вычисления движка для вывода списка виртуальных машин.Но, к сожалению, не смог смоделировать точную функцию.

Я пытался использовать методы PATCH и MOCK для имитации конкретных выполненных вызовов, но безуспешно

code.py файл выглядит так

import googleapiclient.discovery
import logging

class Service:
    def __init__(self, project, event):
        self.project_id = project
        self.compute = googleapiclient.discovery.build('compute', 'v1',
                                                       cache_discovery=False)
        self.event = event
        self.zones = self._validate_event()

    def _validate_event(self):
        if "jsonPayload" not in self.event:
            zones = self.compute.zones().list(
                project=self.project_id).execute()['items']

        else:
            zones = self.compute.zones().get(project=self.project_id,
                                             zone=self.event["jsonPayload"]
                                             ["resource"]["zone"]).execute()

        logging.debug(f"Identified Zones are {zones}")
        return [zone["name"] for zone in zones]

Мой тестовый файл выглядит следующим образом

# in-built
from unittest import TestCase
from unittest.mock import patch

# custom
import code


class TestServiceModule(TestCase):
    def setUp(self):
        self.project_id = "sample-project-id"

    @patch('code.googleapiclient.discovery')
    def test__validate_event_with_empty_inputs(self, mock_discovery):
        mock_discovery.build.zones.list.execute.return_value = {"items": [
            {
                "name": "eu-west-1"
            }
        ]}

        obj = code.Service(event={}, project=self.project_id)

        print(obj.zones)


В приведенном выше тестовом примере я ожидал увидеть "eu-west-1" в качестве значения при печати obj.zones

...