Skip to content
This repository has been archived by the owner on Jan 28, 2020. It is now read-only.

Commit

Permalink
Fixed index mapping of terms and vocabularies
Browse files Browse the repository at this point in the history
  • Loading branch information
George Schneeloch committed Oct 23, 2015
1 parent e58eab5 commit fc541e6
Show file tree
Hide file tree
Showing 7 changed files with 208 additions and 79 deletions.
41 changes: 23 additions & 18 deletions rest/tests/test_search.py
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ def test_num_queries(self):
Make sure we're not hitting the database for the search
more than necessary.
"""
with self.assertNumQueries(8):
with self.assertNumQueries(9):
self.get_results()

def test_sortby(self):
Expand Down Expand Up @@ -289,15 +289,15 @@ def test_facets(self):
term1_results = self.get_results(
selected_facets=["{v}_exact:{t}".format(
v=vocab_key,
t=term1.slug
t=term1.id
)]
)
self.assertEqual(1, term1_results['count'])
self.assert_result_equal(term1_results['results'][0], resource1)
term2_results = self.get_results(
selected_facets=["{v}_exact:{t}".format(
v=vocab_key,
t=term2.slug
t=term2.id
)]
)
self.assertEqual(1, term2_results['count'])
Expand Down Expand Up @@ -385,7 +385,7 @@ def test_facets(self):
# Facet count
facet_counts = self.get_results(
selected_facets=["{v}_exact:{t}".format(
v=vocab_key, t=term1.slug
v=vocab_key, t=term1.id
)]
)['facet_counts']
self.assertEqual(
Expand Down Expand Up @@ -439,7 +439,7 @@ def test_facets(self):
},
'values': [{
'count': 1,
'key': term1.slug,
'key': str(term1.id),
'label': term1.label
}]
}
Expand Down Expand Up @@ -492,14 +492,14 @@ def test_selected_facets(self):

selected_facets = self.get_results(
selected_facets=["{v}_exact:{t}".format(
v=vocab_key, t=term1.slug
v=vocab_key, t=term1.id
)]
)['selected_facets']
self.assertEqual(
selected_facets,
{
'{v}'.format(v=vocab_key): {'{t}'.format(
t=term1.slug): True},
t=term1.id): True},
'course': {},
'resource_type': {},
'run': {}
Expand All @@ -510,7 +510,7 @@ def test_selected_facets(self):
# we should have no checkboxes that show up.
selected_facets = self.get_results(
selected_facets=["{v}_exact:{t}".format(
v=vocab_key, t=term1.slug
v=vocab_key, t=term1.id
), "run_exact:doesnt_exist"]
)['selected_facets']
self.assertEqual(
Expand Down Expand Up @@ -546,12 +546,17 @@ def test_empty_term_name(self):
vocab_dict['learning_resource_types'] = [
self.resource.learning_resource_type.name
]
vocab_slug = self.create_vocabulary(self.repo.slug, vocab_dict)['slug']
term_slug = self.create_term(self.repo.slug, vocab_slug, {
vocab_result = self.create_vocabulary(self.repo.slug, vocab_dict)
vocab_slug = vocab_result['slug']
vocab_id = vocab_result['id']
vocab_key = make_vocab_key(vocab_id)

term_result = self.create_term(self.repo.slug, vocab_slug, {
"label": "empty",
"weight": 4
})['slug']
vocab_key = make_vocab_key(vocab_slug)
})
term_id = term_result['id']
term_slug = term_result['slug']

# There is one resource and it is missing a term.
# Test that a missing search will get one result.
Expand All @@ -566,7 +571,7 @@ def test_empty_term_name(self):
results = self.get_results(
selected_facets=["{v}_exact:{t}".format(
v=vocab_key,
t=term_slug
t=term_id
)]
)
self.assertEqual(results['count'], 0)
Expand All @@ -592,7 +597,7 @@ def test_empty_term_name(self):
results = self.get_results(
selected_facets=["{v}_exact:{t}".format(
v=vocab_key,
t=term_slug
t=term_id
)]
)
self.assertEqual(results['count'], 1)
Expand Down Expand Up @@ -645,14 +650,14 @@ def test_name_collision(self):
self.assertEqual(
self.get_results(selected_facets=["{v}_exact:{t}".format(
v=vocab1_key,
t=term1.slug
t=term1.id
)])['count'],
0
)
self.assertEqual(
self.get_results(selected_facets=["{v}_exact:{t}".format(
v=vocab2_key,
t=term2.slug
t=term2.id
)])['count'],
1
)
Expand All @@ -663,14 +668,14 @@ def test_name_collision(self):
self.assertEqual(
self.get_results(selected_facets=["{v}_exact:{t}".format(
v=vocab1_key,
t=term1.slug
t=term1.id
)])['count'],
1
)
self.assertEqual(
self.get_results(selected_facets=["{v}_exact:{t}".format(
v=vocab2_key,
t=term2.slug
t=term2.id
)])['count'],
0
)
Expand Down
169 changes: 148 additions & 21 deletions rest/tests/test_vocabulary.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
VocabularySerializer,
TermSerializer,
)
from taxonomy.models import Vocabulary, Term
from taxonomy.models import Vocabulary, Term, make_vocab_key
from learningresources.models import LearningResourceType, LearningResource

log = logging.getLogger(__name__)
Expand Down Expand Up @@ -668,8 +668,8 @@ def test_index_updates_on_create(self):
self.get_results()['facet_counts'][vocab_key]['values']]),
[]
)
self.assert_results([], vocab_key, term1.slug)
self.assert_results([], vocab_key, term2.slug)
self.assert_results([], vocab_key, term1.id)
self.assert_results([], vocab_key, term2.id)

resource1 = LearningResource.objects.all()[0]
resource2 = LearningResource.objects.all()[1]
Expand All @@ -684,11 +684,11 @@ def test_index_updates_on_create(self):
self.assertEqual(
sorted([t['key'] for t in
self.get_results()['facet_counts'][vocab_key]['values']]),
sorted([term1.slug, term2.slug])
sorted([str(term1.id), str(term2.id)])
)

self.assert_results([resource1], vocab_key, term1.slug)
self.assert_results([resource2], vocab_key, term2.slug)
self.assert_results([resource1], vocab_key, term1.id)
self.assert_results([resource2], vocab_key, term2.id)

def test_index_updates_on_edit(self):
"""
Expand Down Expand Up @@ -732,8 +732,8 @@ def test_index_updates_on_edit(self):
self.get_results()['facet_counts'][vocab_key]['values']]),
[]
)
self.assert_results([], vocab_key, term1.slug)
self.assert_results([], vocab_key, term2.slug)
self.assert_results([], vocab_key, term1.id)
self.assert_results([], vocab_key, term2.id)

resource1 = LearningResource.objects.all()[0]
resource2 = LearningResource.objects.all()[1]
Expand All @@ -748,10 +748,10 @@ def test_index_updates_on_edit(self):
self.assertEqual(
sorted([t['key'] for t in
self.get_results()['facet_counts'][vocab_key]['values']]),
sorted([term1.slug, term2.slug])
sorted([str(term1.id), str(term2.id)])
)
self.assert_results([resource1], vocab_key, term1.slug)
self.assert_results([resource2], vocab_key, term2.slug)
self.assert_results([resource1], vocab_key, term1.id)
self.assert_results([resource2], vocab_key, term2.id)

# Vocab is edited to remove all learning resource types which will also
# remove all links to terms.
Expand All @@ -765,8 +765,8 @@ def test_index_updates_on_edit(self):
self.get_results()['facet_counts'][vocab_key]['values']]),
[]
)
self.assert_results([], vocab_key, term1.slug)
self.assert_results([], vocab_key, term2.slug)
self.assert_results([], vocab_key, term1.id)
self.assert_results([], vocab_key, term2.id)

def test_index_updates_on_delete(self):
"""
Expand Down Expand Up @@ -825,29 +825,29 @@ def test_index_updates_on_delete(self):
self.assertEqual(
sorted([t['key'] for t in
self.get_results()['facet_counts'][vocab_key]['values']]),
sorted([term1.slug, term2.slug])
sorted([str(term1.id), str(term2.id)])
)
self.assert_results([resource1], vocab_key, term1.slug)
self.assert_results([resource2], vocab_key, term2.slug)
self.assert_results([resource1], vocab_key, term1.id)
self.assert_results([resource2], vocab_key, term2.id)

# Term is removed from facet list.
self.delete_term(self.repo.slug, vocab.slug, term1.slug)
self.assertEqual(
sorted([t['key'] for t in
self.get_results()['facet_counts'][vocab_key]['values']]),
sorted([term2.slug])
sorted([str(term2.id)])
)
self.assert_results([], vocab_key, term1.slug)
self.assert_results([resource2], vocab_key, term2.slug)
self.assert_results([], vocab_key, term1.id)
self.assert_results([resource2], vocab_key, term2.id)

self.delete_vocabulary(self.repo.slug, vocab.slug)
# No vocabs left.
self.assertEqual(
sorted(["course", "run", "resource_type"]),
sorted(self.get_results()['facet_counts'].keys())
)
self.assert_results([], vocab_key, term1.slug)
self.assert_results([], vocab_key, term2.slug)
self.assert_results([], vocab_key, term1.id)
self.assert_results([], vocab_key, term2.id)

def test_vocab_num_queries(self):
"""Make sure number of queries is reasonable for vocab and term."""
Expand Down Expand Up @@ -896,6 +896,133 @@ def test_vocab_num_queries(self):
with self.assertNumQueries(30):
self.delete_vocabulary(self.repo.slug, vocab_slug)

def test_vocabulary_rename(self):
"""Test that index updates properly after a vocabulary rename."""
vocab_result = self.create_vocabulary(self.repo.slug)
vocab_id = vocab_result['id']
vocab_key = make_vocab_key(vocab_id)
vocab_slug = vocab_result['slug']
term_result = self.create_term(self.repo.slug, vocab_slug)
term_id = term_result['id']
term_slug = term_result['slug']
term_label = term_result['label']

# Update vocabulary for resource type, assign term
self.patch_vocabulary(self.repo.slug, vocab_slug, {
"learning_resource_types": [
self.resource.learning_resource_type.name
]
})
self.patch_learning_resource(self.repo.slug, self.resource.id, {
"terms": [term_slug]
})

self.assertEqual(
self.get_results()['facet_counts'][vocab_key]['facet']['label'],
vocab_result['name']
)
self.assertEqual(
self.get_results()['facet_counts'][vocab_key]['values'],
[{'count': 1, 'key': str(term_id), 'label': term_label}]
)
self.assertEqual(
self.get_results(selected_facets=["{v}_exact:{t}".format(
v=vocab_key,
t=term_id
)])['count'],
1
)

# Rename vocabulary
name = "brand new name"
self.patch_vocabulary(self.repo.slug, vocab_slug, {
"name": name
})

# Facet counts should not change
self.assertEqual(
self.get_results()['facet_counts'][vocab_key]['facet']['label'],
name
)
self.assertEqual(
self.get_results()['facet_counts'][vocab_key]['values'],
[{'count': 1, 'key': str(term_id), 'label': term_label}]
)
self.assertEqual(
self.get_results(selected_facets=["{v}_exact:{t}".format(
v=vocab_key,
t=term_id
)])['count'],
1
)

def test_term_rename(self):
"""Test that index updates properly after a term rename."""
vocab_result = self.create_vocabulary(self.repo.slug)
vocab_key = make_vocab_key(vocab_result['id'])
vocab_slug = vocab_result['slug']
term_result = self.create_term(self.repo.slug, vocab_slug)
term_id = term_result['id']
term_slug = term_result['slug']

# Update vocabulary for resource type, assign term
self.patch_vocabulary(self.repo.slug, vocab_slug, {
"learning_resource_types": [
self.resource.learning_resource_type.name
]
})
self.patch_learning_resource(self.repo.slug, self.resource.id, {
"terms": [term_slug]
})

self.assertEqual(
self.get_results()['facet_counts'][vocab_key]['values'],
[{'count': 1, 'key': str(term_id), 'label': term_result['label']}]
)
self.assertEqual(
self.get_results(selected_facets=["{v}_exact:{t}".format(
v=vocab_key,
t=term_id
)])['count'],
1
)

# Rename term
label = "brand new label"
self.patch_term(self.repo.slug, vocab_slug, term_slug, {
"label": label
})

# Facet counts should not change
self.assertEqual(
self.get_results()['facet_counts'][vocab_key]['values'],
[{'count': 1, 'key': str(term_id), 'label': label}]
)
self.assertEqual(
self.get_results(selected_facets=["{v}_exact:{t}".format(
v=vocab_key,
t=term_id
)])['count'],
1
)

def test_empty_vocab_facet_count(self):
"""
Test that we get vocabulary label and not something else for
an empty vocabulary.
"""
vocab_dict = dict(self.DEFAULT_VOCAB_DICT)
name = 'name with spaces'
vocab_dict['name'] = name
vocab_result = self.create_vocabulary(self.repo.slug, vocab_dict)
vocab_id = vocab_result['id']
vocab_key = make_vocab_key(vocab_id)

self.assertEqual(
self.get_results()['facet_counts'][vocab_key]['facet']['label'],
name
)


class TestVocabularyAuthorization(RESTAuthTestCase):
"""
Expand Down
4 changes: 2 additions & 2 deletions search/tests/base_es.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,9 @@ def count_results(self, query=None):
"""Return count of matching indexed records."""
return self.search(query).count()

def count_faceted_results(self, vocab, term):
def count_faceted_results(self, vocab_id, term_id):
"""Return count of matching indexed records by facet."""
return search_index(
repo_slug=self.repo.slug,
terms={make_vocab_key(vocab): term}
terms={make_vocab_key(vocab_id): term_id}
).count()

0 comments on commit fc541e6

Please sign in to comment.