Skip to content

Commit

Permalink
[1767][tests] add WUI test for changing the vocab tags on a dataset
Browse files Browse the repository at this point in the history
  • Loading branch information
johnglover committed Feb 14, 2012
1 parent 2fd9ad1 commit 7711876
Showing 1 changed file with 54 additions and 12 deletions.
66 changes: 54 additions & 12 deletions ckan/tests/logic/test_tag_vocab.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from pylons import request, tmpl_context as c
from genshi.input import HTML
from genshi.filters import Transformer
import paste.fixture
from ckan import model
from ckan.logic import get_action
from ckan.logic.converters import convert_to_tags, convert_from_tags, free_tags_only
Expand Down Expand Up @@ -92,12 +93,11 @@ def setup_template_variables(self, context, data_dict=None):
c.vocab_tags = get_action('tag_list')(context, {'vocabulary_name': TEST_VOCAB_NAME})

def form_to_db_schema(self):
# schema = package_form_schema()
# schema.update({
# 'vocab_tags': [ignore_missing, convert_to_tags(self.vocab_name)],
# })
# return schema
pass
schema = package_form_schema()
schema.update({
'vocab_tags': [ignore_missing, convert_to_tags(TEST_VOCAB_NAME)],
})
return schema

def db_to_form_schema(self):
schema = package_form_schema()
Expand Down Expand Up @@ -134,6 +134,45 @@ def filter(self, stream):
return stream


# paste.fixture.Field.Select does not handle multiple selects currently,
# so replace with our own implementation here
#
# TODO: this still only handles a single value, fix and test multiple
class Select(paste.fixture.Field):
def __init__(self, *args, **attrs):
super(Select, self).__init__(*args, **attrs)
self.options = []
self.selectedIndex = None

def value__set(self, value):
for i, (option, checked) in enumerate(self.options):
if option == str(value):
self.selectedIndex = i
break
else:
raise ValueError(
"Option %r not found (from %s)"
% (value, ', '.join(
[repr(o) for o, c in self.options])))

def value__get(self):
if self.selectedIndex is not None:
return self.options[self.selectedIndex][0]
else:
for option, checked in self.options:
if checked:
return option
else:
if self.options:
return self.options[0][0]
else:
return None

value = property(value__get, value__set)

paste.fixture.Field.classes['select'] = Select


class TestWUI(WsgiAppCase):
@classmethod
def setup_class(cls):
Expand Down Expand Up @@ -193,12 +232,15 @@ def test_01_dataset_view(self):
response = self.app.get(h.url_for(controller='package', action='read', id=self.dset.id))
assert self.tag1_name in response.body

def test_02_dataset_edit_add_tag(self):
def test_02_dataset_edit_change_vocab_tag(self):
vocab_id = self._get_vocab_id(TEST_VOCAB_NAME)
self._add_vocab_tag(vocab_id, self.tag2_name)
response = self.app.get(h.url_for(controller='package', action='edit', id=self.dset.id))
# fv = response.forms['dataset-edit']
# fv['vocab_tags'] = ['']
# response = fv.submit('save')
# response = response.follow()
url = h.url_for(controller='package', action='edit', id=self.dset.id)
response = self.app.get(url)
fv = response.forms['dataset-edit']
fv['vocab_tags'] = self.tag2_name
response = fv.submit('save')
response = response.follow()
assert not self.tag1_name in response.body
assert self.tag2_name in response.body

0 comments on commit 7711876

Please sign in to comment.