Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

The "has_calls" is used in place of "assert_has_calls" in a few places #20453

Closed
16 of 21 tasks
potiuk opened this issue Dec 21, 2021 · 17 comments · Fixed by #23001
Closed
16 of 21 tasks

The "has_calls" is used in place of "assert_has_calls" in a few places #20453

potiuk opened this issue Dec 21, 2021 · 17 comments · Fixed by #23001
Assignees
Labels
good first issue kind:meta High-level information important to the community

Comments

@potiuk
Copy link
Member

potiuk commented Dec 21, 2021

Body

As explained in #20428 (comment) we seem to have number (not big) of tests that use "has_calls" rather than "assert_has_calls".

😱 😱 😱 😱 😱 😱 😱 😱 😱

What "has_calls" does is acually calling "has_calls" method on the mock :) . Which make them no-assertion tests:

😱 😱 😱 😱 😱 😱 😱 😱 😱

The list of those tests:

  • ./tests/providers/google/common/hooks/test_base_google.py: mock_check_output.has_calls(
  • ./tests/providers/google/common/hooks/test_base_google.py: mock_check_output.has_calls(
  • ./tests/providers/google/cloud/transfers/test_sheets_to_gcs.py: mock_sheet_hook.return_value.get_values.has_calls(calls)
  • ./tests/providers/google/cloud/transfers/test_sheets_to_gcs.py: mock_upload_data.has_calls(calls)
  • ./tests/providers/google/cloud/hooks/test_bigquery.py: mock_poll_job_complete.has_calls(mock.call(running_job_id), mock.call(running_job_id))
  • ./tests/providers/google/cloud/hooks/test_bigquery.py: mock_schema.has_calls([mock.call(x, "") for x in ["field_1", "field_2"]])
  • ./tests/providers/google/cloud/hooks/test_bigquery.py: assert mock_insert.has_calls(
  • ./tests/providers/google/cloud/hooks/test_pubsub.py: publish_method.has_calls(calls)
  • ./tests/providers/google/cloud/hooks/test_cloud_memorystore.py: mock_get_conn.return_value.get_instance.has_calls(
  • ./tests/providers/google/cloud/hooks/test_cloud_memorystore.py: mock_get_conn.return_value.get_instance.has_calls(
  • ./tests/providers/google/cloud/hooks/test_cloud_memorystore.py: mock_get_conn.return_value.get_instance.has_calls(
  • ./tests/providers/google/cloud/hooks/test_dataproc.py: mock_get_job.has_calls(calls)
  • ./tests/providers/google/cloud/hooks/test_dataproc.py: mock_get_job.has_calls(calls)
  • ./tests/providers/google/suite/operators/test_sheets.py: mock_xcom.has_calls(calls)
  • ./tests/providers/http/operators/test_http.py: mock_info.has_calls(calls)
  • ./tests/providers/airbyte/hooks/test_airbyte.py: assert mock_get_job.has_calls(calls)
  • ./tests/providers/airbyte/hooks/test_airbyte.py: assert mock_get_job.has_calls(calls)
  • ./tests/providers/airbyte/hooks/test_airbyte.py: assert mock_get_job.has_calls(calls)
  • ./tests/providers/airbyte/hooks/test_airbyte.py: assert mock_get_job.has_calls(calls)
  • ./tests/providers/airbyte/hooks/test_airbyte.py: assert mock_get_job.has_calls(calls)

We should fix those tests and likelly add pre-commit to ban this.

Thanks to @jobegrabber for noticing it!

Committer

  • I acknowledge that I am a maintainer/committer of the Apache Airflow project.
@potiuk potiuk added kind:meta High-level information important to the community good first issue labels Dec 21, 2021
@potiuk potiuk self-assigned this Dec 21, 2021
@harishkrao
Copy link
Contributor

Can I take this? @potiuk

@potiuk
Copy link
Member Author

potiuk commented Dec 22, 2021

Feel free!

@harishkrao
Copy link
Contributor

@potiuk just created a PR, can you please review?

@harishkrao
Copy link
Contributor

harishkrao commented Jan 10, 2022

@mik-laj / @potiuk - I am trying to run pytest on google bigquery and I am running into an exception defined here. I believe I need some kind of basic GCP/bigquery connection setup, but I am unable to find documentation about it. Trying to debug on my side but since you have extensive knowledge of the code base, I wanted to check with you to see if I am missing some basic config before running the tests.

Update: I tried creating a connection on the Airflow UI and set environment variables locally before running pytest, but to no avail so far.

@potiuk
Copy link
Member Author

potiuk commented Jan 10, 2022

Have you tried to run breeze to run the tests? https://github.com/apache/airflow/blob/main/BREEZE.rst

Airflow has docker-compose based development environment that is the mirror of what is used in CI. Essentially it should be as easy as:

./breeze

This should drop you (after a while of getting images and starting docker compose) into ./breeze shell (which is bash inside docler-compose airlfow image). Then immediately you should be able to run (you can auto-complete the tests with TAB):

pytest test/providers/google/...

and it should run the tests. The first time it will initialize the db and create all the necessary connections, Also while you are in the breeze shell you can run airflow db reset and it should reset the db, while airflow db init will fill the db with default connections.

By default it will use sqlite database, but you can also do (--db-reset is optional - the first ime you run it, the database should be "fresh", --db-reset is needed if you need to reset the DB from scratch):

./breeze --backend postgres --db-reset

or

./breeze --backend mysql --db-reset

or even:

./breeze --backend postgres --python 3.9 --db-reset

If you need to run tests with a different python version.

I hope it will be helpful

@harishkrao
Copy link
Contributor

@potiuk Thank you for taking the time to respond. I tried some of the steps you mentioned above before posting here. I will give a fresh try. I had a suspicion that it might have something to do with my setup. Really appreciate spending time to reply!

@harishkrao
Copy link
Contributor

@potiuk That worked, thank you very much!

@harishkrao
Copy link
Contributor

I am working on this issue and wanted to post this message to let you all know of the progress.

This issue touches multiple providers and multiple test files within each provider. I am currently working on each of the has_calls listed above and then thinking of the best possible way to convert it to an assert-able test.

I will keep working on it and will submit a PR once I have covered all the tests listed above.

@potiuk
Copy link
Member Author

potiuk commented Feb 27, 2022

I will keep working on it and will submit a PR once I have covered all the tests listed above.

Or simply provide a series of PRs handling smaller subset of the has_calls - it might be more efficient

@harishkrao
Copy link
Contributor

I will keep working on it and will submit a PR once I have covered all the tests listed above.

Or simply provide a series of PRs handling smaller subset of the has_calls - it might be more efficient

Good idea, thank you @potiuk! I will do that.

@harishkrao
Copy link
Contributor

Of the open issues, only the airbyte provider issues remain to be fixed. I am working on them and will submit a separate PR soon.

./tests/providers/airbyte/hooks/test_airbyte.py: assert mock_get_job.has_calls(calls)
 ./tests/providers/airbyte/hooks/test_airbyte.py: assert mock_get_job.has_calls(calls)
 ./tests/providers/airbyte/hooks/test_airbyte.py: assert mock_get_job.has_calls(calls)
 ./tests/providers/airbyte/hooks/test_airbyte.py: assert mock_get_job.has_calls(calls)
 ./tests/providers/airbyte/hooks/test_airbyte.py: assert mock_get_job.has_calls(calls)

@potiuk
Copy link
Member Author

potiuk commented Mar 25, 2022

Cool ! Fantastic that you are following this one up!

@tirkarthi
Copy link
Contributor

airbyte tests are fixed in #22951 . There are still below instances on main. On fixing the assert calls it seems the tests are already broken.

rg '\.has_calls'                         
tests/providers/google/cloud/transfers/test_calendar_to_gcs.py
126:        mock_calendar_hook.return_value.get_values.has_calls(call)
129:        mock_upload_data.has_calls(call)

tests/providers/google/cloud/hooks/test_looker.py
65:        mock_pdt_build_status.has_calls(calls)

tests/providers/google/cloud/hooks/test_cloud_memorystore.py
112:        mock_get_conn.return_value.get_instance.has_calls(
266:        mock_get_conn.return_value.get_instance.has_calls(
503:        mock_get_conn.return_value.get_instance.has_calls(
 pytest --tb=short tests/providers/google/cloud/hooks/test_cloud_memorystore.py tests/providers/google/cloud/hooks/test_looker.py tests/providers/google/cloud/transfers/test_calendar_to_gcs.py
================================ test session starts =================================
platform linux -- Python 3.7.13, pytest-6.2.5, py-1.11.0, pluggy-1.0.0 -- /usr/local/bin/python
cachedir: .pytest_cache
rootdir: /opt/airflow, configfile: pytest.ini
plugins: flaky-3.7.0, forked-1.4.0, cov-3.0.0, anyio-3.5.0, requests-mock-1.9.3, instafail-0.4.2, timeouts-1.2.1, rerunfailures-9.1.1, xdist-2.5.0, httpx-0.20.0, asyncio-0.18.3
asyncio: mode=strict
setup timeout: 0.0s, execution timeout: 0.0s, teardown timeout: 0.0s
collected 29 items                                                                   

tests/providers/google/cloud/hooks/test_cloud_memorystore.py::TestCloudMemorystoreWithDefaultProjectIdHook::test_create_instance_when_exists PASSED [  3%]
tests/providers/google/cloud/hooks/test_cloud_memorystore.py::TestCloudMemorystoreWithDefaultProjectIdHook::test_create_instance_when_not_exists FAILED [  6%]
tests/providers/google/cloud/hooks/test_cloud_memorystore.py::TestCloudMemorystoreWithDefaultProjectIdHook::test_delete_instance PASSED [ 10%]
tests/providers/google/cloud/hooks/test_cloud_memorystore.py::TestCloudMemorystoreWithDefaultProjectIdHook::test_get_instance PASSED [ 13%]
tests/providers/google/cloud/hooks/test_cloud_memorystore.py::TestCloudMemorystoreWithDefaultProjectIdHook::test_list_instances PASSED [ 17%]
tests/providers/google/cloud/hooks/test_cloud_memorystore.py::TestCloudMemorystoreWithDefaultProjectIdHook::test_update_instance PASSED [ 20%]
tests/providers/google/cloud/hooks/test_cloud_memorystore.py::TestCloudMemorystoreWithoutDefaultProjectIdHook::test_create_instance_when_exists PASSED [ 24%]
tests/providers/google/cloud/hooks/test_cloud_memorystore.py::TestCloudMemorystoreWithoutDefaultProjectIdHook::test_create_instance_when_not_exists FAILED [ 27%]
tests/providers/google/cloud/hooks/test_cloud_memorystore.py::TestCloudMemorystoreWithoutDefaultProjectIdHook::test_create_instance_without_project_id PASSED [ 31%]
tests/providers/google/cloud/hooks/test_cloud_memorystore.py::TestCloudMemorystoreWithoutDefaultProjectIdHook::test_delete_instance PASSED [ 34%]
tests/providers/google/cloud/hooks/test_cloud_memorystore.py::TestCloudMemorystoreWithoutDefaultProjectIdHook::test_delete_instance_without_project_id PASSED [ 37%]
tests/providers/google/cloud/hooks/test_cloud_memorystore.py::TestCloudMemorystoreWithoutDefaultProjectIdHook::test_get_instance PASSED [ 41%]
tests/providers/google/cloud/hooks/test_cloud_memorystore.py::TestCloudMemorystoreWithoutDefaultProjectIdHook::test_get_instance_without_project_id PASSED [ 44%]
tests/providers/google/cloud/hooks/test_cloud_memorystore.py::TestCloudMemorystoreWithoutDefaultProjectIdHook::test_list_instances PASSED [ 48%]
tests/providers/google/cloud/hooks/test_cloud_memorystore.py::TestCloudMemorystoreWithoutDefaultProjectIdHook::test_list_instances_without_project_id PASSED [ 51%]
tests/providers/google/cloud/hooks/test_cloud_memorystore.py::TestCloudMemorystoreWithoutDefaultProjectIdHook::test_update_instance PASSED [ 55%]
tests/providers/google/cloud/hooks/test_cloud_memorystore.py::TestCloudMemorystoreWithoutDefaultProjectIdHook::test_update_instance_without_project_id PASSED [ 58%]
tests/providers/google/cloud/hooks/test_cloud_memorystore.py::TestCloudMemorystoreMemcachedWithDefaultProjectIdHook::test_create_instance_when_exists PASSED [ 62%]
tests/providers/google/cloud/hooks/test_cloud_memorystore.py::TestCloudMemorystoreMemcachedWithDefaultProjectIdHook::test_create_instance_when_not_exists FAILED [ 65%]
tests/providers/google/cloud/hooks/test_cloud_memorystore.py::TestCloudMemorystoreMemcachedWithDefaultProjectIdHook::test_delete_instance PASSED [ 68%]
tests/providers/google/cloud/hooks/test_cloud_memorystore.py::TestCloudMemorystoreMemcachedWithDefaultProjectIdHook::test_get_instance PASSED [ 72%]
tests/providers/google/cloud/hooks/test_cloud_memorystore.py::TestCloudMemorystoreMemcachedWithDefaultProjectIdHook::test_list_instances PASSED [ 75%]
tests/providers/google/cloud/hooks/test_cloud_memorystore.py::TestCloudMemorystoreMemcachedWithDefaultProjectIdHook::test_update_instance PASSED [ 79%]
tests/providers/google/cloud/hooks/test_looker.py::TestLookerHook::test_check_pdt_build PASSED [ 82%]
tests/providers/google/cloud/hooks/test_looker.py::TestLookerHook::test_start_pdt_build PASSED [ 86%]
tests/providers/google/cloud/hooks/test_looker.py::TestLookerHook::test_stop_pdt_build PASSED [ 89%]
tests/providers/google/cloud/hooks/test_looker.py::TestLookerHook::test_wait_for_job PASSED [ 93%]
tests/providers/google/cloud/transfers/test_calendar_to_gcs.py::TestGoogleCalendarToGCSOperator::test_upload_data PASSED [ 96%]
tests/providers/google/cloud/transfers/test_calendar_to_gcs.py::TestGoogleCalendarToGCSOperator::test_execute FAILED [100%]

====================================== FAILURES ======================================
_ TestCloudMemorystoreWithDefaultProjectIdHook.test_create_instance_when_not_exists __
tests/providers/google/cloud/hooks/test_cloud_memorystore.py:115: in test_create_instance_when_not_exists
    mock.call(name=TEST_NAME, retry=TEST_RETRY, timeout=TEST_TIMEOUT, metadata=TEST_METADATA),
/usr/local/lib/python3.7/unittest/mock.py:917: in assert_has_calls
    ) from cause
E   AssertionError: Calls not found.
E   Expected: [call(metadata=[('KEY', 'VALUE')], name='projects/test-project-id/locations/test-location/instances/test-instance-id', retry=<_MethodDefault._DEFAULT_VALUE: <object object at 0x7f79ee42f360>>, timeout=10.0),
E    call(metadata=[('KEY', 'VALUE')], name='projects/test-project-id/locations/test-location/instances/test-instance-id', retry=<_MethodDefault._DEFAULT_VALUE: <object object at 0x7f79ee42f360>>, timeout=10.0)]
E   Actual: [call(metadata=[('KEY', 'VALUE')], request={'name': 'projects/example-project/locations/test-location/instances/test-instance-id'}, retry=<_MethodDefault._DEFAULT_VALUE: <object object at 0x7f79ee42f360>>, timeout=10.0),
E    call(metadata=[('KEY', 'VALUE')], request={'name': 'projects/example-project/locations/test-location/instances/test-instance-id'}, retry=<_MethodDefault._DEFAULT_VALUE: <object object at 0x7f79ee42f360>>, timeout=10.0)]
-------------------------------- Captured stdout call --------------------------------
[2022-04-13 12:11:00,820] {cloud_memorystore.py:155} INFO - Fetching instance: projects/example-project/locations/test-location/instances/test-instance-id
[2022-04-13 12:11:00,820] {cloud_memorystore.py:162} INFO - Instance not exists.
[2022-04-13 12:11:00,820] {cloud_memorystore.py:173} INFO - Instance created.
--------------------------------- Captured log call ----------------------------------
INFO     airflow.providers.google.cloud.hooks.cloud_memorystore.CloudMemorystoreHook:cloud_memorystore.py:155 Fetching instance: projects/example-project/locations/test-location/instances/test-instance-id
INFO     airflow.providers.google.cloud.hooks.cloud_memorystore.CloudMemorystoreHook:cloud_memorystore.py:162 Instance not exists.
INFO     airflow.providers.google.cloud.hooks.cloud_memorystore.CloudMemorystoreHook:cloud_memorystore.py:173 Instance created.
_ TestCloudMemorystoreWithoutDefaultProjectIdHook.test_create_instance_when_not_exists _
tests/providers/google/cloud/hooks/test_cloud_memorystore.py:278: in test_create_instance_when_not_exists
    metadata=TEST_METADATA,
/usr/local/lib/python3.7/unittest/mock.py:917: in assert_has_calls
    ) from cause
E   AssertionError: Calls not found.
E   Expected: [call(metadata=[('KEY', 'VALUE')], name='projects/test-project-id/locations/test-location/instances/test-instance-id', retry=<_MethodDefault._DEFAULT_VALUE: <object object at 0x7f79ee42f360>>, timeout=10.0),
E    call(metadata=[('KEY', 'VALUE')], name='projects/test-project-id/locations/test-location/instances/test-instance-id', retry=<_MethodDefault._DEFAULT_VALUE: <object object at 0x7f79ee42f360>>, timeout=10.0)]
E   Actual: [call(metadata=[('KEY', 'VALUE')], request={'name': 'projects/test-project-id/locations/test-location/instances/test-instance-id'}, retry=<_MethodDefault._DEFAULT_VALUE: <object object at 0x7f79ee42f360>>, timeout=10.0),
E    call(metadata=[('KEY', 'VALUE')], request={'name': 'projects/test-project-id/locations/test-location/instances/test-instance-id'}, retry=<_MethodDefault._DEFAULT_VALUE: <object object at 0x7f79ee42f360>>, timeout=10.0)]
-------------------------------- Captured stdout call --------------------------------
[2022-04-13 12:11:00,965] {cloud_memorystore.py:155} INFO - Fetching instance: projects/test-project-id/locations/test-location/instances/test-instance-id
[2022-04-13 12:11:00,966] {cloud_memorystore.py:162} INFO - Instance not exists.
[2022-04-13 12:11:00,966] {cloud_memorystore.py:173} INFO - Instance created.
--------------------------------- Captured log call ----------------------------------
INFO     airflow.providers.google.cloud.hooks.cloud_memorystore.CloudMemorystoreHook:cloud_memorystore.py:155 Fetching instance: projects/test-project-id/locations/test-location/instances/test-instance-id
INFO     airflow.providers.google.cloud.hooks.cloud_memorystore.CloudMemorystoreHook:cloud_memorystore.py:162 Instance not exists.
INFO     airflow.providers.google.cloud.hooks.cloud_memorystore.CloudMemorystoreHook:cloud_memorystore.py:173 Instance created.
_ TestCloudMemorystoreMemcachedWithDefaultProjectIdHook.test_create_instance_when_not_exists _
tests/providers/google/cloud/hooks/test_cloud_memorystore.py:506: in test_create_instance_when_not_exists
    mock.call(name=TEST_NAME, retry=TEST_RETRY, timeout=TEST_TIMEOUT, metadata=TEST_METADATA),
/usr/local/lib/python3.7/unittest/mock.py:917: in assert_has_calls
    ) from cause
E   AssertionError: Calls not found.
E   Expected: [call(metadata=[('KEY', 'VALUE')], name='projects/test-project-id/locations/test-location/instances/test-instance-id', retry=<_MethodDefault._DEFAULT_VALUE: <object object at 0x7f79ee42f360>>, timeout=10.0),
E    call(metadata=[('KEY', 'VALUE')], name='projects/test-project-id/locations/test-location/instances/test-instance-id', retry=<_MethodDefault._DEFAULT_VALUE: <object object at 0x7f79ee42f360>>, timeout=10.0)]
E   Actual: [call(metadata=[('KEY', 'VALUE')], name='projects/example-project/locations/test-location/instances/test-instance-id', retry=<_MethodDefault._DEFAULT_VALUE: <object object at 0x7f79ee42f360>>, timeout=10.0),
E    call(metadata=[('KEY', 'VALUE')], name='projects/example-project/locations/test-location/instances/test-instance-id', retry=<_MethodDefault._DEFAULT_VALUE: <object object at 0x7f79ee42f360>>, timeout=10.0)]
-------------------------------- Captured stdout call --------------------------------
[2022-04-13 12:11:01,047] {cloud_memorystore.py:641} INFO - Instance not exists.
[2022-04-13 12:11:01,047] {cloud_memorystore.py:659} INFO - Instance created.
--------------------------------- Captured log call ----------------------------------
INFO     airflow.providers.google.cloud.hooks.cloud_memorystore.CloudMemorystoreMemcachedHook:cloud_memorystore.py:641 Instance not exists.
INFO     airflow.providers.google.cloud.hooks.cloud_memorystore.CloudMemorystoreMemcachedHook:cloud_memorystore.py:659 Instance created.
____________________ TestGoogleCalendarToGCSOperator.test_execute ____________________
tests/providers/google/cloud/transfers/test_calendar_to_gcs.py:126: in test_execute
    mock_calendar_hook.return_value.get_values.assert_has_calls(call)
/usr/local/lib/python3.7/unittest/mock.py:917: in assert_has_calls
    ) from cause
E   AssertionError: Calls not found.
E   Expected: ['',
E    (),
E    {'calendar_id': '1234567890',
E     'iCalUID': None,
E     'maxAttendees': None,
E     'maxResults': None,
E     'orderBy': None,
E     'pageToken': None,
E     'privateExtendedProperty': None,
E     'q': None,
E     'sharedExtendedProperty': None,
E     'showDeleted': False,
E     'showHiddenInvitations': False,
E     'singleEvents': False,
E     'syncToken': None,
E     'timeMax': None,
E     'timeMin': None,
E     'timeZone': None,
E     'updatedMin': None}]
E   Actual: []
================================== warnings summary ==================================
airflow/configuration.py:412
  /opt/airflow/airflow/configuration.py:412: FutureWarning: The 'dag_default_view' setting in [webserver] has the old default value of 'tree'. This value has been changed to 'grid' in the running config, but please update your config before Apache Airflow 3.0.
    FutureWarning,

airflow/configuration.py:412
  /opt/airflow/airflow/configuration.py:412: FutureWarning: The 'log_filename_template' setting in [logging] has the old default value of '{{ ti.dag_id }}/{{ ti.task_id }}/{{ ts }}/{{ try_number }}.log'. This value has been changed to 'dag_id={{ ti.dag_id }}/run_id={{ ti.run_id }}/task_id={{ ti.task_id }}/{%% if ti.map_index >= 0 %%}map_index={{ ti.map_index }}/{%% endif %%}attempt={{ try_number }}.log' in the running config, but please update your config before Apache Airflow 3.0.
    FutureWarning,

-- Docs: https://docs.pytest.org/en/stable/warnings.html
============================== short test summary info ===============================
FAILED tests/providers/google/cloud/hooks/test_cloud_memorystore.py::TestCloudMemorystoreWithDefaultProjectIdHook::test_create_instance_when_not_exists
FAILED tests/providers/google/cloud/hooks/test_cloud_memorystore.py::TestCloudMemorystoreWithoutDefaultProjectIdHook::test_create_instance_when_not_exists
FAILED tests/providers/google/cloud/hooks/test_cloud_memorystore.py::TestCloudMemorystoreMemcachedWithDefaultProjectIdHook::test_create_instance_when_not_exists
FAILED tests/providers/google/cloud/transfers/test_calendar_to_gcs.py::TestGoogleCalendarToGCSOperator::test_execute
====================== 4 failed, 25 passed, 2 warnings in 1.86s ======================

@tirkarthi
Copy link
Contributor

I am checking on these tests.

@harishkrao
Copy link
Contributor

I am checking on these tests.

Hi @tirkarthi, I was planning on fixing these has_calls for airbyte. Did #22951 fix those already or should I have another look at the asserts?

@tirkarthi
Copy link
Contributor

I guess there are still tests with has_calls in main branch as below . I have fixed the assert calls and also fixed the tests that were broken. I will raise a PR tomorrow since the changes are in my local branch. It will be helpful to have your review of it since you have worked on it in the past.

rg '\.has_calls'                         
tests/providers/google/cloud/transfers/test_calendar_to_gcs.py
126:        mock_calendar_hook.return_value.get_values.has_calls(call)
129:        mock_upload_data.has_calls(call)

tests/providers/google/cloud/hooks/test_looker.py
65:        mock_pdt_build_status.has_calls(calls)

tests/providers/google/cloud/hooks/test_cloud_memorystore.py
112:        mock_get_conn.return_value.get_instance.has_calls(
266:        mock_get_conn.return_value.get_instance.has_calls(
503:        mock_get_conn.return_value.get_instance.has_calls(
``

@harishkrao
Copy link
Contributor

@potiuk, with the latest PR from @tirkarthi, there are no more pending items on this issue. We can close this issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
good first issue kind:meta High-level information important to the community
Projects
None yet
3 participants