2021-05-26 17:41:35 +08:00
# frozen_string_literal: true
2022-07-28 10:27:38 +08:00
RSpec . describe Onebox :: Engine :: AmazonOnebox do
2022-07-28 00:14:14 +08:00
describe " regular amazon page " do
2021-05-26 17:41:35 +08:00
before do
@link = " https://www.amazon.com/Knit-Noro-Accessories-Colorful-Little/dp/193609620X "
@uri = " https://www.amazon.com/dp/193609620X "
stub_request (
:get ,
" https://www.amazon.com/Seven-Languages-Weeks-Programming-Programmers/dp/193435659X " ,
) . to_return ( status : 200 , body : onebox_response ( " amazon " ) )
end
2022-07-28 00:14:14 +08:00
include_context " with engines "
2021-05-26 17:41:35 +08:00
it_behaves_like " an engine "
describe " works with international domains " do
def check_link ( tdl , link )
onebox_cls = Onebox :: Matcher . new ( link ) . oneboxed
expect ( onebox_cls ) . to_not be ( nil )
expect ( onebox_cls . new ( link ) . url ) . to include ( " https://www.amazon. #{ tdl } " )
end
it " matches canadian domains " do
check_link (
" ca " ,
" https://www.amazon.ca/Too-Much-Happiness-Alice-Munro-ebook/dp/B0031TZ98K/ " ,
)
end
it " matches german domains " do
check_link (
" de " ,
" https://www.amazon.de/Buddenbrooks-Verfall-einer-Familie-Roman/dp/3596294312/ " ,
)
end
it " matches uk domains " do
check_link ( " co.uk " , " https://www.amazon.co.uk/Pygmalion-George-Bernard-Shaw/dp/1420925237/ " )
end
it " matches japanese domains " do
check_link (
" co.jp " ,
" https://www.amazon.co.jp/%E9%9B%AA%E5%9B%BD-%E6%96%B0%E6%BD%AE%E6%96%87%E5%BA%AB-%E3%81%8B-1-1-%E5%B7%9D%E7%AB%AF-%E5%BA%B7%E6%88%90/dp/4101001014/ " ,
)
end
it " matches chinese domains " do
check_link (
" cn " ,
" https://www.amazon.cn/%E5%AD%99%E5%AD%90%E5%85%B5%E6%B3%95-%E5%AD%99%E8%86%91%E5%85%B5%E6%B3%95-%E5%AD%99%E6%AD%A6/dp/B0011C40FC/ " ,
)
end
it " matches french domains " do
check_link (
" fr " ,
" https://www.amazon.fr/Les-Mots-autres-%C3%A9crits-autobiographiques/dp/2070114147/ " ,
)
end
it " matches italian domains " do
check_link ( " it " , " https://www.amazon.it/Tutte-poesie-Salvatore-Quasimodo/dp/8804520477/ " )
end
it " matches spanish domains " do
check_link (
" es " ,
" https://www.amazon.es/familia-Pascual-Duarte-Camilo-Jos%C3%A9-ebook/dp/B00EJRTKTW/ " ,
)
end
2021-06-02 04:23:18 +08:00
it " matches brazilian domains " do
2021-05-26 17:41:35 +08:00
check_link (
" com.br " ,
" https://www.amazon.com.br/A-p%C3%A1tria-chuteiras-Nelson-Rodrigues-ebook/dp/B00J2B414Y/ " ,
)
end
it " matches indian domains " do
check_link ( " in " , " https://www.amazon.in/Fireflies-Rabindranath-Tagore/dp/9381523169/ " )
end
it " matches mexican domains " do
check_link (
" com.mx " ,
" https://www.amazon.com.mx/Legend-Zelda-Links-Awakening-Nintendo/dp/B07SG15148/ " ,
)
end
end
describe " # url " do
let ( :long_url ) do
" https://www.amazon.ca/gp/product/B087Z3N428?pf_rd_r=SXABADD0ZZ3NF9Q5F8TW&pf_rd_p=05378fd5-c43e-4948-99b1-a65b129fdd73&pd_rd_r=0237fb28-7f47-49f4-986a-be0c78e52863&pd_rd_w=FfIoI&pd_rd_wg=Hw4qq&ref_=pd_gw_unk "
2023-01-09 19:18:21 +08:00
end
2021-05-26 17:41:35 +08:00
it " maintains the same http/https scheme as the requested URL " do
expect ( described_class . new ( " https://www.amazon.fr/gp/product/B01BYD0TZM " ) . url ) . to eq (
" https://www.amazon.fr/dp/B01BYD0TZM " ,
)
expect ( described_class . new ( " http://www.amazon.fr/gp/product/B01BYD0TZM " ) . url ) . to eq (
" https://www.amazon.fr/dp/B01BYD0TZM " ,
)
end
it " removes parameters from the URL " do
expect ( described_class . new ( long_url ) . url ) . not_to include ( " ?pf_rd_r " )
end
end
describe " # to_html " do
it " includes image " do
expect ( html ) . to include (
" https://images-na.ssl-images-amazon.com/images/I/51opYcR6kVL._SY400_.jpg " ,
)
end
it " includes description " do
expect ( html ) . to include (
" You should learn a programming language every year, as recommended by The Pragmatic Programmer. " ,
)
end
it " includes price " do
expect ( html ) . to include ( " $21.11 " )
end
it " includes title " do
expect ( html ) . to include (
" Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages (Pragmatic Programmers) " ,
)
end
end
end
2022-07-28 00:14:14 +08:00
describe " amazon with opengraph " do
2021-05-26 17:41:35 +08:00
let ( :link ) { " https://www.amazon.com/dp/B01MFXN4Y2 " }
let ( :html ) { described_class . new ( link ) . to_html }
before do
stub_request ( :get , " https://www.amazon.com/dp/B01MFXN4Y2 " ) . to_return (
status : 200 ,
body : onebox_response ( " amazon-og " ) ,
)
2023-01-09 19:18:21 +08:00
2021-05-26 17:41:35 +08:00
stub_request ( :get , " https://www.amazon.com/Christine-Rebecca-Hall/dp/B01MFXN4Y2 " ) . to_return (
status : 200 ,
body : onebox_response ( " amazon-og " ) ,
)
end
describe " # to_html " do
it " includes image " do
expect ( html ) . to include (
" https://images-na.ssl-images-amazon.com/images/I/51nOF2iBa6L._SX940_.jpg " ,
)
end
it " includes description " do
expect ( html ) . to include (
" CHRISTINE is the story of an aspiring newswoman caught in the midst of a personal and professional life crisis. Between unrequited love, frustration at work, a tumultuous home, and self-doubt; she begins to spiral down a dark path. " ,
)
end
it " includes title " do
expect ( html ) . to include ( " Watch Christine online - Amazon Video " )
end
end
end
2022-07-28 00:14:14 +08:00
describe " amazon book page " do
2021-05-26 17:41:35 +08:00
let ( :link ) { " https://www.amazon.com/dp/B00AYQNR46 " }
let ( :html ) { described_class . new ( link ) . to_html }
before do
stub_request ( :get , " https://www.amazon.com/dp/B00AYQNR46 " ) . to_return (
status : 200 ,
body : onebox_response ( " amazon " ) ,
)
2023-01-09 19:18:21 +08:00
2021-05-26 17:41:35 +08:00
stub_request (
:get ,
" https://www.amazon.com/Seven-Languages-Weeks-Programming-Programmers/dp/193435659X " ,
) . to_return ( status : 200 , body : onebox_response ( " amazon " ) )
end
describe " # to_html " do
it " includes title and author " do
expect ( html ) . to include (
" Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages (Pragmatic Programmers) " ,
)
expect ( html ) . to include ( " Bruce Tate " )
end
it " includes ISBN " do
expect ( html ) . to include ( " 978-1934356593 " )
end
it " includes publisher " do
expect ( html ) . to include ( " Pragmatic Bookshelf " )
end
end
end
2022-07-28 00:14:14 +08:00
describe " amazon ebook page " do
2021-05-26 17:41:35 +08:00
let ( :link ) { " https://www.amazon.com/dp/193435659X " }
let ( :html ) { described_class . new ( link ) . to_html }
before do
stub_request ( :get , " https://www.amazon.com/dp/193435659X " ) . to_return (
status : 200 ,
body : onebox_response ( " amazon-ebook " ) ,
)
2023-01-09 19:18:21 +08:00
2021-05-26 17:41:35 +08:00
stub_request (
:get ,
" https://www.amazon.com/Seven-Languages-Weeks-Programming-Programmers-ebook/dp/B00AYQNR46 " ,
) . to_return ( status : 200 , body : onebox_response ( " amazon-ebook " ) )
end
describe " # to_html " do
it " includes title and author " do
expect ( html ) . to include (
" Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages (Pragmatic Programmers) " ,
)
expect ( html ) . to include ( " Bruce Tate " )
end
it " includes image " do
expect ( html ) . to include (
" https://images-na.ssl-images-amazon.com/images/I/51LZT%2BtSrTL._SX133_.jpg " ,
)
end
it " includes ASIN " do
expect ( html ) . to include ( " B00AYQNR46 " )
end
it " includes rating " do
expect ( html ) . to include ( " 4.2 out of 5 stars " )
end
it " includes publisher " do
expect ( html ) . to include ( " Pragmatic Bookshelf " )
end
end
end
2021-06-02 04:23:18 +08:00
2022-07-28 00:14:14 +08:00
describe " non-standard response from Amazon " do
2021-06-02 04:23:18 +08:00
let ( :link ) { " https://www.amazon.com/dp/B0123ABCD3210 " }
let ( :onebox ) { described_class . new ( link ) }
before do
stub_request ( :get , " https://www.amazon.com/dp/B0123ABCD3210 " ) . to_return (
status : 200 ,
body : onebox_response ( " amazon-error " ) ,
)
end
it " returns a blank result " do
expect ( onebox . to_html ) . to eq ( " " )
end
it " produces a placeholder " do
2021-06-08 01:03:53 +08:00
expect ( onebox . placeholder_html ) . to include (
'<aside class="onebox amazon" data-onebox-src="https://www.amazon.com/dp/B0123ABCD3210">' ,
)
2021-06-02 04:23:18 +08:00
end
it " returns errors " do
onebox . to_html
expect ( onebox . errors ) . to eq ( { title : [ " is blank " ] , description : [ " is blank " ] } )
end
end
2022-07-28 00:14:14 +08:00
describe " alternate page layout response from Amazon " do
2022-03-05 07:31:53 +08:00
let ( :link ) { " https://www.amazon.com/dp/B07FQ7M16H " }
let ( :html ) { described_class . new ( link ) . to_html }
before do
stub_request ( :get , " https://www.amazon.com/dp/B07FQ7M16H " ) . to_return (
status : 200 ,
body : onebox_response ( " amazon-alternate " ) ,
)
2023-01-09 19:18:21 +08:00
2022-03-05 07:31:53 +08:00
stub_request (
:get ,
" https://www.amazon.com/Lnchett-Nibbler-Quality-Attachment-Straight/dp/B07FQ7M16H " ,
) . to_return ( status : 200 , body : onebox_response ( " amazon-alternate " ) )
end
describe " # to_html " do
it " includes image " do
expect ( html ) . to include ( " https://m.media-amazon.com/images/I/71y4BRqNP7L._AC_SL1500_.jpg " )
end
it " includes description " do
expect ( html ) . to include (
" Drill Attachment for Straight Curve and Circle Cutting, Maximum 14 Gauge Steel " ,
)
end
it " includes price " do
expect ( html ) . to include ( " $37.99 " )
end
it " includes title " do
expect ( html ) . to include ( " Quality Nibbler Drill Attachment... " )
end
end
end
2021-05-26 17:41:35 +08:00
end