Skip to content

Commit

Permalink
dialogflow: use unique names for all resources for tests to avoid col…
Browse files Browse the repository at this point in the history
…… [(#2696)](#2696)

* dialogflow: use unique names for all resources for tests to avoid collision

* lint: line length

* break up knowledge base tests and document tests from one file into individual tests

* lint

* bump library version

* ping googleapis-common-protos to avoid release breakage

* Update requirements.txt

Co-authored-by: Gus Class <[email protected]>
  • Loading branch information
2 people authored and dandhlee committed Feb 6, 2023
1 parent 22059e0 commit d0ca75e
Show file tree
Hide file tree
Showing 21 changed files with 448 additions and 120 deletions.
5 changes: 3 additions & 2 deletions dialogflow/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/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)
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/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/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/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/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/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/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/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
3 changes: 2 additions & 1 deletion dialogflow/detect_intent_with_model_selection_test.py
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
3 changes: 2 additions & 1 deletion dialogflow/detect_intent_with_sentiment_analysis_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_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
3 changes: 2 additions & 1 deletion dialogflow/detect_intent_with_texttospeech_response_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_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/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

0 comments on commit d0ca75e

Please sign in to comment.