require 'rails_helper'

RSpec.describe MetadataController do
  describe 'manifest.webmanifest' do
    it 'returns the right output' do
      title = 'MyApp'
      SiteSetting.title = title
      SiteSetting.large_icon_url = "http://big.square/png"

      get "/manifest.webmanifest"
      expect(response.status).to eq(200)
      expect(response.content_type).to eq('application/manifest+json')
      manifest = JSON.parse(response.body)

      expect(manifest["name"]).to eq(title)
      expect(manifest["icons"].first["src"]).to eq("http://big.square/png")
    end

    it 'can guess mime types' do
      SiteSetting.large_icon_url = "http://big.square/ico.jpg"
      get "/manifest.webmanifest"
      expect(response.status).to eq(200)
      manifest = JSON.parse(response.body)
      expect(manifest["icons"].first["type"]).to eq("image/jpeg")
    end

    it 'defaults to png' do
      SiteSetting.large_icon_url = "http://big.square/noidea.bogus"
      get "/manifest.webmanifest"
      expect(response.status).to eq(200)
      manifest = JSON.parse(response.body)
      expect(manifest["icons"].first["type"]).to eq("image/png")
    end
  end

  describe 'opensearch.xml' do
    it 'returns the right output' do
      title = 'MyApp'
      favicon_path = '/uploads/something/23432.png'
      SiteSetting.title = title
      SiteSetting.favicon_url = favicon_path
      get "/opensearch.xml"
      expect(response.status).to eq(200)
      expect(response.body).to include(title)
      expect(response.body).to include("/search?q={searchTerms}")
      expect(response.body).to include('image/png')
      expect(response.body).to include(favicon_path)
      expect(response.content_type).to eq('application/xml')
    end
  end
end