From 840ecb2520f348a2b397ddf4bdeac009a99a5fcc Mon Sep 17 00:00:00 2001 From: Ivan Kocienski Date: Mon, 26 Sep 2022 17:50:25 +0100 Subject: [PATCH 1/4] Fix: generate full URLs in GraphQL For articles --- app/graphql/types/article_type.rb | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/app/graphql/types/article_type.rb b/app/graphql/types/article_type.rb index 3c163bfac..ce302053d 100644 --- a/app/graphql/types/article_type.rb +++ b/app/graphql/types/article_type.rb @@ -29,8 +29,7 @@ class ArticleType < Types::BaseObject method: :body field :image, String, - description: 'The image of the article (a URL)', - method: :highres_image + description: 'The image of the article (a URL)' #, field :date_published, GraphQL::Types::ISO8601DateTime, description: 'Date that the article was published on PlaceCal', @@ -50,5 +49,14 @@ class ArticleType < Types::BaseObject # creativeWorkStatus: string, from is_draft # author: person, from user + + def image + return nil unless object.article_image_url.present? + + url = URI::HTTP.build(Rails.application.default_url_options) + url.path = object.article_image_url + + url.to_s + end end end From 37f935003df7a89a3aac25a0b596ba5936455d15 Mon Sep 17 00:00:00 2001 From: Ivan Kocienski Date: Tue, 27 Sep 2022 14:24:25 +0100 Subject: [PATCH 2/4] Tests: verify graphql image urls have domain --- Gemfile | 1 + Gemfile.lock | 4 + test/fixtures/files/good-cat-picture.jpg | Bin 0 -> 73365 bytes test/system/graphql/partner_test.rb | 141 +++++++++++++++++++++++ 4 files changed, 146 insertions(+) create mode 100644 test/fixtures/files/good-cat-picture.jpg create mode 100644 test/system/graphql/partner_test.rb diff --git a/Gemfile b/Gemfile index 5d0dc4b58..a2732d4f9 100644 --- a/Gemfile +++ b/Gemfile @@ -125,6 +125,7 @@ group :test do # gem 'simplecov', require: false gem 'vcr' gem 'webmock' + gem 'graphql-client' end # Windows does not include zoneinfo files, so bundle the tzinfo-data gem diff --git a/Gemfile.lock b/Gemfile.lock index 4a60500d8..7925485c3 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -204,6 +204,9 @@ GEM railties sprockets-rails graphql (2.0.9) + graphql-client (0.18.0) + activesupport (>= 3.0) + graphql groupdate (6.1.0) activesupport (>= 5.2) guard (2.18.0) @@ -555,6 +558,7 @@ DEPENDENCIES geocoder (~> 1.6.0) graphiql-rails graphql + graphql-client groupdate guard guard-livereload (~> 2.5) diff --git a/test/fixtures/files/good-cat-picture.jpg b/test/fixtures/files/good-cat-picture.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f39cc186beeda55dfbc9f09237a865ee29be2111 GIT binary patch literal 73365 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�qbD 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

~9L6_kPC>*@O@B~-0WjR#bD%GLts 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 literal 0 HcmV?d00001 diff --git a/test/system/graphql/partner_test.rb b/test/system/graphql/partner_test.rb new file mode 100644 index 000000000..a24e846c4 --- /dev/null +++ b/test/system/graphql/partner_test.rb @@ -0,0 +1,141 @@ +require_relative "../application_system_test_case" + +=begin + +This is basically a stand alone script that pokes the GraphQL endpoint +running on the server through a network connection (just as how users +will use the endpoint on staging/production). It does not use any +internal code like /test/integration/graphql/* + +We could be being overly paranoid here but it may become useful for +catching the kind of bugs that only show up on a real network +connection. + +NOTE: we are mainly interested in testing the endpoints that +the Trans Dimension elm app uses. +=end + +require 'graphql/client' +require 'graphql/client/http' + + +module PlaceCalApi + extend self + + PING_QUERY_STRING = + "query { ping }" + + ARTICLE_CONNECTION_QUERY_STRING = <<-QUERY + query { articleConnection { edges { + node { + articleBody + datePublished + headline + providers { id } + image + } } } } + QUERY + + PARTNERS_BY_TAG_QUERY_STRING = <<-QUERY + query($tagId: ID!) { + partnersByTag(tagId: $tagId) { + id + name + description + summary + contact { email, telephone } + url + address { streetAddress, postalCode, addressRegion, geo { latitude, longitude } } + areasServed { name abbreviatedName } + logo + } } + QUERY + + + def configure(default_url_options) + @url = URI::HTTP::build(default_url_options) + @url.path = '/api/v1/graphql' + + @http = GraphQL::Client::HTTP.new(@url.to_s) + @schema = GraphQL::Client.load_schema(@http) + @client = GraphQL::Client.new(schema: @schema, execute: @http) + + define_constant 'PingQuery', @client.parse(PING_QUERY_STRING) + + define_constant 'ArticleConnectionQuery', @client.parse(ARTICLE_CONNECTION_QUERY_STRING) + + define_constant 'PartnersByTagQuery', @client.parse(PARTNERS_BY_TAG_QUERY_STRING) + end + + # the API endpoints + def do_ping_query + @client.query PingQuery + end + + def do_article_connection_query + @client.query ArticleConnectionQuery + end + + def do_partners_by_tag_query(tag_id) + @client.query PartnersByTagQuery, variables: { 'tagId': tag_id } + end + + private + + def define_constant(name, value) + return if const_defined?(name) + const_set name, value + end +end + + +class GraphQLPartnerTest < ApplicationSystemTestCase + include ActionDispatch::TestProcess::FixtureFile + + setup do + create_default_site + + @server = Capybara.current_session.server + + app_routes = Rails.application.routes + app_routes.default_url_options[:host] = @server.host + app_routes.default_url_options[:port] = @server.port + + PlaceCalApi.configure app_routes.default_url_options + end + + test "ping works" do + result = PlaceCalApi.do_ping_query + assert result.errors.empty? + assert result.data.ping =~ /^Hello World! The time is \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/, + 'missing PING data response' + end + + test 'news article connection with image url' do + upload = fixture_file_upload('good-cat-picture.jpg') + article = create(:article, article_image: upload) + + result = PlaceCalApi.do_article_connection_query + + article = result.data.article_connection.edges.first.node.to_h + assert article, 'article node not found' + + url = article['image'] + assert url =~ %r{\Ahttp://#{@server.host}:#{@server.port}/}, 'article image is not full URL' + end + + test 'partners by tag has correct logo url' do + upload = fixture_file_upload('good-cat-picture.jpg') + partner = create(:partner, image: upload) + tag = create(:tag) + partner.tags << tag + + result = PlaceCalApi.do_partners_by_tag_query(tag.id) + partner = result.data.partners_by_tag.first.to_h + assert partner + + url = partner['logo'] + assert url =~ %r{\Ahttp://#{@server.host}:#{@server.port}/}, 'partner logo is not full URL' + end +end + From acd487128a7447afaed7e4dcb3f4631ea9ce056d Mon Sep 17 00:00:00 2001 From: Ivan Kocienski Date: Wed, 28 Sep 2022 09:46:46 +0100 Subject: [PATCH 3/4] Fix: URLs generated have correct protocol In production environments the protocol should be HTTPS (which is set in the environments folder). Tests that check that the correct protocol is being used in the GQL API --- app/graphql/types/article_type.rb | 1 + app/graphql/types/partner_type.rb | 1 + .../graphql/{partner_test.rb => graphql_test.rb} | 13 ++++++++++--- 3 files changed, 12 insertions(+), 3 deletions(-) rename test/system/graphql/{partner_test.rb => graphql_test.rb} (87%) diff --git a/app/graphql/types/article_type.rb b/app/graphql/types/article_type.rb index ce302053d..fac59224c 100644 --- a/app/graphql/types/article_type.rb +++ b/app/graphql/types/article_type.rb @@ -54,6 +54,7 @@ def image return nil unless object.article_image_url.present? url = URI::HTTP.build(Rails.application.default_url_options) + url.scheme = Rails.application.default_url_options[:protocol] url.path = object.article_image_url url.to_s diff --git a/app/graphql/types/partner_type.rb b/app/graphql/types/partner_type.rb index 362c9fb06..fe1ffc7b8 100644 --- a/app/graphql/types/partner_type.rb +++ b/app/graphql/types/partner_type.rb @@ -68,6 +68,7 @@ def logo return nil unless object.logo_url.present? url = URI::HTTP.build(Rails.application.default_url_options) + url.scheme = Rails.application.default_url_options[:protocol] url.path = object.logo_url url.to_s diff --git a/test/system/graphql/partner_test.rb b/test/system/graphql/graphql_test.rb similarity index 87% rename from test/system/graphql/partner_test.rb rename to test/system/graphql/graphql_test.rb index a24e846c4..696c30e9e 100644 --- a/test/system/graphql/partner_test.rb +++ b/test/system/graphql/graphql_test.rb @@ -89,10 +89,17 @@ def define_constant(name, value) end -class GraphQLPartnerTest < ApplicationSystemTestCase +class GraphQLTest < ApplicationSystemTestCase + # This tests a number of small (critical) bits of the GraphQL + # system so its name is bit generic + # TODO: maybe more tests covering the API? + include ActionDispatch::TestProcess::FixtureFile setup do + # test that we are sending back the correct protocol as well + Rails.application.default_url_options[:protocol] = 'https' + create_default_site @server = Capybara.current_session.server @@ -121,7 +128,7 @@ class GraphQLPartnerTest < ApplicationSystemTestCase assert article, 'article node not found' url = article['image'] - assert url =~ %r{\Ahttp://#{@server.host}:#{@server.port}/}, 'article image is not full URL' + assert url =~ %r{\Ahttps://#{@server.host}:#{@server.port}/}, 'article image is not full URL' end test 'partners by tag has correct logo url' do @@ -135,7 +142,7 @@ class GraphQLPartnerTest < ApplicationSystemTestCase assert partner url = partner['logo'] - assert url =~ %r{\Ahttp://#{@server.host}:#{@server.port}/}, 'partner logo is not full URL' + assert url =~ %r{\Ahttps://#{@server.host}:#{@server.port}/}, 'partner logo is not full URL' end end From ba2d10cfb67ffc8cc4b9d52a33c23480dac41d62 Mon Sep 17 00:00:00 2001 From: "Ivan Kocienski (GFSC)" <109223824+ivan-kocienski-gfsc@users.noreply.github.com> Date: Wed, 28 Sep 2022 10:13:13 +0100 Subject: [PATCH 4/4] Update app/graphql/types/article_type.rb Co-authored-by: F --- app/graphql/types/article_type.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/graphql/types/article_type.rb b/app/graphql/types/article_type.rb index fac59224c..4563ab720 100644 --- a/app/graphql/types/article_type.rb +++ b/app/graphql/types/article_type.rb @@ -29,7 +29,7 @@ class ArticleType < Types::BaseObject method: :body field :image, String, - description: 'The image of the article (a URL)' #, + description: 'The image of the article (a URL)' field :date_published, GraphQL::Types::ISO8601DateTime, description: 'Date that the article was published on PlaceCal',