Files
opensearch-pyd/test_opensearchpy/test_helpers/test_index.py
T

197 lines
5.5 KiB
Python

# SPDX-License-Identifier: Apache-2.0
#
# The OpenSearch Contributors require contributions made to
# this file be licensed under the Apache-2.0 license or a
# compatible open source license.
#
# Modifications Copyright OpenSearch Contributors. See
# GitHub history for details.
#
# Licensed to Elasticsearch B.V. under one or more contributor
# license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright
# ownership. Elasticsearch B.V. licenses this file to you 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.
import string
from random import choice
from pytest import raises
from opensearchpy import Date, Document, Index, IndexTemplate, Text, analyzer
class Post(Document):
title = Text()
published_from = Date()
def test_multiple_doc_types_will_combine_mappings():
class User(Document):
username = Text()
i = Index("i")
i.document(Post)
i.document(User)
assert {
"mappings": {
"properties": {
"title": {"type": "text"},
"username": {"type": "text"},
"published_from": {"type": "date"},
}
}
} == i.to_dict()
def test_search_is_limited_to_index_name():
i = Index("my-index")
s = i.search()
assert s._index == ["my-index"]
def test_cloned_index_has_copied_settings_and_using():
client = object()
i = Index("my-index", using=client)
i.settings(number_of_shards=1)
i2 = i.clone("my-other-index")
assert "my-other-index" == i2._name
assert client is i2._using
assert i._settings == i2._settings
assert i._settings is not i2._settings
def test_cloned_index_has_analysis_attribute():
"""
Regression test for Issue #582 in which `Index.clone()` was not copying
over the `_analysis` attribute.
"""
client = object()
i = Index("my-index", using=client)
random_analyzer_name = "".join((choice(string.ascii_letters) for _ in range(100)))
random_analyzer = analyzer(
random_analyzer_name, tokenizer="standard", filter="standard"
)
i.analyzer(random_analyzer)
i2 = i.clone("my-clone-index")
assert i.to_dict()["settings"]["analysis"] == i2.to_dict()["settings"]["analysis"]
def test_settings_are_saved():
i = Index("i")
i.settings(number_of_replicas=0)
i.settings(number_of_shards=1)
assert {"settings": {"number_of_shards": 1, "number_of_replicas": 0}} == i.to_dict()
def test_registered_doc_type_included_in_to_dict():
i = Index("i", using="alias")
i.document(Post)
assert {
"mappings": {
"properties": {
"title": {"type": "text"},
"published_from": {"type": "date"},
}
}
} == i.to_dict()
def test_registered_doc_type_included_in_search():
i = Index("i", using="alias")
i.document(Post)
s = i.search()
assert s._doc_type == [Post]
def test_aliases_add_to_object():
random_alias = "".join((choice(string.ascii_letters) for _ in range(100)))
alias_dict = {random_alias: {}}
index = Index("i", using="alias")
index.aliases(**alias_dict)
assert index._aliases == alias_dict
def test_aliases_returned_from_to_dict():
random_alias = "".join((choice(string.ascii_letters) for _ in range(100)))
alias_dict = {random_alias: {}}
index = Index("i", using="alias")
index.aliases(**alias_dict)
assert index._aliases == index.to_dict()["aliases"] == alias_dict
def test_analyzers_added_to_object():
random_analyzer_name = "".join((choice(string.ascii_letters) for _ in range(100)))
random_analyzer = analyzer(
random_analyzer_name, tokenizer="standard", filter="standard"
)
index = Index("i", using="alias")
index.analyzer(random_analyzer)
assert index._analysis["analyzer"][random_analyzer_name] == {
"filter": ["standard"],
"type": "custom",
"tokenizer": "standard",
}
def test_analyzers_returned_from_to_dict():
random_analyzer_name = "".join((choice(string.ascii_letters) for _ in range(100)))
random_analyzer = analyzer(
random_analyzer_name, tokenizer="standard", filter="standard"
)
index = Index("i", using="alias")
index.analyzer(random_analyzer)
assert index.to_dict()["settings"]["analysis"]["analyzer"][
random_analyzer_name
] == {"filter": ["standard"], "type": "custom", "tokenizer": "standard"}
def test_conflicting_analyzer_raises_error():
i = Index("i")
i.analyzer("my_analyzer", tokenizer="whitespace", filter=["lowercase", "stop"])
with raises(ValueError):
i.analyzer("my_analyzer", tokenizer="keyword", filter=["lowercase", "stop"])
def test_index_template_can_have_order():
i = Index("i-*")
it = i.as_template("i", order=2)
assert {"index_patterns": ["i-*"], "order": 2} == it.to_dict()
def test_index_template_save_result(mock_client):
it = IndexTemplate("test-template", "test-*")
assert it.save(using="mock") == mock_client.indices.put_template()