Skip to content

Commit

Permalink
PR comments
Browse files Browse the repository at this point in the history
  • Loading branch information
sfc-gh-fcampbell committed Oct 17, 2024
1 parent aa30f16 commit 3dd3b40
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 28 deletions.
8 changes: 4 additions & 4 deletions tests/nativeapp/factories.py
Original file line number Diff line number Diff line change
Expand Up @@ -153,21 +153,21 @@ def as_json_str(self):

class PdfFactory(factory.DictFactory):
"""
Prepare PDF V1 dict and write to file.
Prepare PDF dict and write to file.
Returns:
PdfFactoryResult
Usage:
Create a pdf dict with definition_version: "1", native_app with faker-generated name and an empty artifacts list and
write to snowflake.yml in current directory:
- PdfV10Factory()
- PdfFactory()
Create snowflake.local.yml and write to file
- PdfV10Factory.with_filename("snowflake.local.yml")(native_app__name="my_local_name")
- PdfFactory.with_filename("snowflake.local.yml")(native_app__name="my_local_name")
Build and return yml but do not write to file:
- PdfV10Factory.build(
- PdfFactory.build(
native_app__name="my_app",
native_app__artifacts=["setup.sql", "README.md"],
native_app__package__role="pkg_role"
Expand Down
61 changes: 37 additions & 24 deletions tests/nativeapp/test_post_deploy_for_app.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,10 @@

import pytest
from pydantic import ValidationError
from snowflake.cli._plugins.nativeapp.entities.application import ApplicationEntityModel
from snowflake.cli._plugins.nativeapp.entities.application import (
ApplicationEntity,
ApplicationEntityModel,
)
from snowflake.cli._plugins.nativeapp.exceptions import MissingScriptError
from snowflake.cli.api.console import cli_console as cc
from snowflake.cli.api.entities.utils import execute_post_deploy_hooks
Expand Down Expand Up @@ -91,18 +94,20 @@ def test_sql_scripts(
dm = DefinitionManager()
mock_cli_ctx.return_value = dm.template_context
app_model: ApplicationEntityModel = dm.project_definition.entities["app"]
execute_post_deploy_hooks(
ApplicationEntity.execute_post_deploy_hooks(
console=cc,
project_root=dm.project_root,
post_deploy_hooks=app_model.meta.post_deploy,
deployed_object_type="application",
database_name=app_model.fqn.name,
app_name=app_model.fqn.name,
app_warehouse=app_model.meta.warehouse or "MockWarehouse",
)

assert mock_execute_query.mock_calls == [
mock.call("use database myapp"),
mock.call("use database myapp"),
]
mock_execute_query.assert_has_calls(
[
mock.call(f"use database {app_model.fqn.name}"),
mock.call(f"use database {app_model.fqn.name}"),
]
)
assert mock_execute_queries.mock_calls == [
mock.call(post_deploy_1),
mock.call(post_deploy_2),
Expand Down Expand Up @@ -133,6 +138,8 @@ def test_sql_scripts_with_no_warehouse_no_database(
app_model: ApplicationEntityModel = dm.project_definition.entities["myapp"]
mock_cli_ctx.return_value = dm.template_context

# Directly testing the function without the use_warehouse
# that ApplicationEntity.execute_post_deploy_hooks adds
execute_post_deploy_hooks(
console=cc,
project_root=dm.project_root,
Expand Down Expand Up @@ -162,8 +169,10 @@ def test_sql_scripts_with_no_warehouse_no_database(
]


@mock.patch(SQL_EXECUTOR_EXECUTE)
@mock_connection()
def test_missing_sql_script(
mock_execute_query,
mock_conn,
project_directory,
):
Expand All @@ -173,20 +182,22 @@ def test_missing_sql_script(
app_model: ApplicationEntityModel = dm.project_definition.entities["myapp"]

with pytest.raises(MissingScriptError) as err:
execute_post_deploy_hooks(
ApplicationEntity.execute_post_deploy_hooks(
console=cc,
project_root=dm.project_root,
post_deploy_hooks=app_model.meta.post_deploy,
deployed_object_type="application",
database_name=app_model.fqn.name,
app_name=app_model.fqn.name,
app_warehouse=app_model.meta.warehouse or "MockWarehouse",
)

assert err.value.message == 'Script "scripts/missing.sql" does not exist'


@mock.patch(SQL_EXECUTOR_EXECUTE)
@mock_connection()
def test_invalid_hook_type(
mock_conn,
mock_execute_query,
project_directory,
):
mock_hook = mock.Mock()
Expand All @@ -198,12 +209,12 @@ def test_invalid_hook_type(
app_model: ApplicationEntityModel = dm.project_definition.entities["myapp"]

with pytest.raises(ValueError) as err:
execute_post_deploy_hooks(
ApplicationEntity.execute_post_deploy_hooks(
console=cc,
project_root=dm.project_root,
post_deploy_hooks=[mock_hook],
deployed_object_type="application",
database_name=app_model.fqn.name,
app_name=app_model.fqn.name,
app_warehouse=app_model.meta.warehouse or "MockWarehouse",
)
assert "Unsupported application post-deploy hook type" in str(err)

Expand Down Expand Up @@ -259,18 +270,20 @@ def test_app_post_deploy_with_template(
dm = DefinitionManager()
app_model: ApplicationEntityModel = dm.project_definition.entities["myapp"]

execute_post_deploy_hooks(
ApplicationEntity.execute_post_deploy_hooks(
console=cc,
project_root=dm.project_root,
post_deploy_hooks=app_model.meta.post_deploy,
deployed_object_type="application",
database_name=app_model.fqn.name,
app_name=app_model.fqn.name,
app_warehouse=app_model.meta.warehouse or "MockWarehouse",
)

assert mock_execute_query.mock_calls == [
mock.call("use database myapp"),
mock.call("use database myapp"),
]
mock_execute_query.assert_has_calls(
[
mock.call(f"use database {app_model.fqn.name}"),
mock.call(f"use database {app_model.fqn.name}"),
]
)
assert mock_execute_queries.mock_calls == [
# Verify template variables were expanded correctly
mock.call(
Expand Down Expand Up @@ -318,12 +331,12 @@ def test_app_post_deploy_with_mixed_syntax_template(
app_model: ApplicationEntityModel = dm.project_definition.entities["myapp"]

with pytest.raises(InvalidTemplate) as err:
execute_post_deploy_hooks(
ApplicationEntity.execute_post_deploy_hooks(
console=cc,
project_root=dm.project_root,
post_deploy_hooks=app_model.meta.post_deploy,
deployed_object_type="application",
database_name=app_model.fqn.name,
app_name=app_model.fqn.name,
app_warehouse=app_model.meta.warehouse or "MockWarehouse",
)

assert (
Expand Down

0 comments on commit 3dd3b40

Please sign in to comment.