1
0
mirror of synced 2025-12-30 12:04:43 -05:00
Files
airbyte/octavia-cli/unit_tests/test_telemetry.py
Cole Snodgrass 2e099acc52 update headers from 2022 -> 2023 (#22594)
* It's 2023!

* 2022 -> 2023

---------

Co-authored-by: evantahler <evan@airbyte.io>
2023-02-08 13:01:16 -08:00

125 lines
6.4 KiB
Python

#
# Copyright (c) 2023 Airbyte, Inc., all rights reserved.
#
import click
import pytest
from octavia_cli import telemetry
def test_build_user_agent():
ua = telemetry.build_user_agent("my_octavia_version")
assert ua == "octavia-cli/my_octavia_version"
class TestTelemetryClient:
@pytest.mark.parametrize("send_data", [True, False])
def test_init(self, mocker, send_data):
assert isinstance(telemetry.TelemetryClient.WRITE_KEY, str)
mocker.patch.object(telemetry.TelemetryClient, "write_key", "my_write_key")
mocker.patch.object(telemetry.analytics, "Client")
telemetry_client = telemetry.TelemetryClient(send_data)
assert telemetry_client.segment_client == telemetry.analytics.Client.return_value
telemetry.analytics.Client.assert_called_with("my_write_key", send=send_data)
@pytest.fixture
def telemetry_client(self, mocker):
mocker.patch.object(telemetry.analytics, "Client")
return telemetry.TelemetryClient(True)
@pytest.mark.parametrize("octavia_custom_write_key", ["my_custom_write_key", None])
def test_write_key(self, mocker, telemetry_client, octavia_custom_write_key):
mocker.patch.object(telemetry.os, "getenv", mocker.Mock(return_value=octavia_custom_write_key))
assert telemetry_client.write_key == telemetry.os.getenv.return_value
telemetry.os.getenv.assert_called_with("OCTAVIA_TELEMETRY_WRITE_KEY", telemetry_client.WRITE_KEY)
@pytest.mark.parametrize("extra_info_name", ["foo", None])
def test__create_command_name_multi_contexts(self, mocker, telemetry_client, extra_info_name):
grand_parent_ctx = click.Context(mocker.Mock(), None, "grand_parent_command")
parent_ctx = click.Context(mocker.Mock(), grand_parent_ctx, "parent_command")
ctx = click.Context(mocker.Mock(), parent_ctx, "child_command")
command_name = telemetry_client._create_command_name(ctx, extra_info_name=extra_info_name)
if extra_info_name:
assert command_name == f"grand_parent_command parent_command child_command {extra_info_name}"
else:
assert command_name == "grand_parent_command parent_command child_command"
@pytest.mark.parametrize("extra_info_name", ["foo", None])
def test__create_command_name_single_context(self, mocker, telemetry_client, extra_info_name):
ctx = click.Context(mocker.Mock(), None, "child_command")
command_name = telemetry_client._create_command_name(ctx, extra_info_name=extra_info_name)
if extra_info_name:
assert command_name == f"child_command {extra_info_name}"
else:
assert command_name == "child_command"
@pytest.mark.parametrize(
"workspace_id, anonymous_data_collection, airbyte_role, project_is_initialized, octavia_version, error, expected_success, expected_error_type, is_help",
[
(None, None, None, None, None, None, True, None, False),
(None, None, None, None, None, Exception(), False, "Exception", False),
(None, None, None, None, None, AttributeError(), False, "AttributeError", False),
(None, True, None, None, None, None, True, None, False),
(None, True, None, None, None, Exception(), False, "Exception", False),
(None, True, None, None, None, AttributeError(), False, "AttributeError", False),
("my_workspace_id", False, None, None, None, None, True, None, False),
("my_workspace_id", False, None, None, None, Exception(), False, "Exception", False),
("my_workspace_id", True, None, None, None, None, True, None, False),
("my_workspace_id", True, None, None, None, Exception(), False, "Exception", False),
("my_workspace_id", True, "airbyter", None, None, None, True, None, False),
("my_workspace_id", True, "non_airbyter", None, None, Exception(), False, "Exception", False),
("my_workspace_id", True, "airbyter", True, None, None, True, None, False),
("my_workspace_id", True, "non_airbyter", False, None, Exception(), False, "Exception", False),
("my_workspace_id", True, "airbyter", True, None, None, True, None, False),
("my_workspace_id", True, "non_airbyter", False, "0.1.0", Exception(), False, "Exception", False),
("my_workspace_id", True, "non_airbyter", False, "0.1.0", None, True, None, False),
("my_workspace_id", True, "non_airbyter", False, "0.1.0", None, True, None, True),
],
)
def test_send_command_telemetry(
self,
mocker,
telemetry_client,
workspace_id,
anonymous_data_collection,
airbyte_role,
project_is_initialized,
octavia_version,
error,
expected_success,
expected_error_type,
is_help,
):
extra_info_name = "foo"
mocker.patch.object(telemetry.os, "getenv", mocker.Mock(return_value=airbyte_role))
expected_user_id = workspace_id if workspace_id is not None and anonymous_data_collection is False else None
expected_anonymous_id = "anonymous" if expected_user_id is None else None
mock_ctx = mocker.Mock(
obj={
"OCTAVIA_VERSION": octavia_version,
"PROJECT_IS_INITIALIZED": project_is_initialized,
"WORKSPACE_ID": workspace_id,
"ANONYMOUS_DATA_COLLECTION": anonymous_data_collection,
}
)
expected_segment_context = {"app": {"name": "octavia-cli", "version": octavia_version}}
expected_properties = {
"success": expected_success,
"is_help": is_help,
"error_type": expected_error_type,
"project_is_initialized": project_is_initialized,
"airbyter": airbyte_role == "airbyter",
}
telemetry_client.segment_client = mocker.Mock()
telemetry_client._create_command_name = mocker.Mock(return_value="my_command")
telemetry_client.send_command_telemetry(mock_ctx, error=error, extra_info_name=extra_info_name, is_help=is_help)
telemetry_client._create_command_name.assert_called_with(mock_ctx, extra_info_name=extra_info_name)
telemetry_client.segment_client.track.assert_called_with(
user_id=expected_user_id,
anonymous_id=expected_anonymous_id,
event="my_command",
properties=expected_properties,
context=expected_segment_context,
)