diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..5521923 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,29 @@ +name: CI Pipeline + +on: + push: + branches: [main] + pull_request: + branches: [main] + +jobs: + test: + name: Lint & Unit Test + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.12" + + - name: Install dependencies + run: | + pip install pytest boto3 + + - name: Run unit tests + run: | + pytest project-d-serverless-api/tests/ -v \ No newline at end of file diff --git a/project-d-serverless-api/tests/__init__.py b/project-d-serverless-api/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/project-d-serverless-api/tests/test_lambda.py b/project-d-serverless-api/tests/test_lambda.py new file mode 100644 index 0000000..d1c0686 --- /dev/null +++ b/project-d-serverless-api/tests/test_lambda.py @@ -0,0 +1,31 @@ +import json +import sys +import os +from unittest.mock import patch, MagicMock + +os.environ['TABLE_NAME'] = 'test-table' +os.environ['AWS_DEFAULT_REGION'] = 'ap-northeast-1' + +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'lambda')) + +import index + +def test_get_items_returns_200(): + with patch.object(index, 'table') as mock_table: + mock_table.scan.return_value = {'Items': []} + event = {"httpMethod": "GET", "pathParameters": None, "body": None} + response = index.handler(event, {}) # ← handler に変更 + assert response["statusCode"] == 200 + +def test_response_has_cors_header(): + with patch.object(index, 'table') as mock_table: + mock_table.scan.return_value = {'Items': []} + event = {"httpMethod": "GET", "pathParameters": None, "body": None} + response = index.handler(event, {}) # ← handler に変更 + assert "Access-Control-Allow-Origin" in response["headers"] + +def test_invalid_method_returns_400(): + with patch.object(index, 'table') as mock_table: + event = {"httpMethod": "PATCH", "pathParameters": None, "body": None} + response = index.handler(event, {}) # ← handler に変更 + assert response["statusCode"] == 400 \ No newline at end of file