Back to Repositories

Validating I18n Implementation and Key Management in maybe-finance

This test suite validates internationalization (i18n) functionality in a Ruby application using the i18n-tasks gem. It ensures proper management of translation keys, file normalization, and consistent string interpolations across the application.

Test Coverage Overview

The test suite provides comprehensive coverage of i18n implementation, focusing on four critical areas:

  • Missing translation key detection
  • Unused translation key identification
  • File normalization validation
  • Interpolation consistency checks
The tests verify both positive and negative scenarios to ensure robust i18n implementation.

Implementation Analysis

The testing approach utilizes ActiveSupport::TestCase as the base framework with I18n::Tasks::BaseTask for i18n validation. Each test method focuses on a specific aspect of i18n implementation, using assertion patterns to verify expected outcomes. The suite employs clear error messaging with actionable remediation steps.

Technical Details

Key technical components include:

  • i18n-tasks gem integration
  • ActiveSupport test framework
  • Setup method initializing I18n::Tasks::BaseTask
  • Locale-specific testing (focused on :en locale)
  • Skip functionality for file normalization tests

Best Practices Demonstrated

The test suite exemplifies several testing best practices:

  • Clear test method naming reflecting functionality
  • Detailed error messages with remediation steps
  • Isolated test cases for specific functionality
  • Proper setup and initialization patterns
  • Effective use of assertion methods

maybe-finance/maybe

test/i18n_test.rb

            
require "i18n/tasks"

class I18nTest < ActiveSupport::TestCase
  def setup
    @i18n = I18n::Tasks::BaseTask.new
  end

  def test_no_missing_keys
    missing_keys = @i18n.missing_keys(locales: [ :en ])
    assert_empty missing_keys,
                 "Missing #{missing_keys.leaves.count} i18n keys, run `i18n-tasks missing' to show them"
  end

  def test_no_unused_keys
    unused_keys = @i18n.unused_keys(locales: [ :en ])
    assert_empty unused_keys,
                 "#{unused_keys.leaves.count} unused i18n keys, run `i18n-tasks unused' to show them"
  end

  def test_files_are_normalized
    skip "Skipping file normalization test"
    non_normalized = @i18n.non_normalized_paths(locales: [ :en ])
    error_message = "The following files need to be normalized:
" \
                    "#{non_normalized.map { |path| "  #{path}" }.join("
")}
" \
                    "Please run `i18n-tasks normalize' to fix"
    assert_empty non_normalized, error_message
  end

  def test_no_inconsistent_interpolations
    inconsistent_interpolations = @i18n.inconsistent_interpolations(locales: [ :en ])
    error_message = "#{inconsistent_interpolations.leaves.count} i18n keys have inconsistent interpolations.
" \
                    "Please run `i18n-tasks check-consistent-interpolations' to show them"
    assert_empty inconsistent_interpolations, error_message
  end
end