Testowanie relacji many-to-many through z dodatkowymi atrybutami

Takie pytanko, bo mam zagwozdkę, gdzie/jak przetestować poniższą funkcjonalność.
A jest dość prosta (tutaj jeszcze uprościłem):

    class Character < ActiveRecord::Base
      has_many :char_names, dependent: :destroy
    
      def default_name
      	self.gender == 'K' ? 'nieznana kobieta' : 'nieznany mężczyzna'
      end
    
      def name_for(character)
      	char_names.where(named_id: character.id).count > 0 ? 
      		char_names.where(named_id: character.id).first.name : character.default_name
      end
    end
    
    class CharName < ActiveRecord::Base
    	belongs_to :character
    	belongs_to :named, class_name: "Character"
    end
    
    class CharNamesController < ApplicationController
      def create
      	@charname = current_character.char_names.build(charname_params)
        if @charname.save
          redirect_to events_path
        else
          redirect_to character_name_url(current_character.id)
        end
      end
    
      private
        def charname_params
          params.require(:char_name).permit(:name, :description, :named_id)
        end
    end

Czyli ogólnie mówiąc - mamy relację pomiędzy dwoma obiektami typu Character, która umożliwia zapamiętanie przez jedną postać nazwy (i opisu) drugiej postaci.
W praktyce to działa, ale teraz chciałbym dla porządku zrobić do tego testy i nie wiem gdzie. Widzę 3 możliwości:

  • w modelu Character (gdzie już jest test dla metody default_name a name_for jest wykonywane z perspektywy postaci),
  • w modelu CharName,
  • czy całościowy behaviour test dla kontrolera CharNamesController (to oznacza dość dużo operacji, bo trzeba utworzyć a potem zalogować usera, utworzyć kilka postaci, wybrać postać, sprawdzić jak wyświetlana jest nazwa/opis, wysłać formularz). W sumie wolałbym przetestować same klasy + tylko samą poprawność widoków z nazwami i formularzami.

A może w ogóle inaczej rozwiązać tą funkcjonalność?

Wystarczy test funkcjonalny: karmisz kontroler “życiowymi” parametrami i oczekujesz pojawienia się konkretnych wartości w bazie. Pokrycie Character#default_name możesz zawrzeć albo w tym albo do testu samego modelu.

Cokolwiek ponad wyżej wymienione będzie zbędnym testowaniem rzeczy pokrytych testami już w kodzie samych Rails ów.