2019-04-29 20:27:42 -04:00
# frozen_string_literal: true
2016-02-13 13:29:53 -05:00
require 'rails_helper'
RSpec . describe MetadataController do
2018-06-13 23:13:28 -04:00
describe 'manifest.webmanifest' do
2019-05-01 09:44:45 -04:00
before do
SiteIconManager . enable
end
let ( :upload ) do
UploadCreator . new ( file_from_fixtures ( " smallest.png " ) , 'logo.png' ) . create_for ( Discourse . system_user . id )
end
2016-02-13 13:29:53 -05:00
it 'returns the right output' do
title = 'MyApp'
SiteSetting . title = title
2019-05-01 09:44:45 -04:00
SiteSetting . manifest_icon = upload
2017-11-03 01:19:31 -04:00
2018-06-13 23:13:28 -04:00
get " /manifest.webmanifest "
2018-06-07 01:08:28 -04:00
expect ( response . status ) . to eq ( 200 )
2018-06-13 23:13:28 -04:00
expect ( response . content_type ) . to eq ( 'application/manifest+json' )
2017-11-03 01:19:31 -04:00
manifest = JSON . parse ( response . body )
expect ( manifest [ " name " ] ) . to eq ( title )
2018-11-14 02:03:02 -05:00
expect ( manifest [ " icons " ] . first [ " src " ] ) . to eq (
2019-05-01 09:44:45 -04:00
UrlHelper . absolute ( SiteSetting . site_manifest_icon_url )
2018-11-14 02:03:02 -05:00
)
2016-02-13 13:29:53 -05:00
end
2018-05-17 15:10:35 -04:00
it 'can guess mime types' do
2019-05-01 09:44:45 -04:00
upload = UploadCreator . new ( file_from_fixtures ( " logo.jpg " ) , 'logo.jpg' ) . create_for ( Discourse . system_user . id )
2018-11-14 02:03:02 -05:00
2019-05-01 09:44:45 -04:00
SiteSetting . manifest_icon = upload
2018-06-13 23:13:28 -04:00
get " /manifest.webmanifest "
2018-11-14 02:03:02 -05:00
2018-06-07 01:08:28 -04:00
expect ( response . status ) . to eq ( 200 )
2018-05-17 15:10:35 -04:00
manifest = JSON . parse ( response . body )
2018-05-17 17:43:22 -04:00
expect ( manifest [ " icons " ] . first [ " type " ] ) . to eq ( " image/jpeg " )
2018-05-17 15:10:35 -04:00
end
it 'defaults to png' do
2019-05-01 09:44:45 -04:00
SiteSetting . manifest_icon = upload
2018-06-13 23:13:28 -04:00
get " /manifest.webmanifest "
2018-06-07 01:08:28 -04:00
expect ( response . status ) . to eq ( 200 )
2018-05-17 15:10:35 -04:00
manifest = JSON . parse ( response . body )
expect ( manifest [ " icons " ] . first [ " type " ] ) . to eq ( " image/png " )
end
2018-10-26 12:47:22 -04:00
it 'defaults to display standalone for Android' do
get " /manifest.webmanifest " , params : { } , headers : { 'USER-AGENT' = > 'Mozilla/5.0 (Linux; Android 7.0; SM-G892A Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/67.0.3396.87 Mobile Safari/537.36' }
manifest = JSON . parse ( response . body )
expect ( manifest [ " display " ] ) . to eq ( " standalone " )
end
it 'defaults to display browser for iPhone' do
get " /manifest.webmanifest " , params : { } , headers : { 'USER-AGENT' = > 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1' }
manifest = JSON . parse ( response . body )
expect ( manifest [ " display " ] ) . to eq ( " browser " )
end
it 'can be changed to display standalone for iPhones using a site setting' do
SiteSetting . pwa_display_browser_regex = " a^ " # this never matches
get " /manifest.webmanifest " , params : { } , headers : { 'USER-AGENT' = > 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1' }
manifest = JSON . parse ( response . body )
expect ( manifest [ " display " ] ) . to eq ( " standalone " )
end
2018-11-28 08:55:52 -05:00
it 'uses the short_title if it is set' do
get " /manifest.webmanifest "
expect ( response . status ) . to eq ( 200 )
manifest = JSON . parse ( response . body )
expect ( manifest ) . to_not have_key ( " short_name " )
SiteSetting . short_title = " foo "
get " /manifest.webmanifest "
expect ( response . status ) . to eq ( 200 )
manifest = JSON . parse ( response . body )
expect ( manifest [ " short_name " ] ) . to eq ( " foo " )
end
2016-02-13 13:29:53 -05:00
end
describe 'opensearch.xml' do
2019-05-01 09:44:45 -04:00
let ( :upload ) { Fabricate ( :upload ) }
2016-02-13 13:29:53 -05:00
it 'returns the right output' do
title = 'MyApp'
SiteSetting . title = title
2018-11-14 02:03:02 -05:00
SiteSetting . favicon = upload
2018-06-07 01:08:28 -04:00
get " /opensearch.xml "
2018-11-14 02:03:02 -05:00
2018-06-07 01:08:28 -04:00
expect ( response . status ) . to eq ( 200 )
2016-02-13 13:29:53 -05:00
expect ( response . body ) . to include ( title )
expect ( response . body ) . to include ( " /search?q={searchTerms} " )
expect ( response . body ) . to include ( 'image/png' )
2018-11-14 02:03:02 -05:00
expect ( response . body ) . to include ( UrlHelper . absolute ( upload . url ) )
2016-02-13 13:29:53 -05:00
expect ( response . content_type ) . to eq ( 'application/xml' )
end
end
end