Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
301 changes: 157 additions & 144 deletions ckanext/scheming/plugins.py

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion ckanext/scheming/templates/scheming/group/group_form.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
</p>
{%- endif -%}

<form class="dataset-form form-horizontal" method="post" data-module="basic-form" enctype="multipart/form-data">
<form class="dataset-form" method="post" data-module="basic-form" enctype="multipart/form-data">
{%- set schema = h.scheming_get_group_schema(group_type) -%}
{%- for field in schema['fields'] -%}
{%- if field.form_snippet is not none -%}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
</p>
{%- endif -%}

<form class="dataset-form form-horizontal" method="post" data-module="basic-form" enctype="multipart/form-data">
<form class="dataset-form" method="post" data-module="basic-form" enctype="multipart/form-data">
{%- set schema = h.scheming_get_organization_schema(group_type) -%}
{%- for field in schema['fields'] -%}
{%- if field.form_snippet is not none -%}
Expand Down
65 changes: 64 additions & 1 deletion ckanext/scheming/tests/test_form.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import ckantoolkit
from bs4 import BeautifulSoup

from ckantoolkit.tests.factories import Sysadmin, Dataset
from ckantoolkit.tests.factories import Sysadmin, Dataset, Group
from ckantoolkit.tests.helpers import call_action


Expand Down Expand Up @@ -63,6 +63,13 @@ def _get_group_new_page_as_sysadmin(app, type="group"):
return env, response


def _get_group_update_page_as_sysadmin(app, id):
user = Sysadmin()
env = {"REMOTE_USER": user["name"].encode("ascii")}
response = app.get(url="/theme-subfields/edit/{}".format(id), extra_environ=env)
return env, response


@pytest.mark.usefixtures("clean_db")
class TestDatasetFormNew(object):
def test_dataset_form_includes_custom_fields(self, app):
Expand Down Expand Up @@ -462,3 +469,59 @@ def test_resource_form_update(self, app):
{"frequency": '1y', "impact": 'A'},
{"frequency": '1m', "impact": 'P'},
]


@pytest.mark.usefixtures("clean_db")
class TestSubfieldGroupForm(object):
def test_group_form_includes_subfields(self, app):
env, response = _get_group_new_page_as_sysadmin(app, 'theme-subfields')
form = BeautifulSoup(response.body).select("form")[1]
assert form.select("fieldset[name=scheming-repeating-subfields]")

def test_group_form_create(self, app, sysadmin_env):
data = {"save": "", "_ckan_phase": 1}

data["name"] = "subfield_group_1"
data["citation-0-originator"] = ['mei', 'ahmed']
data["contact_address-0-address"] = 'anyplace'

url = '/theme-subfields/new'
try:
app.post(url, environ_overrides=sysadmin_env, data=data, follow_redirects=False)
except TypeError:
app.post(url.encode('ascii'), params=data, extra_environ=sysadmin_env)

group = call_action("group_show", id="subfield_group_1")
assert group["citation"] == [{'originator': ['mei', 'ahmed']}]
assert group["contact_address"] == [{'address': 'anyplace'}]

def test_group_form_update(self, app):
group = Group(
type="theme-subfields",
citation=[{'originator': ['mei']}, {'originator': ['ahmed']}],
contact_address=[{'address': 'anyplace'}])

env, response = _get_group_update_page_as_sysadmin(
app, group["id"]
)
form = BeautifulSoup(response.body).select_one("form.dataset-form")
assert form.select_one(
"input[name=citation-1-originator]"
).attrs['value'] == 'ahmed'

data = {"save": ""}
data["citation-0-originator"] = ['ling']
data["citation-1-originator"] = ['umet']
data["contact_address-0-address"] = 'home'
data["name"] = group["name"]

url = '/theme-subfields/edit/' + group["id"]
try:
app.post(url, environ_overrides=env, data=data, follow_redirects=False)
except TypeError:
app.post(url.encode('ascii'), params=data, extra_environ=env)

group = call_action("group_show", id=group["id"])

assert group["citation"] == [{'originator': ['ling']}, {'originator': ['umet']}]
assert group["contact_address"] == [{'address': 'home'}]
2 changes: 1 addition & 1 deletion ckanext/scheming/tests/test_group_display.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ def test_organization_displays_custom_fields(self, app):
class TestGroupDisplay(object):
def test_group_displays_custom_fields(self, app):
user = Sysadmin()
Group(user=user, name="group-one", bookface="theoneandonly")
Group(user=user, name="group-one", bookface="theoneandonly", type="group")

response = app.get("/group/about/group-one")
assert "Bookface" in response.body
2 changes: 1 addition & 1 deletion ckanext/scheming/tests/test_group_logic.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ class TestGroupSchemaLists(object):
def test_group_schema_list(self):
lc = LocalCKAN("visitor")
group_schemas = lc.action.scheming_group_schema_list()
assert sorted(group_schemas) == ["group", "theme"]
assert sorted(group_schemas) == ["group", "theme", "theme-subfields"]

def test_group_schema_show(self):
lc = LocalCKAN("visitor")
Expand Down
58 changes: 58 additions & 0 deletions ckanext/scheming/tests/test_group_subfields.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
scheming_version: 2
group_type: theme-subfields
about_url: http://github.com/ckan/ckanext-scheming
fields:
- field_name: title
label: Name
validators: ignore_missing unicode
form_snippet: large_text.html
form_attrs:
data-module: slug-preview-target
form_placeholder: My theme
- field_name: name
label: URL
validators: not_empty unicode name_validator group_name_validator
form_snippet: slug.html
form_placeholder: my-theme
- field_name: notes
label: Description
form_snippet: markdown.html
form_placeholder: A little information about my group...
- field_name: url
label: Image URL
form_placeholder: http://example.com/my-image.jpg
- field_name: status
label: Status
output_validators: ignore_missing
choices:
- label: In Progress
value: in-progress
- label: Final
value: final

- field_name: citation
label: Citation
repeating_subfields:
- field_name: originator
label: Originator
preset: multiple_text
form_blanks: 3
required: true
- field_name: publication_date
label: Publication Date
preset: date

- field_name: contact_address
label: Contact Address
repeating_subfields:
- field_name: address
label: Address
required: true
- field_name: city
label: City
- field_name: state
label: State
- field_name: postal_code
label: Postal Code
- field_name: country
label: Country
1 change: 1 addition & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
'ckantoolkit>=0.0.2',
'pytz',
'six',
'typing; python_version < "3.0"'
],
entry_points=\
"""
Expand Down
6 changes: 3 additions & 3 deletions test.ini
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,14 @@ use = config:../ckan/test-core.ini
ckan.plugins = scheming_datasets scheming_groups scheming_organizations
scheming_test_plugin scheming_nerf_index
scheming.dataset_schemas = ckanext.scheming:ckan_dataset.yaml
ckanext.scheming.tests:test_schema.json
ckanext.scheming.tests:test_schema.json
ckanext.scheming.tests:test_subfields.yaml
ckanext.scheming.tests:test_datastore_choices.json
ckanext.scheming.tests:test_datastore_choices.json
scheming.organization_schemas = ckanext.scheming:org_with_dept_id.json
ckanext.scheming:custom_org_with_address.json
scheming.group_schemas = ckanext.scheming:group_with_bookface.json
ckanext.scheming:custom_group_with_status.json

ckanext.scheming.tests:test_group_subfields.yaml
ckan.site_logo = /img/logo_64px_wide.png
ckan.favicon = /images/icons/ckan.ico
ckan.gravatar_default = identicon
Expand Down