[PR #23523] Feat add testcontainers test for app service #30296

Closed
opened 2026-02-21 20:47:13 -05:00 by yindo · 0 comments
Owner

Original Pull Request: https://github.com/langgenius/dify/pull/23523

State: closed
Merged: Yes


Important

  1. Make sure you have read our contribution guidelines
  2. Ensure there is an associated issue and you have been assigned to it
  3. Use the correct syntax to link this PR: Fixes #<issue number>.

Summary

This PR introduces comprehensive integration tests for the AppService class using testcontainers to improve test reliability and coverage. The implementation addresses the gap between unit tests with mocks and full end-to-end tests by providing real database integration while maintaining test isolation and consistency.

Fix #23522

Key Changes:

  • Added testcontainers-based integration tests for AppService with 16 comprehensive test methods
  • Implemented real database testing while mocking external service dependencies (FeatureService, EnterpriseService, ModelManager)
  • Comprehensive CRUD operation coverage including app creation, retrieval, updates, and deletion
  • Advanced filtering and pagination testing with support for mode, name, tag, and ownership filters
  • Edge case validation including invalid mode handling and no-change update scenarios
  • Proper test isolation using db_session_with_containers fixture and Faker for realistic test data

Test Coverage Includes:

  • App creation with various modes and parameters
  • App retrieval and pagination with multiple filter combinations
  • App updates (general, name-only, icon-only, site/API status)
  • App deletion with related data cleanup
  • App metadata and code retrieval operations
  • Error handling for invalid inputs

Benefits:

  • Enhanced reliability: Tests run against real database instances instead of mocks
  • Better integration confidence: Catches database interaction issues that unit tests might miss
  • Consistent test environment: Same database setup across local and CI/CD environments
  • Improved maintainability: Realistic test scenarios using Faker for data generation

Screenshots

Before After
Limited unit tests with mocked database interactions Comprehensive integration tests with real database containers
Potential database integration issues going undetected Full database operation validation with testcontainers

Checklist

  • This change requires a documentation update, included: Dify Document
  • I understand that this PR may be closed in case there was no previous discussion or issues. (This doesn't apply to typos!)
  • I've added a test for each change that was introduced, and I tried as much as possible to make a single atomic change.
  • I've updated the documentation accordingly.
  • I ran dev/reformat(backend) and cd web && npx lint-staged(frontend) to appease the lint gods
**Original Pull Request:** https://github.com/langgenius/dify/pull/23523 **State:** closed **Merged:** Yes --- > [!IMPORTANT] > > 1. Make sure you have read our [contribution guidelines](https://github.com/langgenius/dify/blob/main/CONTRIBUTING.md) > 2. Ensure there is an associated issue and you have been assigned to it > 3. Use the correct syntax to link this PR: `Fixes #<issue number>`. ## Summary This PR introduces comprehensive integration tests for the `AppService` class using testcontainers to improve test reliability and coverage. The implementation addresses the gap between unit tests with mocks and full end-to-end tests by providing real database integration while maintaining test isolation and consistency. Fix #23522 ### Key Changes: - **Added testcontainers-based integration tests** for `AppService` with 16 comprehensive test methods - **Implemented real database testing** while mocking external service dependencies (FeatureService, EnterpriseService, ModelManager) - **Comprehensive CRUD operation coverage** including app creation, retrieval, updates, and deletion - **Advanced filtering and pagination testing** with support for mode, name, tag, and ownership filters - **Edge case validation** including invalid mode handling and no-change update scenarios - **Proper test isolation** using `db_session_with_containers` fixture and Faker for realistic test data ### Test Coverage Includes: - App creation with various modes and parameters - App retrieval and pagination with multiple filter combinations - App updates (general, name-only, icon-only, site/API status) - App deletion with related data cleanup - App metadata and code retrieval operations - Error handling for invalid inputs ### Benefits: - **Enhanced reliability**: Tests run against real database instances instead of mocks - **Better integration confidence**: Catches database interaction issues that unit tests might miss - **Consistent test environment**: Same database setup across local and CI/CD environments - **Improved maintainability**: Realistic test scenarios using Faker for data generation ## Screenshots | Before | After | |--------|-------| | Limited unit tests with mocked database interactions | Comprehensive integration tests with real database containers | | Potential database integration issues going undetected | Full database operation validation with testcontainers | ## Checklist - [ ] This change requires a documentation update, included: [Dify Document](https://github.com/langgenius/dify-docs) - [x] I understand that this PR may be closed in case there was no previous discussion or issues. (This doesn't apply to typos!) - [x] I've added a test for each change that was introduced, and I tried as much as possible to make a single atomic change. - [x] I've updated the documentation accordingly. - [x] I ran `dev/reformat`(backend) and `cd web && npx lint-staged`(frontend) to appease the lint gods
yindo added the pull-request label 2026-02-21 20:47:13 -05:00
yindo closed this issue 2026-02-21 20:47:13 -05:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: langgenius/dify#30296