Add CI code and logic to validate flows

This commit is contained in:
Roei Bar Aviv
2025-05-22 15:44:54 +02:00
parent 3b348c3de0
commit 344054572a
8 changed files with 609 additions and 0 deletions

View File

@@ -0,0 +1,79 @@
"""Tests for n8n workflow validation."""
import json
import os
import tempfile
import unittest
from pathlib import Path
from n8n_utils.ci.validator import validate_workflow, ValidationError
class TestWorkflowValidation(unittest.TestCase):
"""Test cases for workflow validation."""
def setUp(self):
"""Set up test fixtures."""
self.valid_workflow = {
"name": "Test Workflow",
"nodes": [
{
"id": "1",
"name": "Start",
"type": "n8n-nodes-base.start",
"typeVersion": 1,
"position": [250, 300],
"parameters": {}
},
{
"id": "2",
"name": "HTTP Request",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 1,
"position": [450, 300],
"parameters": {
"url": "https://example.com",
"method": "GET"
}
}
],
"connections": {
"1": {
"main": [
[
{
"node": "2",
"type": "main",
"index": 0
}
]
]
}
}
}
def test_valid_workflow(self):
"""Test validation of a valid workflow."""
errors = validate_workflow(self.valid_workflow)
self.assertEqual(len(errors), 0)
def test_missing_required_field(self):
"""Test validation of a workflow with a missing required field."""
# Remove a required field
invalid_workflow = self.valid_workflow.copy()
del invalid_workflow["nodes"][0]["id"]
errors = validate_workflow(invalid_workflow)
self.assertGreater(len(errors), 0)
self.assertIn("id", errors[0])
def test_invalid_node_structure(self):
"""Test validation of a workflow with invalid node structure."""
invalid_workflow = self.valid_workflow.copy()
# Make position an invalid type
invalid_workflow["nodes"][0]["position"] = "not an array"
errors = validate_workflow(invalid_workflow)
self.assertGreater(len(errors), 0)
self.assertIn("position", errors[0])
if __name__ == "__main__":
unittest.main()