-
Notifications
You must be signed in to change notification settings - Fork 7
test model dump and fix, add tests to pr workflow #101
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 1 commit
87dbc18
7af59ee
752a7b8
bfea19b
cd9665b
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
name: Pull Request Test Update Workflow | ||
on: | ||
pull_request: | ||
types: | ||
- opened | ||
- synchronize | ||
- reopened | ||
|
||
jobs: | ||
test_run: | ||
name: Test that update contributions workflow runs | ||
# Only run this job if the issue has the 'new contribution' label | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Checkout sources | ||
uses: actions/checkout@v4 | ||
|
||
- name: Setup Python | ||
mingness marked this conversation as resolved.
Show resolved
Hide resolved
|
||
uses: actions/setup-python@v5 | ||
with: | ||
python-version: 3.x | ||
|
||
- name: Install dependencies | ||
run: pip install -r requirements.txt | ||
|
||
- name: run unit tests | ||
run: pytest | ||
|
||
- name: fetch updates on contributions | ||
run: python -u scripts/fetch_updates.py | ||
|
||
- name: write contribs.txt file | ||
run: python -u scripts/to_contribs_txt.py | ||
|
||
- name: write source json files | ||
run: python -u scripts/to_sources_jsons.py |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -6,6 +6,7 @@ | |
import pathlib | ||
import shutil | ||
from collections import defaultdict | ||
from typing import List | ||
|
||
from utils import get_valid_contributions | ||
|
||
|
@@ -45,6 +46,40 @@ def read_contribs_text(filepath): | |
return contribs_list | ||
|
||
|
||
def preprocess_contributions() -> List: | ||
all_contributions = get_valid_contributions() | ||
|
||
# sort contributions list by type | ||
def sort_key(d): | ||
return type_list.index(d['type']) | ||
all_contributions = sorted(all_contributions, key=sort_key) | ||
|
||
return all_contributions | ||
|
||
|
||
def write_contribs(all_contributions, fh): | ||
for contribution in all_contributions: | ||
fh.write(contribution['type'] + '\n') | ||
for field in contribs_fields_list: | ||
if field in contribution: | ||
if field == 'id': | ||
fh.write(f'{field}={contribution[field]:03}\n') | ||
elif field == 'categories': | ||
if contribution['type'] == 'library': | ||
fh.write(f'{field}={",".join(contribution[field]) if contribution[field] else ""}\n') | ||
else: | ||
# categories are only relevant for libraries, except for examples with "Books" as category | ||
if contribution[field] and 'Books' in contribution[field]: | ||
fh.write(f'{field}={",".join(contribution[field]) if contribution[field] else ""}\n') | ||
else: | ||
fh.write(f'{field}=\n') | ||
elif field == 'compatibleModesList': | ||
fh.write(f'modes={contribution[field]}\n') | ||
else: | ||
fh.write(f'{field}={"" if contribution[field] is None else contribution[field]}\n') | ||
Comment on lines
+64
to
+79
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think using a There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Thanks, I'll put this comment into an issue, as a possible future improvement to the code. |
||
fh.write('\n') | ||
|
||
|
||
if __name__ == "__main__": | ||
pde_folder = pathlib.Path(__file__).parent.parent / 'pde/' | ||
# remove sources folder if it already exists | ||
|
@@ -54,34 +89,10 @@ def read_contribs_text(filepath): | |
|
||
contribs_text_file = pde_folder / 'contribs.txt' | ||
|
||
contributions_list = get_valid_contributions() | ||
|
||
# sort contributions list by type | ||
def sort_key(d): | ||
return type_list.index(d['type']) | ||
contributions_list = sorted(contributions_list, key=sort_key) | ||
contributions_list = preprocess_contributions() | ||
|
||
# write contribs.txt file | ||
with open(contribs_text_file, 'w+') as f: | ||
for contribution in contributions_list: | ||
f.write(contribution['type']+'\n') | ||
for field in contribs_fields_list: | ||
if field in contribution: | ||
if field == 'id': | ||
f.write(f'{field}={contribution[field]:03}\n') | ||
elif field == 'categories': | ||
if contribution['type'] == 'library': | ||
f.write(f'{field}={",".join(contribution[field]) if contribution[field] else ""}\n') | ||
else: | ||
# categories are only relevant for libraries, except for examples with "Books" as category | ||
if contribution[field] and 'Books' in contribution[field]: | ||
f.write(f'{field}={",".join(contribution[field]) if contribution[field] else ""}\n') | ||
else: | ||
f.write(f'{field}=\n') | ||
elif field == 'compatibleModesList': | ||
f.write(f'modes={contribution[field]}\n') | ||
else: | ||
f.write(f'{field}={"" if contribution[field] is None else contribution[field]}\n') | ||
f.write('\n') | ||
write_contribs(contributions_list, f) | ||
|
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,135 @@ | ||
import pytest | ||
from pydantic import ValidationError | ||
from scripts.parse_and_validate_properties_txt import validate_new, validate_existing, validate_new_library | ||
|
||
|
||
# Test Cases | ||
class TestValidateAndExport: | ||
|
||
def test_validate_existing_complete_data(self, valid_properties_data): | ||
mingness marked this conversation as resolved.
Show resolved
Hide resolved
|
||
"""Test validate_existing with complete data""" | ||
props = validate_existing(valid_properties_data) | ||
|
||
assert props['name'] == valid_properties_data['name'] | ||
assert props['authors'] == valid_properties_data['authors'] | ||
assert props['url'] == valid_properties_data['url'] | ||
assert props['categories'] == valid_properties_data['categories'] | ||
assert props['sentence'] == valid_properties_data['sentence'] | ||
assert props['paragraph'] == valid_properties_data['paragraph'] | ||
assert props['version'] == valid_properties_data['version'] | ||
assert props['prettyVersion'] == valid_properties_data['prettyVersion'] | ||
assert props['minRevision'] == int(valid_properties_data['minRevision']) | ||
assert props['maxRevision'] == int(valid_properties_data['maxRevision']) | ||
assert props['modes'] == valid_properties_data['modes'] | ||
|
||
|
||
def test_validate_existing_minimal_required_data(self, minimal_properties_existing_data): | ||
"""Test validate_existing with minimal data""" | ||
props = validate_existing(minimal_properties_existing_data) | ||
|
||
assert props['name'] == minimal_properties_existing_data['name'] | ||
assert props['authors'] == minimal_properties_existing_data['authors'] | ||
assert props['url'] == minimal_properties_existing_data['url'] | ||
assert props['categories'] is None | ||
assert props['sentence'] == minimal_properties_existing_data['sentence'] | ||
assert props['paragraph'] is None | ||
assert props['version'] == minimal_properties_existing_data['version'] | ||
assert props['prettyVersion'] is None | ||
assert props['minRevision'] == 0 # Default value | ||
assert props['maxRevision'] == 0 # Default value | ||
assert props['modes'] is None | ||
|
||
|
||
def test_validate_existing_extra_fields_allowed(self, properties_with_extra_fields): | ||
"""Test validate_existing with extra fields""" | ||
props = validate_existing(properties_with_extra_fields) | ||
|
||
assert props['name'] == properties_with_extra_fields['name'] | ||
assert props['customField'] == properties_with_extra_fields['customField'] | ||
assert props['anotherExtra'] == properties_with_extra_fields['anotherExtra'] | ||
|
||
|
||
def test_validate_new_complete_data(self, valid_properties_data): | ||
"""Test validate_new with complete data""" | ||
props = validate_new(valid_properties_data) | ||
|
||
assert props['name'] == valid_properties_data['name'] | ||
assert props['authors'] == valid_properties_data['authors'] | ||
assert props['url'] == valid_properties_data['url'] | ||
assert props['categories'] == valid_properties_data['categories'] | ||
assert props['sentence'] == valid_properties_data['sentence'] | ||
assert props['paragraph'] == valid_properties_data['paragraph'] | ||
assert props['version'] == int(valid_properties_data['version']) | ||
assert props['prettyVersion'] == valid_properties_data['prettyVersion'] | ||
assert props['minRevision'] == int(valid_properties_data['minRevision']) | ||
assert props['maxRevision'] == int(valid_properties_data['maxRevision']) | ||
assert props['modes'] == valid_properties_data['modes'] | ||
|
||
|
||
def test_validate_new_minimal_required_data(self, minimal_properties_base_data): | ||
"""Test validate_new with minimal data""" | ||
props = validate_new(minimal_properties_base_data) | ||
|
||
assert props['name'] == minimal_properties_base_data['name'] | ||
assert props['authors'] == minimal_properties_base_data['authors'] | ||
assert props['url'] == minimal_properties_base_data['url'] | ||
assert props['categories'] is None | ||
assert props['sentence'] == minimal_properties_base_data['sentence'] | ||
assert props['paragraph'] is None | ||
assert props['version'] == int(minimal_properties_base_data['version']) | ||
assert props['prettyVersion'] == minimal_properties_base_data['prettyVersion'] | ||
assert props['minRevision'] == 0 # Default value | ||
assert props['maxRevision'] == 0 # Default value | ||
assert props['modes'] is None | ||
|
||
|
||
def test_validate_new_extra_fields_allowed(self, properties_with_extra_fields): | ||
"""Test validate_new with extra fields""" | ||
props = validate_new(properties_with_extra_fields) | ||
|
||
assert props['name'] == properties_with_extra_fields['name'] | ||
assert props['customField'] == properties_with_extra_fields['customField'] | ||
assert props['anotherExtra'] == properties_with_extra_fields['anotherExtra'] | ||
|
||
|
||
def test_validate_new_library_complete_data(self, valid_properties_data): | ||
"""Test validate_new_library with complete data""" | ||
props = validate_new_library(valid_properties_data) | ||
|
||
assert props['name'] == valid_properties_data['name'] | ||
assert props['authors'] == valid_properties_data['authors'] | ||
assert props['url'] == valid_properties_data['url'] | ||
assert props['categories'] == valid_properties_data['categories'] | ||
assert props['sentence'] == valid_properties_data['sentence'] | ||
assert props['paragraph'] == valid_properties_data['paragraph'] | ||
assert props['version'] == int(valid_properties_data['version']) | ||
assert props['prettyVersion'] == valid_properties_data['prettyVersion'] | ||
assert props['minRevision'] == int(valid_properties_data['minRevision']) | ||
assert props['maxRevision'] == int(valid_properties_data['maxRevision']) | ||
assert props['modes'] == valid_properties_data['modes'] | ||
|
||
|
||
def test_validate_new_library_minimal_required_data(self, minimal_properties_library_data): | ||
"""Test validate_new_library with minimal data""" | ||
props = validate_new_library(minimal_properties_library_data) | ||
|
||
assert props['name'] == minimal_properties_library_data['name'] | ||
assert props['authors'] == minimal_properties_library_data['authors'] | ||
assert props['url'] == minimal_properties_library_data['url'] | ||
assert props['categories'] == minimal_properties_library_data['categories'] | ||
assert props['sentence'] == minimal_properties_library_data['sentence'] | ||
assert props['paragraph'] is None | ||
assert props['version'] == int(minimal_properties_library_data['version']) | ||
assert props['prettyVersion'] == minimal_properties_library_data['prettyVersion'] | ||
assert props['minRevision'] == 0 # Default value | ||
assert props['maxRevision'] == 0 # Default value | ||
assert props['modes'] is None | ||
|
||
|
||
def test_validate_new_library_extra_fields_allowed(self, properties_with_extra_fields): | ||
"""Test validate_new_library with extra fields""" | ||
props = validate_new_library(properties_with_extra_fields) | ||
|
||
assert props['name'] == properties_with_extra_fields['name'] | ||
assert props['customField'] == properties_with_extra_fields['customField'] | ||
assert props['anotherExtra'] == properties_with_extra_fields['anotherExtra'] |
Uh oh!
There was an error while loading. Please reload this page.