@@ -321,6 +321,162 @@ class Bar < ApplicationRecord
321321 CONTENT
322322 end
323323
324+ test "returns main association on has_many :through association" do
325+ expected_response = {
326+ location : "#{ dummy_root } /app/models/user.rb:2" ,
327+ name : "User" ,
328+ }
329+ RunnerClient . any_instance . stubs ( association_target : expected_response )
330+
331+ response = hover_on_source ( <<~RUBY , { line : 2 , character : 14 } )
332+ class Organization < ApplicationRecord
333+ has_many :memberships
334+ has_many :users, through: :memberships
335+ end
336+
337+ class User < ApplicationRecord
338+ end
339+ RUBY
340+
341+ assert_equal ( <<~CONTENT . chomp , response . contents . value )
342+ ```ruby
343+ User
344+ ```
345+
346+ **Definitions**: [fake.rb](file:///fake.rb#L6,1-7,4)
347+ CONTENT
348+ end
349+
350+ test "returns through association on has_many :through association" do
351+ expected_response = {
352+ location : "#{ dummy_root } /app/models/membership.rb:3" ,
353+ name : "Membership" ,
354+ }
355+ RunnerClient . any_instance . stubs ( association_target : expected_response )
356+
357+ response = hover_on_source ( <<~RUBY , { line : 2 , character : 31 } )
358+ class Organization < ApplicationRecord
359+ has_many :memberships
360+ has_many :users, through: :memberships
361+ end
362+
363+ class Membership < ApplicationRecord
364+ end
365+ RUBY
366+
367+ assert_equal ( <<~CONTENT . chomp , response . contents . value )
368+ ```ruby
369+ Membership
370+ ```
371+
372+ **Definitions**: [fake.rb](file:///fake.rb#L6,1-7,4)
373+ CONTENT
374+ end
375+
376+ test "returns main association on has_one :through association" do
377+ expected_response = {
378+ location : "#{ dummy_root } /app/models/flag.rb:2" ,
379+ name : "Flag" ,
380+ }
381+ RunnerClient . any_instance . stubs ( association_target : expected_response )
382+
383+ response = hover_on_source ( <<~RUBY , { line : 2 , character : 13 } )
384+ class User < ApplicationRecord
385+ belongs_to :location, class_name: "Country"
386+ has_one :country_flag, through: :location, source: :flag
387+ end
388+
389+ class Flag < ApplicationRecord
390+ end
391+ RUBY
392+
393+ assert_equal ( <<~CONTENT . chomp , response . contents . value )
394+ ```ruby
395+ Flag
396+ ```
397+
398+ **Definitions**: [fake.rb](file:///fake.rb#L6,1-7,4)
399+ CONTENT
400+ end
401+
402+ test "returns through association on has_one :through association" do
403+ expected_response = {
404+ location : "#{ dummy_root } /app/models/country.rb:2" ,
405+ name : "Country" ,
406+ }
407+ RunnerClient . any_instance . stubs ( association_target : expected_response )
408+
409+ response = hover_on_source ( <<~RUBY , { line : 2 , character : 37 } )
410+ class User < ApplicationRecord
411+ belongs_to :location, class_name: "Country"
412+ has_one :country_flag, through: :location, source: :flag
413+ end
414+
415+ class Country < ApplicationRecord
416+ end
417+ RUBY
418+
419+ assert_equal ( <<~CONTENT . chomp , response . contents . value )
420+ ```ruby
421+ Country
422+ ```
423+
424+ **Definitions**: [fake.rb](file:///fake.rb#L6,1-7,4)
425+ CONTENT
426+ end
427+
428+ test "returns string main association on has_many :through association" do
429+ expected_response = {
430+ location : "#{ dummy_root } /app/models/user.rb:2" ,
431+ name : "User" ,
432+ }
433+ RunnerClient . any_instance . stubs ( association_target : expected_response )
434+
435+ response = hover_on_source ( <<~RUBY , { line : 2 , character : 14 } )
436+ class Organization < ApplicationRecord
437+ has_many :memberships
438+ has_many "users", through: :memberships
439+ end
440+
441+ class User < ApplicationRecord
442+ end
443+ RUBY
444+
445+ assert_equal ( <<~CONTENT . chomp , response . contents . value )
446+ ```ruby
447+ User
448+ ```
449+
450+ **Definitions**: [fake.rb](file:///fake.rb#L6,1-7,4)
451+ CONTENT
452+ end
453+
454+ test "returns string through association on has_many :through association" do
455+ expected_response = {
456+ location : "#{ dummy_root } /app/models/membership.rb:3" ,
457+ name : "Membership" ,
458+ }
459+ RunnerClient . any_instance . stubs ( association_target : expected_response )
460+
461+ response = hover_on_source ( <<~RUBY , { line : 2 , character : 32 } )
462+ class Organization < ApplicationRecord
463+ has_many "memberships"
464+ has_many :users, through: "memberships"
465+ end
466+
467+ class Membership < ApplicationRecord
468+ end
469+ RUBY
470+
471+ assert_equal ( <<~CONTENT . chomp , response . contents . value )
472+ ```ruby
473+ Membership
474+ ```
475+
476+ **Definitions**: [fake.rb](file:///fake.rb#L6,1-7,4)
477+ CONTENT
478+ end
479+
324480 private
325481
326482 def hover_on_source ( source , position )
0 commit comments