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

Commit

Permalink
FS-3629: Fix tests and multi input
Browse files Browse the repository at this point in the history
  • Loading branch information
tferns committed Nov 22, 2023
1 parent a8e50d3 commit 3298032
Show file tree
Hide file tree
Showing 20 changed files with 180 additions and 64 deletions.
98 changes: 98 additions & 0 deletions .github/workflows/test-and-tag-python.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
name: Test and Tag Python tools

on:
workflow_dispatch:
push:
paths:
- "python/**" # Trigger only on changes in the "python" directory

jobs:
run-unit-tests:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v3

- name: Change working directory to python
run: cd python

- name: Setup python
id: setup_python
uses: actions/setup-python@v4
with:
python-version: '3.10'

- name: Run tests
run: |
python -m venv .venv
source .venv/bin/activate && python -m pip install --upgrade pip && pip install -r python/requirements.txt
pytest python/tests
create-release:
runs-on: ubuntu-latest
needs: run-unit-tests
if: github.ref == 'refs/heads/main'
permissions:
contents: write
steps:
- uses: actions/checkout@v3

- name: Change working directory to python
run: cd python

- name: Setup python
id: setup_python
uses: actions/setup-python@v4
with:
python-version: '3.10'

- name: Get package version
id: package_version
run: echo "app_version="$(python setup.py --version) >> $GITHUB_OUTPUT

- name: Check if tag exists
uses: mukunku/tag-exists-action@v1.0.0
id: check_tag
with:
tag: ${{ steps.package_version.outputs.app_version }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- uses: ncipollo/release-action@v1
name: Create Release
id: create_release
if: ${{ steps.check_tag.outputs.exists == 'false' }}
with:
commit: main
tag: ${{ steps.package_version.outputs.app_version }}
token: ${{ secrets.GITHUB_TOKEN }}

publish-release:
runs-on: ubuntu-latest
needs: create-release
if: github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v3

- name: Change working directory to python
run: cd python

- name: Setup python
id: setup_python
uses: actions/setup-python@v4
with:
python-version: '3.10'

- name: Build for publish
id: build_dist
run: |
python -m pip install --upgrade pip && pip install build
python -m build
echo workspace dir $GITHUB_WORKSPACE
- name: Publish to PyPI
id: publish-to-pypi
uses: pypa/gh-action-pypi-publish@release/v1
with:
password: ${{ secrets.PYPI_API_TOKEN }}
12 changes: 6 additions & 6 deletions python/answer_displayers/MultiInputField.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,37 +21,37 @@ def _legacy_parsed_answer(self) -> str:
)

@property
def _parse_multi_input_component(self) -> list[AnswerDisplayer]:
def _parse_multi_input_component(self) -> dict[str, AnswerDisplayer]:
from python.dictionaries import (
EXISTING_KEY_TO_TYPE_DICT,
FIELD_TO_DISPLAYER_DICT_MULTI_INPUT,
)

raw_answer: list[dict[str, Any]] = self.raw_answer
answer_displayers: list[AnswerDisplayer] = []
answer_displayers: dict[str, AnswerDisplayer] = {}
for answer_tuple in raw_answer:
for key, answer in answer_tuple.items():
answer_type = EXISTING_KEY_TO_TYPE_DICT[key]
displayer = FIELD_TO_DISPLAYER_DICT_MULTI_INPUT[answer_type](answer)
answer_displayers.append(displayer)
answer_displayers[key] = displayer
return answer_displayers

@property
def as_csv(self) -> str | list[AnswerDisplayer]:
def as_csv(self) -> str | dict[str, AnswerDisplayer]:
if self.legacy:
return self._legacy_parsed_answer
else:
return self._parse_multi_input_component

@property
def as_txt(self) -> str | list[AnswerDisplayer]:
def as_txt(self) -> str | dict[str, AnswerDisplayer]:
if self.legacy:
return self._legacy_parsed_answer
else:
return self._parse_multi_input_component

@property
def as_pdf(self) -> str | list[AnswerDisplayer]:
def as_pdf(self) -> str | dict[str, AnswerDisplayer]:
if self.legacy:
return self._legacy_parsed_answer
else:
Expand Down
34 changes: 18 additions & 16 deletions python/dictionaries.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,21 @@
from python import CheckboxesFieldDisplayer
from python import ClientSideFileUploadFieldDisplayer
from python import DatePartsFieldDisplayer
from python import EmailAddressFieldDisplayer
from python import FreeTextFieldDisplayer
from python import MonthYearFieldDisplayer
from python import MonthYearFieldDisplayerMultiInput
from python import MultiInputFieldDisplayer
from python import NumberFieldDisplayer
from python import RadiosFieldDisplayer
from python import TelephoneNumberFieldDisplayer
from python import TextFieldDisplayer
from python import UkAddressFieldDisplayer
from python import UkAddressFieldDisplayerMultiInput
from python import WebsiteFieldDisplayer
from python import YesNoFieldDisplayer
from python.answer_displayers.CheckboxesField import CheckboxesFieldDisplayer
from python.answer_displayers.ClientSideFileUploadField import (
ClientSideFileUploadFieldDisplayer,
)
from python.answer_displayers.DatePartsField import DatePartsFieldDisplayer
from python.answer_displayers.EmailAddressField import EmailAddressFieldDisplayer
from python.answer_displayers.FreeTextField import FreeTextFieldDisplayer
from python.answer_displayers.MonthYearField import MonthYearFieldDisplayer
from python.answer_displayers.MonthYearField import MonthYearFieldDisplayerMultiInput
from python.answer_displayers.MultiInputField import MultiInputFieldDisplayer
from python.answer_displayers.NumberField import NumberFieldDisplayer
from python.answer_displayers.RadiosField import RadiosFieldDisplayer
from python.answer_displayers.TelephoneNumberField import TelephoneNumberFieldDisplayer
from python.answer_displayers.TextField import TextFieldDisplayer
from python.answer_displayers.UkAddressField import UkAddressFieldDisplayer
from python.answer_displayers.UkAddressField import UkAddressFieldDisplayerMultiInput
from python.answer_displayers.WebsiteField import WebsiteFieldDisplayer
from python.answer_displayers.YesNoField import YesNoFieldDisplayer

FIELD_TO_DISPLAYER_DICT_MULTI_INPUT = {
"CheckboxesField": CheckboxesFieldDisplayer,
Expand Down
27 changes: 27 additions & 0 deletions python/pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"

[project]
name = "funding-service-design-digital-form-builder-tools"
version = "0.0.1"
authors = [
{ name="DLUHC", email="FundingServiceDesignTeam@levellingup.gov.uk" },
]
description = "Python tools for our fork of the digital-form-builder"
readme = "README.md"
license = { file = "LICENSE" }
requires-python = ">=3.10"
classifiers = [
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
]

[dependencies]
beautifulsoup4 = "4.12.2"


[project.urls]
"Bug Tracker" = "https://github.com/tferns/fsd-digital-form-builder-tools/issues"
"Homepage" = "https://github.com/tferns/fsd-digital-form-builder-tools"
19 changes: 0 additions & 19 deletions python/setup.cfg

This file was deleted.

10 changes: 9 additions & 1 deletion python/setup.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
from setuptools import find_packages
from setuptools import setup

setup()
package_data = {"": ["*"]}

setup_kwargs = {
"packages": find_packages(),
"package_data": package_data,
}

setup(**setup_kwargs)
2 changes: 1 addition & 1 deletion python/tests/test_CheckboxesField.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import pytest
from python.components.CheckboxesField import CheckboxesFieldDisplayer
from python.answer_displayers.CheckboxesField import CheckboxesFieldDisplayer

_TEST_INPUTS = [
["community-pride", "delivering-positive"],
Expand Down
2 changes: 1 addition & 1 deletion python/tests/test_ClientSideFileUploadField.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import pytest
from python.components.ClientSideFileUploadField import (
from python.answer_displayers.ClientSideFileUploadField import (
ClientSideFileUploadFieldDisplayer,
)

Expand Down
2 changes: 1 addition & 1 deletion python/tests/test_DatePartsField.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import pytest
from python.components.DatePartsField import DatePartsFieldDisplayer
from python.answer_displayers.DatePartsField import DatePartsFieldDisplayer

_TEST_INPUTS = [
"2022-12-01",
Expand Down
2 changes: 1 addition & 1 deletion python/tests/test_EmailAddressField.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import pytest
from python.components.EmailAddressField import EmailAddressFieldDisplayer
from python.answer_displayers.EmailAddressField import EmailAddressFieldDisplayer

_TEST_INPUTS = _TEST_OUTPUTS = [
"testemailfundingservice@testemailfundingservice.com",
Expand Down
2 changes: 1 addition & 1 deletion python/tests/test_FreeTextField.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import pytest
from python.components.FreeTextField import FreeTextFieldDisplayer
from python.answer_displayers.FreeTextField import FreeTextFieldDisplayer

_TEST_INPUTS = [
"Tell us how you have engaged with the community about your intention to take ownership of the asset",
Expand Down
4 changes: 2 additions & 2 deletions python/tests/test_MonthYearField.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import pytest
from python.components.MonthYearField import MonthYearFieldDisplayer
from python.components.MonthYearField import MonthYearFieldDisplayerMultiInput
from python.answer_displayers.MonthYearField import MonthYearFieldDisplayer
from python.answer_displayers.MonthYearField import MonthYearFieldDisplayerMultiInput

_TEST_INPUTS = [
"2022-04",
Expand Down
14 changes: 7 additions & 7 deletions python/tests/test_MultiInputField.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import pytest
from python.components.MultiInputField import MultiInputFieldDisplayer
from python.answer_displayers.MultiInputField import MultiInputFieldDisplayer

_TEST_INPUTS_LEGACY = [
["Test : \u00a3100"],
Expand Down Expand Up @@ -84,8 +84,8 @@ def test_as_pdf(answer, expected_result):
)
def test_as_csv_multi_input(answer, expected_answers):
answer_displayers = MultiInputFieldDisplayer(answer).as_csv
for answer_displayer, expected_answer in zip(answer_displayers, expected_answers):
assert answer_displayer.as_csv == expected_answer
for key, expected_answer in zip(answer_displayers, expected_answers):
assert answer_displayers[key].as_csv == expected_answer


@pytest.mark.parametrize(
Expand All @@ -94,8 +94,8 @@ def test_as_csv_multi_input(answer, expected_answers):
)
def test_as_txt_multi_input(answer, expected_answers):
answer_displayers = MultiInputFieldDisplayer(answer).as_txt
for answer_displayer, expected_answer in zip(answer_displayers, expected_answers):
assert answer_displayer.as_txt == expected_answer
for key, expected_answer in zip(answer_displayers, expected_answers):
assert answer_displayers[key].as_txt == expected_answer


@pytest.mark.parametrize(
Expand All @@ -104,5 +104,5 @@ def test_as_txt_multi_input(answer, expected_answers):
)
def test_as_pdf_multi_input(answer, expected_answers):
answer_displayers = MultiInputFieldDisplayer(answer).as_pdf
for answer_displayer, expected_answer in zip(answer_displayers, expected_answers):
assert answer_displayer.as_pdf == expected_answer
for key, expected_answer in zip(answer_displayers, expected_answers):
assert answer_displayers[key].as_pdf == expected_answer
2 changes: 1 addition & 1 deletion python/tests/test_NumberField.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import pytest
from python.components.NumberField import NumberFieldDisplayer
from python.answer_displayers.NumberField import NumberFieldDisplayer

_TEST_INPUTS = [
"2300",
Expand Down
2 changes: 1 addition & 1 deletion python/tests/test_RadiosField.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import pytest
from python.components.RadiosField import RadiosFieldDisplayer
from python.answer_displayers.RadiosField import RadiosFieldDisplayer

_TEST_INPUTS = [
"CIO",
Expand Down
2 changes: 1 addition & 1 deletion python/tests/test_TelephoneNumberField.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import pytest
from python.components.TelephoneNumberField import TelephoneNumberFieldDisplayer
from python.answer_displayers.TelephoneNumberField import TelephoneNumberFieldDisplayer

_TEST_INPUTS = _TEST_OUTPUTS = [
"332323232",
Expand Down
2 changes: 1 addition & 1 deletion python/tests/test_TextField.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import pytest
from python.components.TextField import TextFieldDisplayer
from python.answer_displayers.TextField import TextFieldDisplayer

_TEST_INPUTS = _TEST_OUTPUTS = [
"ghjghj",
Expand Down
4 changes: 2 additions & 2 deletions python/tests/test_UkAddressField.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import pytest
from python.components.UkAddressField import UkAddressFieldDisplayer
from python.components.UkAddressField import UkAddressFieldDisplayerMultiInput
from python.answer_displayers.UkAddressField import UkAddressFieldDisplayer
from python.answer_displayers.UkAddressField import UkAddressFieldDisplayerMultiInput

_TEST_INPUTS = [
"test, null, test, null, te3 2bf",
Expand Down
2 changes: 1 addition & 1 deletion python/tests/test_WebsiteField.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import pytest
from python.components.WebsiteField import WebsiteFieldDisplayer
from python.answer_displayers.WebsiteField import WebsiteFieldDisplayer

_TEST_INPUTS = _TEST_OUTPUTS = [
"https://github.com/serenity-bdd/serenity-cucumber-starter",
Expand Down
2 changes: 1 addition & 1 deletion python/tests/test_YesNoField.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import pytest
from python.components.YesNoField import YesNoFieldDisplayer
from python.answer_displayers.YesNoField import YesNoFieldDisplayer

_TEST_INPUTS = [
True,
Expand Down

0 comments on commit 3298032

Please sign in to comment.