Skip to content
Merged
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
92 changes: 64 additions & 28 deletions .github/workflows/unit_tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ on:
branches-ignore:
- '**'
pull_request:
branches: [master, dev, stage]
branches: [ master, dev, stage ]

jobs:
UnitTest:
Expand All @@ -15,30 +15,66 @@ jobs:
DATABASE_NAME: test_database

steps:
- name: Checkout code
uses: actions/checkout@v2

- name: Updating and installing GDAL
run: |
sudo apt update
sudo apt install gdal-bin libgdal-dev python3-gdal

- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.10'

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install GDAL==3.4.1
pip install -r requirements.txt

- name: Run tests with coverage
run: |
coverage run --source=src -m unittest discover -s tests/unit_tests
coverage xml

- name: Check coverage
run: |
coverage report --fail-under=80
- name: Checkout code
uses: actions/checkout@v2

- name: Updating and installing GDAL
run: |
sudo apt update
sudo apt install gdal-bin libgdal-dev python3-gdal

- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.10'

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install GDAL==3.4.1
pip install -r requirements.txt

- name: Determine output folder
id: set_output_folder
run: |
if [[ $GITHUB_EVENT_NAME == "pull_request" ]]; then
branch_name=$GITHUB_BASE_REF
else
branch_name=$GITHUB_REF_NAME
fi
if [[ $branch_name == "main" ]]; then
echo "output_folder=prod" >> $GITHUB_ENV
elif [[ $branch_name == "stage" ]]; then
echo "output_folder=stage" >> $GITHUB_ENV
elif [[ $branch_name == "dev" ]]; then
echo "output_folder=dev" >> $GITHUB_ENV
else
echo "Unknown branch: $branch_name"
exit 1
fi

- name: Run tests with coverage
run: |
timestamp=$(date '+%Y-%m-%d_%H-%M-%S')
mkdir -p test_results
log_file="test_results/${timestamp}_report.log"
echo -e "\nTest Cases Report Report\n" >> $log_file
# Run the tests and append output to the log file
python -m coverage run --source=src -m unittest discover -s tests/unit_tests >> $log_file 2>&1
echo -e "\nCoverage Report\n" >> $log_file
coverage report >> $log_file
coverage xml

- name: Check coverage
run: |
coverage report --fail-under=85

- name: Upload report to Azure
uses: LanceMcCarthy/Action-AzureBlobUpload@v2
with:
source_folder: 'test_results'
destination_folder: '${{ env.output_folder }}'
connection_string: ${{ secrets.AZURE_STORAGE_CONNECTION_STRING }}
container_name: 'osw-formatter-service'
clean_destination_folder: false
delete_if_exists: false
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -133,4 +133,5 @@ dmypy.json
.tempdir/
reports/
test_report.html
integration_test_report.html
integration_test_report.html
test_results
3 changes: 2 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ FROM python:3.10
RUN apt-get update && apt-get install -y \
gdal-bin \
libgdal-dev \
python3-gdal
python3-gdal \
cmake

WORKDIR /code

Expand Down
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@ pydantic==1.10.4
python-ms-core==0.0.22
uvicorn==0.20.0
html_testRunner==1.2.1
osm-osw-reformatter==0.2.4
osm-osw-reformatter==0.2.5
numpy==1.26.4
17 changes: 9 additions & 8 deletions src/models/osw_ondemand_response.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,19 @@
# Message containing on demand request for osw formatting

from dataclasses import dataclass
from typing import Optional


@dataclass
class ResponseData:
sourceUrl: str
jobId: str
source: str
target: str
status: str
formattedUrl: str
success: bool
message: str
sourceUrl: Optional[str] = ''
jobId: str = ''
source: Optional[str] = ''
target: Optional[str] = ''
status: str = ''
formattedUrl: Optional[str] = ''
success: bool = False
message: str = ''


@dataclass
Expand Down
12 changes: 4 additions & 8 deletions src/service/osw_formatter_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ def process(message: QueueMessage) -> None:
except Exception as e:
logger.error(f"Error occurred while processing message, {e}")
self.send_status(result=ValidationResult(is_valid=False, validation_message=str(e)),
upload_message=upload_message)
upload_message=message)

self.listening_topic.subscribe(
subscription=self.subscription_name, callback=process
Expand Down Expand Up @@ -241,7 +241,9 @@ def process_on_demand_format(self, request: OSWOnDemandRequest):
data={
'status': 'failed',
'message': str(e),
'success': False}
'success': False,
'jobId': request.data.jobId
}
)
)
finally:
Expand Down Expand Up @@ -274,9 +276,3 @@ def upload_to_azure_on_demand(self, remote_path: str, local_url: str):
def stop_listening(self):
self.listening_thread.join(timeout=0)
return






15 changes: 0 additions & 15 deletions tests/unit_tests/models/test_osw_ondemand_response.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,21 +63,6 @@ def test_missing_data_field(self):
with self.assertRaises(TypeError):
OSWOnDemandResponse(messageType='on_demand_response', messageId='123456')

def test_missing_required_data_fields(self):
# Test when some required fields are missing in the 'data' dictionary
incomplete_data = {
'sourceUrl': 'https://example.com/source.zip',
'jobId': '789',
'source': 'osw',
'status': 'completed',
'formattedUrl': 'https://example.com/formatted.zip',
# 'target' and 'formattedUrl' are missing
'success': True,
'message': 'Formatting successful'
}

with self.assertRaises(TypeError):
OSWOnDemandResponse(messageType='on_demand_response', messageId='123456', data=incomplete_data)


if __name__ == '__main__':
Expand Down
52 changes: 52 additions & 0 deletions tests/unit_tests/models/test_queue_message_content.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,58 @@ def test_validation_result_init(self):
self.assertTrue(result.is_valid)
self.assertEqual(result.validation_message, 'Validated')

class TestRequest(unittest.TestCase):
def test_request_init(self):
data = {
'tdei_project_group_id': 'test_group_id',
'collected_by': 'tester',
'collection_date': '2024-01-01',
'collection_method': 'manual',
'publication_date': '2024-02-01',
'data_source': 'test_source',
'polygon': {'type': 'Polygon', 'coordinates': [[[0, 0], [1, 0], [1, 1], [0, 1], [0, 0]]]},
'osw_schema_version': '1.0'
}
request = Request(data)

self.assertEqual(request.tdei_project_group_id, 'test_group_id')
self.assertEqual(request.collected_by, 'tester')
self.assertEqual(request.collection_date, '2024-01-01')
self.assertEqual(request.collection_method, 'manual')
self.assertEqual(request.publication_date, '2024-02-01')
self.assertEqual(request.data_source, 'test_source')
self.assertEqual(request.polygon, data['polygon'])
self.assertEqual(request.osw_schema_version, '1.0')


class TestMeta(unittest.TestCase):
def test_meta_init(self):
data = {
'file_upload_path': '/path/to/file',
'isValid': True,
'validationMessage': 'Validation successful',
'download_osm_url': '/path/to/osm',
'download_xml_url': '/path/to/xml'
}
meta = Meta(data)
self.assertEqual(meta.file_upload_path, '/path/to/file')
self.assertTrue(meta.isValid)
self.assertEqual(meta.validationMessage, 'Validation successful')
self.assertEqual(meta.download_osm_url, '/path/to/file')
self.assertEqual(meta.download_xml_url, '/path/to/xml')


class TestResponse(unittest.TestCase):
def test_response_init(self):
data = {
'success': True,
'message': 'Operation completed successfully'
}
response = Response(data)

self.assertTrue(response.success)
self.assertEqual(response.message, 'Operation completed successfully')


if __name__ == '__main__':
unittest.main()
Loading
Loading