Skip to content

dialogflow: use unique names for all resources for tests to avoid col… #2696

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

Merged
merged 12 commits into from
Jan 17, 2020
Merged
5 changes: 3 additions & 2 deletions dialogflow/cloud-client/context_management_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,15 @@

from __future__ import absolute_import

import datetime
import os

import context_management
import detect_intent_texts

PROJECT_ID = os.getenv('GCLOUD_PROJECT')
SESSION_ID = 'fake_session_for_testing'
CONTEXT_ID = 'fake_context_for_testing'
SESSION_ID = 'test_session_' + datetime.datetime.now().strftime("%Y%m%d%H%M%S")
CONTEXT_ID = 'test_context_' + datetime.datetime.now().strftime("%Y%m%d%H%M%S")


def test_create_context(capsys):
Expand Down
57 changes: 57 additions & 0 deletions dialogflow/cloud-client/create_document_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# Copyright 2020 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

from __future__ import absolute_import

import datetime
import os

import dialogflow_v2beta1 as dialogflow
import pytest

import document_management

PROJECT_ID = os.getenv('GCLOUD_PROJECT')
KNOWLEDGE_BASE_NAME = 'knowledge_' \
+ datetime.datetime.now().strftime("%Y%m%d%H%M%S")
DOCUMENT_DISPLAY_NAME = 'test_document_' \
+ datetime.datetime.now().strftime("%Y%m%d%H%M%S")
pytest.KNOWLEDGE_BASE_ID = None


@pytest.fixture(scope="function", autouse=True)
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@gguuss, while I wait for the quota increase.

How do you feel about these types of tests?

I was gonna modify the rest and separate them into individual files in different PRs, but the current Knowledge and Document tests were checking that only 1 thing existing, so I at least had to update those for the 4 python versions.

Copy link
Contributor

@gguuss gguuss Jan 14, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm fine for checking that all the response parameters are there but adding more detailed checks, particularly in ML APIs, can make the checks more brittle. If these are mocks, then it diverges a bit from the spirit of doing integration testing to make sure we see whether our p;roducts are encountering outages or the client libraries are breaking.

def setup_teardown():
# Create a knowledge base to use in document management
client = dialogflow.KnowledgeBasesClient()
project_path = client.project_path(PROJECT_ID)
knowledge_base = dialogflow.types.KnowledgeBase(
display_name=KNOWLEDGE_BASE_NAME)
response = client.create_knowledge_base(project_path, knowledge_base)
pytest.KNOWLEDGE_BASE_ID = response.name.split(
'/knowledgeBases/')[1].split('\n')[0]

yield

# Delete the created knowledge base
knowledge_base_path = client.knowledge_base_path(
PROJECT_ID, pytest.KNOWLEDGE_BASE_ID)
client.delete_knowledge_base(knowledge_base_path, force=True)


def test_create_document(capsys):
document_management.create_document(
PROJECT_ID, pytest.KNOWLEDGE_BASE_ID, DOCUMENT_DISPLAY_NAME,
'text/html', 'FAQ', 'https://cloud.google.com/storage/docs/faq')
out, _ = capsys.readouterr()
assert DOCUMENT_DISPLAY_NAME in out
49 changes: 49 additions & 0 deletions dialogflow/cloud-client/create_knowledge_base_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# Copyright 2020 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

from __future__ import absolute_import

import datetime
import os
import pytest

import dialogflow_v2beta1 as dialogflow

import knowledge_base_management

PROJECT_ID = os.getenv('GCLOUD_PROJECT')
KNOWLEDGE_BASE_NAME = 'knowledge_' \
+ datetime.datetime.now().strftime("%Y%m%d%H%M%S")
pytest.KNOWLEDGE_BASE_ID = None


@pytest.fixture(scope="function", autouse=True)
def teardown():
yield

# Delete the created knowledge base
client = dialogflow.KnowledgeBasesClient()
assert pytest.KNOWLEDGE_BASE_ID is not None
knowledge_base_path = client.knowledge_base_path(
PROJECT_ID, pytest.KNOWLEDGE_BASE_ID)
client.delete_knowledge_base(knowledge_base_path)


def test_create_knowledge_base(capsys):
knowledge_base_management.create_knowledge_base(PROJECT_ID,
KNOWLEDGE_BASE_NAME)
out, _ = capsys.readouterr()
assert KNOWLEDGE_BASE_NAME in out

pytest.KNOWLEDGE_BASE_ID = out.split('/knowledgeBases/')[1].split('\n')[0]
69 changes: 69 additions & 0 deletions dialogflow/cloud-client/delete_document_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# Copyright 2020 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

from __future__ import absolute_import

import datetime
import os

import dialogflow_v2beta1 as dialogflow
import pytest

import document_management

PROJECT_ID = os.getenv('GCLOUD_PROJECT')
KNOWLEDGE_BASE_NAME = 'knowledge_' \
+ datetime.datetime.now().strftime("%Y%m%d%H%M%S")
DOCUMENT_DISPLAY_NAME = 'test_document_' \
+ datetime.datetime.now().strftime("%Y%m%d%H%M%S")
pytest.KNOWLEDGE_BASE_ID = None
pytest.DOCUMENT_ID = None


@pytest.fixture(scope="function", autouse=True)
def setup_teardown():
# Create a knowledge base to use in document management
client = dialogflow.KnowledgeBasesClient()
project_path = client.project_path(PROJECT_ID)
knowledge_base = dialogflow.types.KnowledgeBase(
display_name=KNOWLEDGE_BASE_NAME)
response = client.create_knowledge_base(project_path, knowledge_base)
pytest.KNOWLEDGE_BASE_ID = response.name.split(
'/knowledgeBases/')[1].split('\n')[0]

# Create a document to delete
knowledge_base_path = client.knowledge_base_path(
PROJECT_ID, pytest.KNOWLEDGE_BASE_ID)
document = dialogflow.types.Document(
display_name=DOCUMENT_DISPLAY_NAME, mime_type='text/html',
content_uri='https://cloud.google.com/storage/docs/faq')
document.knowledge_types.append(
dialogflow.types.Document.KnowledgeType.Value('FAQ'))
documents_client = dialogflow.DocumentsClient()
response = documents_client.create_document(knowledge_base_path, document)
document = response.result(timeout=90)
pytest.DOCUMENT_ID = document.name.split('/documents/')[1].split('\n')[0]

yield

# Delete the created knowledge base
client.delete_knowledge_base(knowledge_base_path, force=True)


def test_delete_document(capsys):
document_management.delete_document(
PROJECT_ID, pytest.KNOWLEDGE_BASE_ID, pytest.DOCUMENT_ID)
document_management.list_documents(PROJECT_ID, pytest.KNOWLEDGE_BASE_ID)
out, _ = capsys.readouterr()
assert DOCUMENT_DISPLAY_NAME not in out
48 changes: 48 additions & 0 deletions dialogflow/cloud-client/delete_knowledge_base_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# Copyright 2020 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

from __future__ import absolute_import

import datetime
import os

import dialogflow_v2beta1 as dialogflow
import pytest

import knowledge_base_management

PROJECT_ID = os.getenv('GCLOUD_PROJECT')
KNOWLEDGE_BASE_NAME = 'knowledge_' \
+ datetime.datetime.now().strftime("%Y%m%d%H%M%S")
pytest.KNOWLEDGE_BASE_ID = None


@pytest.fixture(scope="function", autouse=True)
def setup():
# Create a knowledge base to delete
client = dialogflow.KnowledgeBasesClient()
project_path = client.project_path(PROJECT_ID)
knowledge_base = dialogflow.types.KnowledgeBase(
display_name=KNOWLEDGE_BASE_NAME)
response = client.create_knowledge_base(project_path, knowledge_base)
pytest.KNOWLEDGE_BASE_ID = response.name.split(
'/knowledgeBases/')[1].split('\n')[0]


def test_delete_knowledge_base(capsys):
knowledge_base_management.delete_knowledge_base(
PROJECT_ID, pytest.KNOWLEDGE_BASE_ID)
knowledge_base_management.list_knowledge_bases(PROJECT_ID)
out, _ = capsys.readouterr()
assert KNOWLEDGE_BASE_NAME not in out
3 changes: 2 additions & 1 deletion dialogflow/cloud-client/detect_intent_audio_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,14 @@

from __future__ import absolute_import

import datetime
import os

from detect_intent_audio import detect_intent_audio

DIRNAME = os.path.realpath(os.path.dirname(__file__))
PROJECT_ID = os.getenv('GCLOUD_PROJECT')
SESSION_ID = 'fake_session_for_testing'
SESSION_ID = 'test_' + datetime.datetime.now().strftime("%Y%m%d%H%M%S")
AUDIOS = [
'{0}/resources/book_a_room.wav'.format(DIRNAME),
'{0}/resources/mountain_view.wav'.format(DIRNAME),
Expand Down
33 changes: 33 additions & 0 deletions dialogflow/cloud-client/detect_intent_knowledge_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# Copyright 2020 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

from __future__ import absolute_import

import datetime
import os

import detect_intent_knowledge

PROJECT_ID = os.getenv('GCLOUD_PROJECT')
SESSION_ID = 'session_' + datetime.datetime.now().strftime("%Y%m%d%H%M%S")
KNOWLEDGE_BASE_ID = 'MjEwMjE4MDQ3MDQwMDc0NTQ3Mg'
TEXTS = ['Where is my data stored?']


def test_detect_intent_knowledge(capsys):
detect_intent_knowledge.detect_intent_knowledge(
PROJECT_ID, SESSION_ID, 'en-us', KNOWLEDGE_BASE_ID, TEXTS)

out, _ = capsys.readouterr()
assert 'Knowledge results' in out
3 changes: 2 additions & 1 deletion dialogflow/cloud-client/detect_intent_stream_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,13 @@

from __future__ import absolute_import

import datetime
import os

from detect_intent_stream import detect_intent_stream

PROJECT_ID = os.getenv('GCLOUD_PROJECT')
SESSION_ID = 'fake_session_for_testing'
SESSION_ID = 'test_' + datetime.datetime.now().strftime("%Y%m%d%H%M%S")
AUDIO_FILE_PATH = '{0}/resources/book_a_room.wav'.format(
os.path.realpath(os.path.dirname(__file__)),
)
Expand Down
3 changes: 2 additions & 1 deletion dialogflow/cloud-client/detect_intent_texts_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,13 @@

from __future__ import absolute_import

import datetime
import os

from detect_intent_texts import detect_intent_texts

PROJECT_ID = os.getenv('GCLOUD_PROJECT')
SESSION_ID = 'fake_session_for_testing'
SESSION_ID = 'test_' + datetime.datetime.now().strftime("%Y%m%d%H%M%S")
TEXTS = ["hello", "book a meeting room", "Mountain View",
"tomorrow", "10 AM", "2 hours", "10 people", "A", "yes"]

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,15 @@

from __future__ import absolute_import

import datetime
import os

from detect_intent_with_model_selection import \
detect_intent_with_model_selection

DIRNAME = os.path.realpath(os.path.dirname(__file__))
PROJECT_ID = os.getenv('GCLOUD_PROJECT')
SESSION_ID = 'fake_session_for_testing'
SESSION_ID = 'test_' + datetime.datetime.now().strftime("%Y%m%d%H%M%S")
AUDIOS = [
'{0}/resources/book_a_room.wav'.format(DIRNAME),
'{0}/resources/mountain_view.wav'.format(DIRNAME),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,14 @@

from __future__ import absolute_import

import datetime
import os

from detect_intent_with_sentiment_analysis import \
detect_intent_with_sentiment_analysis

PROJECT_ID = os.getenv('GCLOUD_PROJECT')
SESSION_ID = 'fake_session_for_testing'
SESSION_ID = 'test_' + datetime.datetime.now().strftime("%Y%m%d%H%M%S")
TEXTS = ["hello", "book a meeting room", "Mountain View",
"tomorrow", "10 AM", "2 hours", "10 people", "A", "yes"]

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,14 @@

from __future__ import absolute_import

import datetime
import os

from detect_intent_with_texttospeech_response import \
detect_intent_with_texttospeech_response

PROJECT_ID = os.getenv('GCLOUD_PROJECT')
SESSION_ID = 'fake_session_for_testing'
SESSION_ID = 'test_' + datetime.datetime.now().strftime("%Y%m%d%H%M%S")
TEXTS = ["hello"]


Expand Down
4 changes: 3 additions & 1 deletion dialogflow/cloud-client/entity_management_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,15 @@

from __future__ import absolute_import

import datetime
import os

import entity_management
import entity_type_management

PROJECT_ID = os.getenv('GCLOUD_PROJECT')
ENTITY_TYPE_DISPLAY_NAME = 'fake_entity_type_for_testing'
ENTITY_TYPE_DISPLAY_NAME = 'test_' \
+ datetime.datetime.now().strftime("%Y%m%d%H%M%S")
ENTITY_VALUE_1 = 'fake_entity_for_testing_1'
ENTITY_VALUE_2 = 'fake_entity_for_testing_2'
SYNONYMS = ['fake_synonym_for_testing_1', 'fake_synonym_for_testing_2']
Expand Down
Loading