diff --git a/.github/workflows/pr-test.yml b/.github/workflows/pr-test.yml index c322bdcb..98b238e1 100644 --- a/.github/workflows/pr-test.yml +++ b/.github/workflows/pr-test.yml @@ -361,9 +361,9 @@ jobs: }); # ============================================================================= - # AI Tests (agent, aigc) - Run once with SQLite + # Agent Tests (agent, aigc) - Run once with SQLite # ============================================================================= - AITest: + AgentTest: runs-on: ubuntu-latest services: qdrant: @@ -448,7 +448,7 @@ jobs: owner: context.repo.owner, repo: context.repo.repo, issue_number: issue_number, - body: '🤖 AI Tests (agent, aigc) running with SQLite...' + body: '🤖 Agent Tests (agent, aigc) running with SQLite...' }); - name: Checkout Kun @@ -550,20 +550,20 @@ jobs: docker pull yaoapp/sandbox-base:latest || true docker pull yaoapp/sandbox-claude:latest || true - - name: Run AI Tests (agent, aigc) + - name: Run Agent Tests (agent, aigc) env: YAO_SANDBOX_WORKSPACE: ${{ runner.temp }}/sandbox/workspace YAO_SANDBOX_IPC: ${{ runner.temp }}/sandbox/ipc run: | export YAO_SANDBOX_CONTAINER_USER="$(id -u):$(id -g)" - make unit-test-ai + make unit-test-agent - name: Codecov Report uses: codecov/codecov-action@v4 with: token: ${{ secrets.CODECOV_TOKEN }} - - name: "Comment on PR - AI Tests Done" + - name: "Comment on PR - Agent Tests Done" uses: actions/github-script@v7 with: github-token: ${{ secrets.GITHUB_TOKEN }} @@ -574,13 +574,13 @@ jobs: owner: context.repo.owner, repo: context.repo.repo, issue_number: issue_number, - body: '✅ AI Tests (agent, aigc) passed!' + body: '✅ Agent Tests (agent, aigc) passed!' }); # ============================================================================= - # Robot E2E Tests (agent/robot/api) - Run TestE2E* with real LLM calls + # Robot Tests (all agent/robot/... packages) - Unit + E2E with real LLM calls # ============================================================================= - RobotE2ETest: + RobotTest: runs-on: ubuntu-latest services: mcp-everything: @@ -645,7 +645,7 @@ jobs: owner: context.repo.owner, repo: context.repo.repo, issue_number: issue_number, - body: '🤖 Robot E2E Tests running with SQLite...' + body: '🤖 Robot Tests (Unit + E2E) running with SQLite...' }); - name: Checkout Kun @@ -725,15 +725,15 @@ jobs: echo "YAO_DB_DRIVER=sqlite3" >> $GITHUB_ENV echo "YAO_DB_PRIMARY=${{ github.WORKSPACE }}/../app/db/yao.db" >> $GITHUB_ENV - - name: Run Robot E2E Tests - run: make unit-test-robot-e2e + - name: Run Robot Tests (Unit + E2E) + run: make unit-test-robot - name: Codecov Report uses: codecov/codecov-action@v4 with: token: ${{ secrets.CODECOV_TOKEN }} - - name: "Comment on PR - Robot E2E Tests Done" + - name: "Comment on PR - Robot Tests Done" uses: actions/github-script@v7 with: github-token: ${{ secrets.GITHUB_TOKEN }} @@ -744,7 +744,7 @@ jobs: owner: context.repo.owner, repo: context.repo.repo, issue_number: issue_number, - body: '✅ Robot E2E Tests passed!' + body: '✅ Robot Tests (Unit + E2E) passed!' }); # ============================================================================= diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index b81ce354..0442c757 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -303,9 +303,9 @@ jobs: token: ${{ secrets.CODECOV_TOKEN }} # ============================================================================= - # AI Tests (agent, aigc) - Run once with SQLite + # Agent Tests (agent, aigc) - Run once with SQLite # ============================================================================= - ai-test: + agent-test: runs-on: ubuntu-latest services: qdrant: @@ -444,13 +444,13 @@ jobs: docker pull yaoapp/sandbox-base:latest || true docker pull yaoapp/sandbox-claude:latest || true - - name: Run AI Tests (agent, aigc) + - name: Run Agent Tests (agent, aigc) env: YAO_SANDBOX_WORKSPACE: ${{ runner.temp }}/sandbox/workspace YAO_SANDBOX_IPC: ${{ runner.temp }}/sandbox/ipc run: | export YAO_SANDBOX_CONTAINER_USER="$(id -u):$(id -g)" - make unit-test-ai + make unit-test-agent - name: Codecov Report uses: codecov/codecov-action@v4 @@ -458,9 +458,9 @@ jobs: token: ${{ secrets.CODECOV_TOKEN }} # ============================================================================= - # Robot E2E Tests (agent/robot/api) - Run TestE2E* with real LLM calls + # Robot Tests (all agent/robot/... packages) - Unit + E2E with real LLM calls # ============================================================================= - robot-e2e-test: + robot-test: runs-on: ubuntu-latest services: mcp-everything: @@ -557,8 +557,8 @@ jobs: echo "YAO_DB_DRIVER=sqlite3" >> $GITHUB_ENV echo "YAO_DB_PRIMARY=${{ github.WORKSPACE }}/../app/db/yao.db" >> $GITHUB_ENV - - name: Run Robot E2E Tests - run: make unit-test-robot-e2e + - name: Run Robot Tests (Unit + E2E) + run: make unit-test-robot - name: Codecov Report uses: codecov/codecov-action@v4 diff --git a/Makefile b/Makefile index cae35a18..a96149b2 100644 --- a/Makefile +++ b/Makefile @@ -13,12 +13,12 @@ OS := $(shell uname) TESTFOLDER := $(shell $(GO) list ./... | grep -vE 'examples|openai|aigc|neo|twilio|share*' | awk '!/\/tests\// || /openapi\/tests/') # Core tests (exclude AI-related: agent, aigc, openai, KB, and sandbox which requires Docker) TESTFOLDER_CORE := $(shell $(GO) list ./... | grep -vE 'examples|openai|aigc|neo|twilio|share*|agent|kb|sandbox' | awk '!/\/tests\// || /openapi\/tests/') -# AI tests (agent, aigc) - exclude agent/search/handlers/web (requires external API keys) and robot/api E2E tests -TESTFOLDER_AI := $(shell $(GO) list ./agent/... ./aigc/... | grep -v 'agent/search/handlers/web') +# Agent tests (agent, aigc) - exclude agent/search/handlers/web (requires external API keys) and robot packages (tested in robot job) +TESTFOLDER_AGENT := $(shell $(GO) list ./agent/... ./aigc/... | grep -vE 'agent/search/handlers/web|agent/robot/') # KB tests (kb) TESTFOLDER_KB := $(shell $(GO) list ./kb/...) -# Robot E2E tests (agent/robot/api) - runs TestE2E* tests with real LLM calls -TESTFOLDER_ROBOT_E2E := $(shell $(GO) list ./agent/robot/api/...) +# Robot tests (all agent/robot/... packages) - runs ALL tests (unit + E2E) with real LLM calls +TESTFOLDER_ROBOT := $(shell $(GO) list ./agent/robot/...) # Sandbox tests (requires Docker) TESTFOLDER_SANDBOX := $(shell $(GO) list ./sandbox/...) TESTTAGS ?= "" @@ -77,12 +77,12 @@ unit-test-core: fi; \ done -# AI Unit Test (agent, aigc) - excludes TestE2E* (run separately in unit-test-robot-e2e) -.PHONY: unit-test-ai -unit-test-ai: +# Agent Unit Test (agent, aigc) - excludes robot packages (tested in unit-test-robot) and TestE2E* +.PHONY: unit-test-agent +unit-test-agent: echo "mode: count" > coverage.out - for d in $(TESTFOLDER_AI); do \ - $(GO) test -tags $(TESTTAGS) -v -timeout=20m -covermode=count -coverprofile=profile.out -coverpkg=$$(echo $$d | sed "s/\/test$$//g") -skip='TestMemoryLeak|TestIsolateDisposal|TestE2E' $$d > tmp.out; \ + for d in $(TESTFOLDER_AGENT); do \ + $(GO) test -tags $(TESTTAGS) -v -timeout=50m -covermode=count -coverprofile=profile.out -coverpkg=$$(echo $$d | sed "s/\/test$$//g") -skip='TestMemoryLeak|TestIsolateDisposal|TestE2E' $$d > tmp.out; \ cat tmp.out; \ if grep -q "^--- FAIL" tmp.out; then \ rm tmp.out; \ @@ -141,13 +141,13 @@ unit-test-kb: fi; \ done -# Robot E2E Test (agent/robot/api) - runs TestE2E* tests with real LLM calls +# Robot Test (all agent/robot/... packages) - runs ALL tests (unit + E2E) with real LLM calls # These tests require: LLM API keys, database, and longer timeout -.PHONY: unit-test-robot-e2e -unit-test-robot-e2e: +.PHONY: unit-test-robot +unit-test-robot: echo "mode: count" > coverage.out - for d in $(TESTFOLDER_ROBOT_E2E); do \ - $(GO) test -tags $(TESTTAGS) -v -timeout=30m -covermode=count -coverprofile=profile.out -coverpkg=$$(echo $$d | sed "s/\/test$$//g") -run='TestE2E' $$d > tmp.out; \ + for d in $(TESTFOLDER_ROBOT); do \ + $(GO) test -tags $(TESTTAGS) -v -timeout=50m -covermode=count -coverprofile=profile.out -coverpkg=$$(echo $$d | sed "s/\/test$$//g") -skip='TestMemoryLeak|TestIsolateDisposal' $$d > tmp.out; \ cat tmp.out; \ if grep -q "^--- FAIL" tmp.out; then \ rm tmp.out; \ diff --git a/agent/robot/executor/standard/suspend_test.go b/agent/robot/executor/standard/suspend_test.go index 4f616ec9..fd746291 100644 --- a/agent/robot/executor/standard/suspend_test.go +++ b/agent/robot/executor/standard/suspend_test.go @@ -78,13 +78,12 @@ func TestDetectNeedMoreInfo(t *testing.T) { assert.Empty(t, question) }) - t.Run("handles nested data structure in Next", func(t *testing.T) { + t.Run("unwraps data envelope from Next hook", func(t *testing.T) { result := &CallResult{ Next: map[string]interface{}{ - "status": "need_input", - "question": "Which database should I query?", "data": map[string]interface{}{ - "options": []interface{}{"db1", "db2"}, + "status": "need_input", + "question": "Which database should I query?", }, }, }