Back to Repositories

Testing AI Provider Name Mapping Implementation in OpenHands

This test suite validates the mapProvider utility function that standardizes AI provider names in the OpenHands platform. It ensures consistent mapping between internal provider keys and their display names across multiple AI service providers.

Test Coverage Overview

The test suite provides comprehensive coverage for mapping 22 different AI provider identifiers to their proper display names. Key functionality includes:

  • Validation of major cloud providers (Azure, AWS)
  • Testing of popular AI platforms (Anthropic, Gemini, PaLM)
  • Verification of emerging AI services (Mistral AI, Groq, FriendliAI)
  • Edge cases for providers with special formatting (AWS SageMaker, Cloudflare Workers AI)

Implementation Analysis

The testing approach utilizes Jest’s test and expect functions to verify string mapping operations. Each test case follows a consistent pattern of mapping internal provider keys to their standardized display names.

The implementation leverages Jest’s individual assertion style, allowing for clear failure identification and maintenance.

Technical Details

  • Testing Framework: Jest/Vitest
  • Test Type: Unit test
  • Language: TypeScript
  • Test Pattern: Individual expect statements
  • Function Tested: mapProvider utility

Best Practices Demonstrated

The test suite exemplifies several testing best practices:

  • Comprehensive coverage of all provider mappings
  • Consistent test case structure
  • Clear naming conventions
  • Single responsibility principle
  • Maintainable and scalable test organization

all-hands-ai/openhands

frontend/__tests__/utils/map-provider.test.ts

            
import { test, expect } from "vitest";
import { mapProvider } from "../../src/utils/map-provider";

test("mapProvider", () => {
  expect(mapProvider("azure")).toBe("Azure");
  expect(mapProvider("azure_ai")).toBe("Azure AI Studio");
  expect(mapProvider("vertex_ai")).toBe("VertexAI");
  expect(mapProvider("palm")).toBe("PaLM");
  expect(mapProvider("gemini")).toBe("Gemini");
  expect(mapProvider("anthropic")).toBe("Anthropic");
  expect(mapProvider("sagemaker")).toBe("AWS SageMaker");
  expect(mapProvider("bedrock")).toBe("AWS Bedrock");
  expect(mapProvider("mistral")).toBe("Mistral AI");
  expect(mapProvider("anyscale")).toBe("Anyscale");
  expect(mapProvider("databricks")).toBe("Databricks");
  expect(mapProvider("ollama")).toBe("Ollama");
  expect(mapProvider("perlexity")).toBe("Perplexity AI");
  expect(mapProvider("friendliai")).toBe("FriendliAI");
  expect(mapProvider("groq")).toBe("Groq");
  expect(mapProvider("fireworks_ai")).toBe("Fireworks AI");
  expect(mapProvider("cloudflare")).toBe("Cloudflare Workers AI");
  expect(mapProvider("deepinfra")).toBe("DeepInfra");
  expect(mapProvider("ai21")).toBe("AI21");
  expect(mapProvider("replicate")).toBe("Replicate");
  expect(mapProvider("voyage")).toBe("Voyage AI");
  expect(mapProvider("openrouter")).toBe("OpenRouter");
});