Ctrl K
ComunidadGuías…

test/controllers/search_controller_test.rb

Rama master · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
# frozen_string_literal: true

require "test_helper"

class SearchControllerTest < ActionDispatch::IntegrationTest
  test "should get index" do
    login
    get search_url(query: "test")

    assert_response :success
  end

  test "should get index via api" do
    get search_url(query: "1"), as: :json, headers: api_token_header(users(:visitor1))

    assert_response :success

    response = @response.parsed_body
    assert response["albums"].is_a?(Array)
    assert response["artists"].is_a?(Array)
    assert response["playlists"].is_a?(Array)
    assert response["songs"].is_a?(Array)

    assert_includes response["albums"].map { |a| a["name"] }, albums(:album1).name
    assert_includes response["artists"].map { |a| a["name"] }, artists(:artist1).name
    assert_includes response["playlists"].map { |p| p["name"] }, playlists(:playlist1).name
    assert_includes response["songs"].map { |s| s["name"] }, songs(:mp3_sample).name
  end

  test "should not set link header when no category has more results via api" do
    get search_url(query: "1"), as: :json, headers: api_token_header(users(:visitor1))

    assert_response :success
    assert_nil @response.headers["Link"]
  end

  test "should set scoped link header only for categories with more results via api" do
    11.times { |i| Album.create!(name: "more_album_#{i}", artist: artists(:artist1)) }
    11.times { |i| Playlist.create!(name: "more_playlist_#{i}", user: users(:admin)) }

    get search_url(query: "more_"), as: :json, headers: api_token_header(users(:visitor1))

    assert_response :success

    links = parse_link_header(@response.headers["Link"])
    assert_equal search_albums_url(query: "more_"), links["search-albums"]
    assert_equal search_playlists_url(query: "more_"), links["search-playlists"]
    assert_nil links["search-artists"]
    assert_nil links["search-songs"]
  end

  test "should set link header for all categories when each has more results via api" do
    11.times { |i| Album.create!(name: "extra_album_#{i}", artist: artists(:artist1)) }
    11.times { |i| Artist.create!(name: "extra_artist_#{i}") }
    11.times { |i| Playlist.create!(name: "extra_playlist_#{i}", user: users(:admin)) }
    11.times do |i|
      Song.create!(
        name: "extra_song_#{i}",
        file_path: "extra_song_#{i}.mp3",
        file_path_hash: "extra_song_#{i}_path_hash",
        md5_hash: "extra_song_#{i}_md5_hash",
        artist: artists(:artist1),
        album: albums(:album1)
      )
    end

    get search_url(query: "extra_"), as: :json, headers: api_token_header(users(:visitor1))

    assert_response :success

    links = parse_link_header(@response.headers["Link"])
    assert_equal search_albums_url(query: "extra_"), links["search-albums"]
    assert_equal search_artists_url(query: "extra_"), links["search-artists"]
    assert_equal search_playlists_url(query: "extra_"), links["search-playlists"]
    assert_equal search_songs_url(query: "extra_"), links["search-songs"]
  end
end