Skip to content

Commit d9e2fd1

Browse files
authored
Merge pull request #24 from TaskarCenterAtUW/dev
Dev to stage
2 parents 5805f8e + c468ab1 commit d9e2fd1

File tree

5 files changed

+87
-15
lines changed

5 files changed

+87
-15
lines changed
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
---
2+
######### Prod Workflow ########
3+
on:
4+
pull_request:
5+
branches: [main]
6+
types:
7+
- closed
8+
workflow_dispatch:
9+
permissions:
10+
id-token: write
11+
contents: read
12+
13+
jobs:
14+
Build:
15+
environment: Production
16+
runs-on: ubuntu-latest
17+
if: github.event.pull_request.merged == true
18+
steps:
19+
- uses: actions/checkout@v2
20+
- uses: azure/docker-login@v1
21+
with:
22+
login-server: ${{ secrets.REGISTRY_DOMAIN }}
23+
username: ${{ secrets.REGISTRY_USERNAME }}
24+
password: ${{ secrets.REGISTRY_PASSWORD }}
25+
- name: Publish image to Azure Registry
26+
run: |
27+
docker build -t ${{ secrets.REGISTRY_DOMAIN }}/${{ secrets.REGISTRY_REPO }}:${{ github.sha }} -t ${{ secrets.REGISTRY_DOMAIN }}/${{ secrets.REGISTRY_REPO }}:${{ github.ref_name == 'master' && 'prod' || github.ref_name }}${{ github.ref_name != 'master' && '-latest' || 'latest' }} .
28+
docker push ${{ secrets.REGISTRY_DOMAIN }}/${{ secrets.REGISTRY_REPO }} --all-tags
29+
Deploy:
30+
needs: Build
31+
environment:
32+
name: Production
33+
runs-on: ubuntu-latest
34+
steps:
35+
- name: Login to Azure
36+
uses: azure/login@v2.0.0
37+
with:
38+
creds: ${{secrets.TDEI_CORE_AZURE_CREDS}}
39+
- name: Deploy to Production
40+
uses: azure/webapps-deploy@v2
41+
with:
42+
app-name: ${{ secrets.AZURE_WEBAPP_NAME }}
43+
images: ${{ secrets.REGISTRY_DOMAIN }}/${{ secrets.REGISTRY_REPO }}:${{ github.sha }}.

.github/workflows/unit_tests.yaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ jobs:
3232
- name: Install dependencies
3333
run: |
3434
pip install -r requirements.txt
35-
pip install -i https://test.pypi.org/simple/ python-osw-validation==0.0.3
3635
3736
- name: Run unit tests
3837
run: |

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@ uvicorn==0.20.0
77
coverage==7.2.7
88
html_testRunner==1.2.1
99
httpx==0.24.1
10-
python-osw-validation==0.2.1
10+
python-osw-validation==0.2.3

src/validation.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@ def __init__(self, file_path=None, storage_client=None):
2626
self.file_relative_path = file_path.split('/')[-1]
2727
self.client = self.storage_client.get_container(container_name=self.container_name)
2828

29-
def validate(self) -> ValidationResult:
30-
return self.is_osw_valid()
29+
def validate(self, max_errors=20) -> ValidationResult:
30+
return self.is_osw_valid(max_errors)
3131

32-
def is_osw_valid(self) -> ValidationResult:
32+
def is_osw_valid(self, max_errors) -> ValidationResult:
3333
result = ValidationResult()
3434
result.is_valid = False
3535
result.validation_message = ''
@@ -38,7 +38,7 @@ def is_osw_valid(self) -> ValidationResult:
3838
downloaded_file_path = self.download_single_file(self.file_path)
3939
logger.info(f' Downloaded file path: {downloaded_file_path}')
4040
validator = OSWValidation(zipfile_path=downloaded_file_path)
41-
validation_result = validator.validate()
41+
validation_result = validator.validate(max_errors)
4242
result.is_valid = validation_result.is_valid
4343
if not result.is_valid:
4444
result.validation_message = validation_result.errors

tests/unit_tests/test_validation.py

Lines changed: 39 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,36 @@ def test_validate_with_invalid_file(self):
131131
self.assertFalse(result.is_valid)
132132
self.assertIsInstance(result.validation_message, list)
133133

134+
def test_validate_with_invalid_file_with_default_error_counts(self):
135+
# Arrange
136+
file_path = f'{SAVED_FILE_PATH}/{FAILURE_FILE_NAME}'
137+
expected_downloaded_file_path = file_path
138+
self.validator.download_single_file = MagicMock(return_value=expected_downloaded_file_path)
139+
Validation.clean_up = MagicMock()
140+
141+
# Act
142+
result = self.validator.validate()
143+
144+
# Assert
145+
self.assertFalse(result.is_valid)
146+
self.assertIsInstance(result.validation_message, list)
147+
self.assertLessEqual(len(result.validation_message), 20)
148+
149+
def test_validate_with_invalid_file_with_specific_error_counts(self):
150+
# Arrange
151+
file_path = f'{SAVED_FILE_PATH}/{FAILURE_FILE_NAME}'
152+
expected_downloaded_file_path = file_path
153+
self.validator.download_single_file = MagicMock(return_value=expected_downloaded_file_path)
154+
Validation.clean_up = MagicMock()
155+
156+
# Act
157+
result = self.validator.validate(max_errors=10)
158+
159+
# Assert
160+
self.assertFalse(result.is_valid)
161+
self.assertIsInstance(result.validation_message, list)
162+
self.assertLessEqual(len(result.validation_message), 10)
163+
134164
def test_is_osw_valid_with_invalid_zip_file(self):
135165
# Arrange
136166
file_path = f'{SAVED_FILE_PATH}/{FAILURE_FILE_NAME}'
@@ -184,7 +214,7 @@ def test_is_osw_valid_with_id_missing_zip(self):
184214
Validation.clean_up = MagicMock()
185215

186216
# Act
187-
result = self.validator.is_osw_valid()
217+
result = self.validator.is_osw_valid(max_errors=2)
188218

189219
# Assert
190220
self.assertFalse(result.is_valid)
@@ -214,7 +244,7 @@ def test_is_osw_valid_with_invalid_edges_zip(self):
214244
Validation.clean_up = MagicMock()
215245

216246
# Act
217-
result = self.validator.is_osw_valid()
247+
result = self.validator.is_osw_valid(max_errors=2)
218248

219249
# Assert
220250
self.assertFalse(result.is_valid)
@@ -244,7 +274,7 @@ def test_is_osw_valid_with_invalid_nodes_zip(self):
244274
Validation.clean_up = MagicMock()
245275

246276
# Act
247-
result = self.validator.is_osw_valid()
277+
result = self.validator.is_osw_valid(max_errors=2)
248278

249279
# Assert
250280
self.assertFalse(result.is_valid)
@@ -274,7 +304,7 @@ def test_is_osw_valid_with_invalid_points_zip(self):
274304
Validation.clean_up = MagicMock()
275305

276306
# Act
277-
result = self.validator.is_osw_valid()
307+
result = self.validator.is_osw_valid(max_errors=2)
278308

279309
# Assert
280310
self.assertFalse(result.is_valid)
@@ -304,7 +334,7 @@ def test_is_osw_valid_with_invalid_files_zip(self):
304334
Validation.clean_up = MagicMock()
305335

306336
# Act
307-
result = self.validator.is_osw_valid()
337+
result = self.validator.is_osw_valid(max_errors=2)
308338

309339
# Assert
310340
self.assertFalse(result.is_valid)
@@ -334,7 +364,7 @@ def test_is_osw_valid_with_invalid_geometry_zip(self):
334364
Validation.clean_up = MagicMock()
335365

336366
# Act
337-
result = self.validator.is_osw_valid()
367+
result = self.validator.is_osw_valid(max_errors=2)
338368

339369
# Assert
340370
self.assertFalse(result.is_valid)
@@ -364,7 +394,7 @@ def test_is_osw_valid_with_missing_identifier_zip(self):
364394
Validation.clean_up = MagicMock()
365395

366396
# Act
367-
result = self.validator.is_osw_valid()
397+
result = self.validator.is_osw_valid(max_errors=2)
368398

369399
# Assert
370400
self.assertFalse(result.is_valid)
@@ -394,7 +424,7 @@ def test_is_osw_valid_with_no_entity_zip(self):
394424
Validation.clean_up = MagicMock()
395425

396426
# Act
397-
result = self.validator.is_osw_valid()
427+
result = self.validator.is_osw_valid(max_errors=2)
398428

399429
# Assert
400430
self.assertFalse(result.is_valid)
@@ -424,7 +454,7 @@ def test_is_osw_valid_with_wring_datatype_zip(self):
424454
Validation.clean_up = MagicMock()
425455

426456
# Act
427-
result = self.validator.is_osw_valid()
457+
result = self.validator.is_osw_valid(max_errors=2)
428458

429459
# Assert
430460
self.assertFalse(result.is_valid)

0 commit comments

Comments
 (0)